diff --git a/_modules/app/core/config.html b/_modules/app/core/config.html index 12eadee..8a3e1d9 100644 --- a/_modules/app/core/config.html +++ b/_modules/app/core/config.html @@ -33,7 +33,7 @@ - + @@ -557,8 +557,15 @@

Source code for app.core.config

     db_file: str = "sqlite:///./flux-restful.db"
     flux_user: str = os.environ.get("FLUX_USER") or "fluxuser"
     flux_token: Optional[str] = os.environ.get("FLUX_TOKEN")
+    flux_server_mode: Optional[str] = (
+        os.environ.get("FLUX_SERVER_MODE") or "single-user"
+    )
     secret_key: str = os.environ.get("FLUX_SECRET_KEY") or generate_secret_key()
 
+    # Validate the server mode provided.
+    if flux_server_mode not in ["single-user", "multi-user"]:
+        raise ValueError("FLUX_SERVER_MODE must be single-user or multi-user")
+
     # Expires in 10 hours
     access_token_expires_minutes: int = get_int_envar(
         "FLUX_ACCESS_TOKEN_EXPIRES_MINUTES", 600
@@ -580,7 +587,7 @@ 

Source code for app.core.config

   
     
       Last update:
-      Oct 23, 2023
+      Jan 27, 2024
     
   
 
@@ -656,7 +663,7 @@

Source code for app.core.config

     
     
       
-        
+        
         
     
   
diff --git a/_modules/app/core/logging.html b/_modules/app/core/logging.html
index a759d78..89fd077 100644
--- a/_modules/app/core/logging.html
+++ b/_modules/app/core/logging.html
@@ -33,7 +33,7 @@
         
       
     
-        
+        
         
     
     
@@ -482,7 +482,7 @@ 

Source code for app.core.logging

   
     
       Last update:
-      Oct 23, 2023
+      Jan 27, 2024
     
   
 
@@ -558,7 +558,7 @@

Source code for app.core.logging

     
     
       
-        
+        
         
     
   
diff --git a/_modules/app/core/security.html b/_modules/app/core/security.html
index a28d148..8ae3f68 100644
--- a/_modules/app/core/security.html
+++ b/_modules/app/core/security.html
@@ -33,7 +33,7 @@
         
       
     
-        
+        
         
     
     
@@ -522,7 +522,7 @@ 

Source code for app.core.security

   
     
       Last update:
-      Oct 23, 2023
+      Jan 27, 2024
     
   
 
@@ -598,7 +598,7 @@

Source code for app.core.security

     
     
       
-        
+        
         
     
   
diff --git a/_modules/app/crud/base.html b/_modules/app/crud/base.html
index f39c1ca..7ce2bfa 100644
--- a/_modules/app/crud/base.html
+++ b/_modules/app/crud/base.html
@@ -33,7 +33,7 @@
         
       
     
-        
+        
         
     
     
@@ -542,7 +542,7 @@ 

Source code for app.crud.base

   
     
       Last update:
-      Oct 23, 2023
+      Jan 27, 2024
     
   
 
@@ -618,7 +618,7 @@

Source code for app.crud.base

     
     
       
-        
+        
         
     
   
diff --git a/_modules/app/crud/user.html b/_modules/app/crud/user.html
index 57aaba5..037a199 100644
--- a/_modules/app/crud/user.html
+++ b/_modules/app/crud/user.html
@@ -33,7 +33,7 @@
         
       
     
-        
+        
         
     
     
@@ -553,7 +553,7 @@ 

Source code for app.crud.user

   
     
       Last update:
-      Oct 23, 2023
+      Jan 27, 2024
     
   
 
@@ -629,7 +629,7 @@

Source code for app.crud.user

     
     
       
-        
+        
         
     
   
diff --git a/_modules/app/db/init_db.html b/_modules/app/db/init_db.html
index 86cfc69..13c80cf 100644
--- a/_modules/app/db/init_db.html
+++ b/_modules/app/db/init_db.html
@@ -33,7 +33,7 @@
         
       
     
-        
+        
         
     
     
@@ -598,7 +598,7 @@ 

Source code for app.db.init_db

   
     
       Last update:
-      Oct 23, 2023
+      Jan 27, 2024
     
   
 
@@ -674,7 +674,7 @@

Source code for app.db.init_db

     
     
       
-        
+        
         
     
   
diff --git a/_modules/app/library/auth.html b/_modules/app/library/auth.html
index 8f308d9..d7c2460 100644
--- a/_modules/app/library/auth.html
+++ b/_modules/app/library/auth.html
@@ -33,7 +33,7 @@
         
       
     
-        
+        
         
     
     
@@ -492,6 +492,7 @@ 

Source code for app.library.auth

 
 
[docs]def alert_auth(): print("🍓 Require auth: %s" % settings.require_auth) + print("🍓 Server mode: %s" % settings.flux_server_mode) print( "🍓 Secret key %s" % ("*" * len(settings.secret_key)) if settings.secret_key @@ -540,7 +541,7 @@

Source code for app.library.auth

   
     
       Last update:
-      Oct 23, 2023
+      Jan 27, 2024
     
   
 
@@ -616,7 +617,7 @@

Source code for app.library.auth

     
     
       
-        
+        
         
     
   
diff --git a/_modules/app/library/helpers.html b/_modules/app/library/helpers.html
index 12fda1a..943cdaf 100644
--- a/_modules/app/library/helpers.html
+++ b/_modules/app/library/helpers.html
@@ -33,7 +33,7 @@
         
       
     
-        
+        
         
     
     
@@ -518,7 +518,7 @@ 

Source code for app.library.helpers

   
     
       Last update:
-      Oct 23, 2023
+      Jan 27, 2024
     
   
 
@@ -594,7 +594,7 @@

Source code for app.library.helpers

     
     
       
-        
+        
         
     
   
diff --git a/_modules/app/library/launcher.html b/_modules/app/library/launcher.html
index 8926814..fae9d7e 100644
--- a/_modules/app/library/launcher.html
+++ b/_modules/app/library/launcher.html
@@ -33,7 +33,7 @@
         
       
     
-        
+        
         
     
     
@@ -515,7 +515,7 @@ 

Source code for app.library.launcher

   
     
       Last update:
-      Oct 23, 2023
+      Jan 27, 2024
     
   
 
@@ -591,7 +591,7 @@

Source code for app.library.launcher

     
     
       
-        
+        
         
     
   
diff --git a/_modules/app/models/job.html b/_modules/app/models/job.html
index 59dd747..319829b 100644
--- a/_modules/app/models/job.html
+++ b/_modules/app/models/job.html
@@ -33,7 +33,7 @@
         
       
     
-        
+        
         
     
     
@@ -486,7 +486,7 @@ 

Source code for app.models.job

   
     
       Last update:
-      Oct 23, 2023
+      Jan 27, 2024
     
   
 
@@ -562,7 +562,7 @@

Source code for app.models.job

     
     
       
-        
+        
         
     
   
diff --git a/_modules/app/models/user.html b/_modules/app/models/user.html
index 1c8c11a..d2f50fa 100644
--- a/_modules/app/models/user.html
+++ b/_modules/app/models/user.html
@@ -33,7 +33,7 @@
         
       
     
-        
+        
         
     
     
@@ -491,7 +491,7 @@ 

Source code for app.models.user

   
     
       Last update:
-      Oct 23, 2023
+      Jan 27, 2024
     
   
 
@@ -567,7 +567,7 @@

Source code for app.models.user

     
     
       
-        
+        
         
     
   
diff --git a/_modules/app/routers/depends.html b/_modules/app/routers/depends.html
index 244d607..271a9a5 100644
--- a/_modules/app/routers/depends.html
+++ b/_modules/app/routers/depends.html
@@ -33,7 +33,7 @@
         
       
     
-        
+        
         
     
     
@@ -548,7 +548,7 @@ 

Source code for app.routers.depends

   
     
       Last update:
-      Oct 23, 2023
+      Jan 27, 2024
     
   
 
@@ -624,7 +624,7 @@

Source code for app.routers.depends

     
     
       
-        
+        
         
     
   
diff --git a/_modules/app/schemas/job.html b/_modules/app/schemas/job.html
index a03afb0..ab1e87f 100644
--- a/_modules/app/schemas/job.html
+++ b/_modules/app/schemas/job.html
@@ -33,7 +33,7 @@
         
       
     
-        
+        
         
     
     
@@ -513,7 +513,7 @@ 

Source code for app.schemas.job

   
     
       Last update:
-      Oct 23, 2023
+      Jan 27, 2024
     
   
 
@@ -589,7 +589,7 @@

Source code for app.schemas.job

     
     
       
-        
+        
         
     
   
diff --git a/_modules/app/schemas/token.html b/_modules/app/schemas/token.html
index a6bbcdd..e9682af 100644
--- a/_modules/app/schemas/token.html
+++ b/_modules/app/schemas/token.html
@@ -33,7 +33,7 @@
         
       
     
-        
+        
         
     
     
@@ -486,7 +486,7 @@ 

Source code for app.schemas.token

   
     
       Last update:
-      Oct 23, 2023
+      Jan 27, 2024
     
   
 
@@ -562,7 +562,7 @@

Source code for app.schemas.token

     
     
       
-        
+        
         
     
   
diff --git a/_modules/app/schemas/user.html b/_modules/app/schemas/user.html
index 0cc74a0..a0cfd2e 100644
--- a/_modules/app/schemas/user.html
+++ b/_modules/app/schemas/user.html
@@ -33,7 +33,7 @@
         
       
     
-        
+        
         
     
     
@@ -511,7 +511,7 @@ 

Source code for app.schemas.user

   
     
       Last update:
-      Oct 23, 2023
+      Jan 27, 2024
     
   
 
@@ -587,7 +587,7 @@

Source code for app.schemas.user

     
     
       
-        
+        
         
     
   
diff --git a/_modules/index.html b/_modules/index.html
index 31f7219..a5fc33c 100644
--- a/_modules/index.html
+++ b/_modules/index.html
@@ -33,7 +33,7 @@
         
       
     
-        
+        
         
     
     
@@ -490,7 +490,7 @@ 

All modules for which code is available

Last update: - Oct 23, 2023 + Jan 27, 2024
@@ -566,7 +566,7 @@

All modules for which code is available

- + diff --git a/_modules/sqlalchemy/orm/attributes.html b/_modules/sqlalchemy/orm/attributes.html index 44fb9fb..8402db1 100644 --- a/_modules/sqlalchemy/orm/attributes.html +++ b/_modules/sqlalchemy/orm/attributes.html @@ -33,7 +33,7 @@ - + @@ -468,7 +468,7 @@

Source code for sqlalchemy.orm.attributes

 # orm/attributes.py
-# Copyright (C) 2005-2023 the SQLAlchemy authors and contributors
+# Copyright (C) 2005-2024 the SQLAlchemy authors and contributors
 # <see AUTHORS file>
 #
 # This module is part of SQLAlchemy and is released under
@@ -3316,7 +3316,7 @@ 

Source code for sqlalchemy.orm.attributes

   
     
       Last update:
-      Oct 23, 2023
+      Jan 27, 2024
     
   
 
@@ -3392,7 +3392,7 @@

Source code for sqlalchemy.orm.attributes

     
     
       
-        
+        
         
     
   
diff --git a/_sources/getting_started/developer-guide.md.txt b/_sources/getting_started/developer-guide.md.txt
index 8af5d3c..6bca051 100644
--- a/_sources/getting_started/developer-guide.md.txt
+++ b/_sources/getting_started/developer-guide.md.txt
@@ -45,6 +45,7 @@ $ docker run --rm -it -p 5000:5000 ghcr.io/flux-framework/flux-restful-api
 ```
 ```console
 🍓 Require auth: True
+🍓  Server mode: single-user
 🍓   Secret key ***********
 🍓    Flux user: ********
 🍓   Flux token: *****
@@ -110,8 +111,8 @@ $ flux start uvicorn app.main:app --host=0.0.0.0 --port=5000
 Or do it separately (two commands):
 
 ```bash
-$ flux start --test-size=4
-$ uvicorn app.main:app --host=0.0.0.0 --port=5000
+flux start --test-size=4
+uvicorn app.main:app --host=0.0.0.0 --port=5000
 ```
 
 For the latter, you can also use the Makefile:
@@ -195,7 +196,7 @@ The following variables are available (with their defaults):
 |FLUX_TOKEN| The token password to require for Basic Auth (if `FLUX_REQUIRE_AUTH` is set) | unset |
 |FLUX_USER| The username to require for Basic Auth (if `FLUX_REQUIRE_AUTH` is set) | unset |
 |FLUX_HAS_GPU | GPUs are available for the user to request | unset |
-|FLUX_NUMBER_NODES| The number of nodes available in the cluster | 1 |
+|FLUX_NUMBER_NODES| The number of nodes available (exposed) in the cluster | 1 |
 |FLUX_OPTION_FLAGS | Option flags to give to flux, in the same format you'd give on the command line | unset |
 |FLUX_SECRET_KEY | secret key to be shared between user and server (required) | unset |
 |FLUX_ACCESS_TOKEN_EXPIRES_MINUTES| number of minutes to expire an access token | 600 |
diff --git a/_sources/getting_started/user-guide.md.txt b/_sources/getting_started/user-guide.md.txt
index 3240468..cea2f35 100644
--- a/_sources/getting_started/user-guide.md.txt
+++ b/_sources/getting_started/user-guide.md.txt
@@ -17,6 +17,19 @@ There are two modes of interaction:
  - **multi-user mode**: requires authentication via the RESTful API with an encoded payload to request expiring tokens. When authentication is successful, the
    job is run as the same user on the system on behalf of the flux user.
 
+To control the user mode, you can export it to the environment where you are running the server:
+
+```bash
+# This is the default
+export FLUX_SERVER_MODE=single-user
+
+# This will have the flux user attempt to sign the payload with sudo
+export FLUX_SERVER_MODE=multi-user
+```
+
+Note that the majority of our use cases use single-user mode, so you can expect more bugs / work to be
+done with multi-user.
+
 ### Authentication
 
 If you choose to deploy without authentication, this is a ⚠️ proceed at your own risk ⚠️ sort of deal.
diff --git a/_static/sphinx_immaterial_theme.79d3faa9841bcddc6.min.css b/_static/sphinx_immaterial_theme.af531f03affe68837.min.css
similarity index 99%
rename from _static/sphinx_immaterial_theme.79d3faa9841bcddc6.min.css
rename to _static/sphinx_immaterial_theme.af531f03affe68837.min.css
index 2efd78d..3b85411 100644
--- a/_static/sphinx_immaterial_theme.79d3faa9841bcddc6.min.css
+++ b/_static/sphinx_immaterial_theme.af531f03affe68837.min.css
@@ -1,5 +1,5 @@
-@charset "UTF-8";html{-webkit-text-size-adjust:none;-moz-text-size-adjust:none;text-size-adjust:none;box-sizing:border-box}*,:after,:before{box-sizing:inherit}@media (prefers-reduced-motion){*,:after,:before{transition:none!important}}body{margin:0}a,button,input,label{-webkit-tap-highlight-color:transparent}a{color:inherit;text-decoration:none}hr{border:0;box-sizing:content-box;display:block;height:.05rem;overflow:visible;padding:0}small{font-size:80%}sub,sup{line-height:1em}img{border-style:none}table{border-collapse:separate;border-spacing:0}td,th{font-weight:400;vertical-align:top}button{background:transparent;border:0;font-family:inherit;font-size:inherit;margin:0;padding:0}input{border:0;outline:none}:root,[data-md-color-scheme=default]{--md-default-fg-color:rgba(0,0,0,.87);--md-default-fg-color--light:rgba(0,0,0,.54);--md-default-fg-color--lighter:rgba(0,0,0,.32);--md-default-fg-color--lightest:rgba(0,0,0,.07);--md-default-bg-color:#fff;--md-default-bg-color--light:hsla(0,0%,100%,.7);--md-default-bg-color--lighter:hsla(0,0%,100%,.3);--md-default-bg-color--lightest:hsla(0,0%,100%,.12);--md-primary-fg-color:#4051b5;--md-primary-fg-color--light:#5d6cc0;--md-primary-fg-color--dark:#303fa1;--md-primary-bg-color:#fff;--md-primary-bg-color--light:hsla(0,0%,100%,.7);--md-accent-fg-color:#526cfe;--md-accent-fg-color--transparent:rgba(82,108,254,.1);--md-accent-bg-color:#fff;--md-accent-bg-color--light:hsla(0,0%,100%,.7);--md-code-fg-color:#36464e;--md-code-bg-color:#f5f5f5;--md-code-hl-color:rgba(255,255,0,.5);--md-code-hl-number-color:#d52a2a;--md-code-hl-special-color:#db1457;--md-code-hl-function-color:#a846b9;--md-code-hl-constant-color:#6e59d9;--md-code-hl-keyword-color:#3f6ec6;--md-code-hl-string-color:#1c7d4d;--md-code-hl-name-color:var(--md-code-fg-color);--md-code-hl-operator-color:var(--md-default-fg-color--light);--md-code-hl-punctuation-color:var(--md-default-fg-color--light);--md-code-hl-comment-color:var(--md-default-fg-color--light);--md-code-hl-generic-color:var(--md-default-fg-color--light);--md-code-hl-variable-color:var(--md-default-fg-color--light);--md-typeset-color:var(--md-default-fg-color);--md-typeset-a-color:var(--md-primary-fg-color);--md-typeset-mark-color:rgba(255,255,0,.5);--md-typeset-del-color:rgba(245,80,61,.15);--md-typeset-ins-color:rgba(11,213,112,.15);--md-typeset-kbd-color:#fafafa;--md-typeset-kbd-accent-color:#fff;--md-typeset-kbd-border-color:#b8b8b8;--md-typeset-table-color:rgba(0,0,0,.12);--md-admonition-fg-color:var(--md-default-fg-color);--md-admonition-bg-color:var(--md-default-bg-color);--md-footer-fg-color:#fff;--md-footer-fg-color--light:hsla(0,0%,100%,.7);--md-footer-fg-color--lighter:hsla(0,0%,100%,.3);--md-footer-bg-color:rgba(0,0,0,.87);--md-footer-bg-color--dark:rgba(0,0,0,.32);--md-shadow-z1:0 0.2rem 0.5rem rgba(0,0,0,.05),0 0 0.05rem rgba(0,0,0,.1);--md-shadow-z2:0 0.2rem 0.5rem rgba(0,0,0,.1),0 0 0.05rem rgba(0,0,0,.25);--md-shadow-z3:0 0.2rem 0.5rem rgba(0,0,0,.2),0 0 0.05rem rgba(0,0,0,.35)}.md-icon svg{fill:currentcolor;display:block;height:1.2rem;width:1.2rem}.si-icon-inline:before{background-color:var(--md-default-fg-color);content:"";display:inline-flex;height:1.125em;-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;vertical-align:text-top;width:1.125em}body{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;--md-text-font-family:var(--md-text-font,_),-apple-system,BlinkMacSystemFont,Helvetica,Arial,sans-serif;--md-code-font-family:var(--md-code-font,_),SFMono-Regular,Consolas,Menlo,monospace}body,input{font-feature-settings:"kern","liga";font-family:var(--md-text-font-family)}body,code,input,kbd,pre{color:var(--md-typeset-color)}code,kbd,pre{font-feature-settings:"kern";font-family:var(--md-code-font-family)}:root{--md-typeset-table-sort-icon:url('data:image/svg+xml;charset=utf-8,');--md-typeset-table-sort-icon--asc:url('data:image/svg+xml;charset=utf-8,');--md-typeset-table-sort-icon--desc:url('data:image/svg+xml;charset=utf-8,')}.md-typeset{-webkit-print-color-adjust:exact;color-adjust:exact;font-size:.8rem;line-height:1.6}@media print{.md-typeset{font-size:.68rem}}.md-typeset blockquote,.md-typeset dl,.md-typeset figure,.md-typeset ol,.md-typeset pre,.md-typeset ul{margin-bottom:1em;margin-top:1em}.md-typeset h1{color:var(--md-default-fg-color--light);font-size:2em;line-height:1.3;margin:0 0 1.25em}.md-typeset h1,.md-typeset h2{font-weight:300;letter-spacing:-.01em}.md-typeset h2{font-size:1.5625em;line-height:1.4;margin:1.6em 0 .64em}.md-typeset h3{font-size:1.25em;font-weight:400;letter-spacing:-.01em;line-height:1.5;margin:1.6em 0 .8em}.md-typeset h2+h3{margin-top:.8em}.md-typeset h4{font-weight:700;letter-spacing:-.01em;margin:1em 0}.md-typeset h5,.md-typeset h6{color:var(--md-default-fg-color--light);font-size:.8em;font-weight:700;letter-spacing:-.01em;margin:1.25em 0}.md-typeset h5{text-transform:uppercase}.md-typeset hr{border-bottom:.05rem solid var(--md-default-fg-color--lightest);display:flow-root;margin:1.5em 0}.md-typeset a{color:var(--md-typeset-a-color);word-break:break-word}.md-typeset a,.md-typeset a:before{transition:color 125ms}.md-typeset a:focus,.md-typeset a:hover{color:var(--md-accent-fg-color)}.md-typeset a:focus code,.md-typeset a:hover code{background-color:var(--md-accent-fg-color--transparent)}.md-typeset a code{color:currentcolor;transition:background-color 125ms}.md-typeset a.focus-visible{outline-color:var(--md-accent-fg-color);outline-offset:.2rem}.md-typeset code,.md-typeset kbd,.md-typeset pre{color:var(--md-code-fg-color);direction:ltr;font-variant-ligatures:none}@media print{.md-typeset code,.md-typeset kbd,.md-typeset pre{white-space:pre-wrap}}.md-typeset code{background-color:var(--md-code-bg-color);border-radius:.1rem;-webkit-box-decoration-break:clone;box-decoration-break:clone;font-size:.85em;padding:0 .2941176471em;word-break:break-word}.md-typeset code:not(.focus-visible){-webkit-tap-highlight-color:transparent;outline:none}.md-typeset pre{display:flow-root;line-height:1.4;position:relative}.md-typeset pre>code{-webkit-box-decoration-break:slice;box-decoration-break:slice;box-shadow:none;display:block;margin:0;outline-color:var(--md-accent-fg-color);overflow:auto;padding:.7720588235em 1.1764705882em;scrollbar-color:var(--md-default-fg-color--lighter) transparent;scrollbar-width:thin;touch-action:auto;word-break:normal}.md-typeset pre>code:hover{scrollbar-color:var(--md-accent-fg-color) transparent}.md-typeset pre>code::-webkit-scrollbar{height:.2rem;width:.2rem}.md-typeset pre>code::-webkit-scrollbar-thumb{background-color:var(--md-default-fg-color--lighter)}.md-typeset pre>code::-webkit-scrollbar-thumb:hover{background-color:var(--md-accent-fg-color)}.md-typeset .code-block-caption+.notranslate .highlighttable,.md-typeset .code-block-caption+.notranslate pre{margin-top:0}.md-typeset kbd{background-color:var(--md-typeset-kbd-color);border-radius:.1rem;box-shadow:0 .1rem 0 .05rem var(--md-typeset-kbd-border-color),0 .1rem 0 var(--md-typeset-kbd-border-color),0 -.1rem .2rem var(--md-typeset-kbd-accent-color) inset;color:var(--md-default-fg-color);display:inline-block;font-size:.75em;padding:0 .6666666667em;vertical-align:text-top;word-break:break-word}.md-typeset mark{background-color:var(--md-typeset-mark-color);-webkit-box-decoration-break:clone;box-decoration-break:clone;color:inherit;word-break:break-word}.md-typeset abbr{border-bottom:.05rem dotted var(--md-default-fg-color--light);cursor:help;text-decoration:none}@media (hover:none){.md-typeset abbr{position:relative}.md-typeset abbr[title]:-webkit-any(:focus,:hover):after{background-color:var(--md-default-fg-color);border-radius:.1rem;box-shadow:var(--md-shadow-z3);color:var(--md-default-bg-color);content:attr(title);display:inline-block;font-size:.7rem;margin-top:2em;max-width:80%;min-width:max-content;padding:.2rem .3rem;position:absolute;width:auto}.md-typeset abbr[title]:-moz-any(:focus,:hover):after{background-color:var(--md-default-fg-color);border-radius:.1rem;box-shadow:var(--md-shadow-z3);color:var(--md-default-bg-color);content:attr(title);display:inline-block;font-size:.7rem;margin-top:2em;max-width:80%;min-width:-moz-max-content;min-width:max-content;padding:.2rem .3rem;position:absolute;width:auto}[dir=ltr] .md-typeset abbr[title]:-webkit-any(:focus,:hover):after{left:0}[dir=ltr] .md-typeset abbr[title]:-moz-any(:focus,:hover):after{left:0}[dir=ltr] .md-typeset abbr[title]:is(:focus,:hover):after{left:0}[dir=rtl] .md-typeset abbr[title]:-webkit-any(:focus,:hover):after{right:0}[dir=rtl] .md-typeset abbr[title]:-moz-any(:focus,:hover):after{right:0}[dir=rtl] .md-typeset abbr[title]:is(:focus,:hover):after{right:0}.md-typeset abbr[title]:is(:focus,:hover):after{background-color:var(--md-default-fg-color);border-radius:.1rem;box-shadow:var(--md-shadow-z3);color:var(--md-default-bg-color);content:attr(title);display:inline-block;font-size:.7rem;margin-top:2em;max-width:80%;min-width:-moz-max-content;min-width:max-content;padding:.2rem .3rem;position:absolute;width:auto}}.md-typeset small{opacity:.75}[dir=ltr] .md-typeset sub,[dir=ltr] .md-typeset sup{margin-left:.078125em}[dir=rtl] .md-typeset sub,[dir=rtl] .md-typeset sup{margin-right:.078125em}[dir=ltr] .md-typeset blockquote{padding-left:.6rem}[dir=rtl] .md-typeset blockquote{padding-right:.6rem}[dir=ltr] .md-typeset blockquote{border-left:.2rem solid var(--md-default-fg-color--lighter)}[dir=rtl] .md-typeset blockquote{border-right:.2rem solid var(--md-default-fg-color--lighter)}.md-typeset blockquote{color:var(--md-default-fg-color--light);margin-left:0;margin-right:0}.md-typeset ul{list-style-type:disc}[dir=ltr] .md-typeset ol,[dir=ltr] .md-typeset ul{margin-left:.625em}[dir=rtl] .md-typeset ol,[dir=rtl] .md-typeset ul{margin-right:.625em}.md-typeset ol,.md-typeset ul{padding:0}.md-typeset ol:not([hidden]),.md-typeset ul:not([hidden]){display:flow-root}.md-typeset ol ol,.md-typeset ul ol{list-style-type:lower-alpha}.md-typeset ol ol ol,.md-typeset ul ol ol{list-style-type:lower-roman}[dir=ltr] .md-typeset ol li,[dir=ltr] .md-typeset ul li{margin-left:1.25em}[dir=rtl] .md-typeset ol li,[dir=rtl] .md-typeset ul li{margin-right:1.25em}.md-typeset ol li,.md-typeset ul li{margin-bottom:.5em}.md-typeset ol li blockquote,.md-typeset ol li p,.md-typeset ul li blockquote,.md-typeset ul li p{margin:.5em 0}.md-typeset ol li:last-child,.md-typeset ul li:last-child{margin-bottom:0}.md-typeset ol li :-webkit-any(ul,ol),.md-typeset ul li :-webkit-any(ul,ol){margin-bottom:.5em;margin-top:.5em}.md-typeset ol li :-moz-any(ul,ol),.md-typeset ul li :-moz-any(ul,ol){margin-bottom:.5em;margin-top:.5em}[dir=ltr] .md-typeset ol li :-webkit-any(ul,ol),[dir=ltr] .md-typeset ul li :-webkit-any(ul,ol){margin-left:.625em}[dir=ltr] .md-typeset ol li :-moz-any(ul,ol),[dir=ltr] .md-typeset ul li :-moz-any(ul,ol){margin-left:.625em}[dir=ltr] .md-typeset ol li :is(ul,ol),[dir=ltr] .md-typeset ul li :is(ul,ol){margin-left:.625em}[dir=rtl] .md-typeset ol li :-webkit-any(ul,ol),[dir=rtl] .md-typeset ul li :-webkit-any(ul,ol){margin-right:.625em}[dir=rtl] .md-typeset ol li :-moz-any(ul,ol),[dir=rtl] .md-typeset ul li :-moz-any(ul,ol){margin-right:.625em}[dir=rtl] .md-typeset ol li :is(ul,ol),[dir=rtl] .md-typeset ul li :is(ul,ol){margin-right:.625em}.md-typeset ol li :is(ul,ol),.md-typeset ul li :is(ul,ol){margin-bottom:.5em;margin-top:.5em}[dir=ltr] .md-typeset dd{margin-left:1.875em}[dir=rtl] .md-typeset dd{margin-right:1.875em}.md-typeset dd{margin-bottom:1.5em;margin-top:1em}.md-typeset img,.md-typeset svg,.md-typeset video{height:auto;max-width:100%}.md-typeset img[align=left]{margin:1em 1em 1em 0}.md-typeset img[align=right]{margin:1em 0 1em 1em}.md-typeset img[align]:only-child{margin-top:0}.md-typeset img[src$="#gh-dark-mode-only"],.md-typeset img[src$="#only-dark"]{display:none}.md-typeset figure{display:flow-root;margin:1em auto;max-width:100%;text-align:center;width:-moz-fit-content;width:fit-content}.md-typeset figure img{display:block}.md-typeset figcaption{font-style:italic;margin:1em auto;max-width:24rem}.md-typeset iframe{max-width:100%}.md-typeset table.data:not(.plain){background-color:var(--md-default-bg-color);border:.05rem solid var(--md-typeset-table-color);border-radius:.1rem;display:block;font-size:.64rem;max-width:100%;overflow:auto;touch-action:auto;width:-moz-max-content;width:max-content}@media print{.md-typeset table.data:not(.plain){display:table}}.md-typeset table.data:not(.plain)+*{margin-top:1.5em}.md-typeset table.data:not(.plain) :-webkit-any(th,td)>:first-child{margin-top:0}.md-typeset table.data:not(.plain) :-moz-any(th,td)>:first-child{margin-top:0}.md-typeset table.data:not(.plain) :is(th,td)>:first-child{margin-top:0}.md-typeset table.data:not(.plain) :-webkit-any(th,td)>:last-child{margin-bottom:0}.md-typeset table.data:not(.plain) :-moz-any(th,td)>:last-child{margin-bottom:0}.md-typeset table.data:not(.plain) :is(th,td)>:last-child{margin-bottom:0}.md-typeset table.data:not(.plain) :-webkit-any(th,td):not([align],.align-center,.align-left,.align-right){text-align:left}.md-typeset table.data:not(.plain) :-moz-any(th,td):not([align],.align-center,.align-left,.align-right){text-align:left}.md-typeset table.data:not(.plain) :is(th,td):not([align],.align-center,.align-left,.align-right){text-align:left}[dir=rtl] .md-typeset table.data:not(.plain) :-webkit-any(th,td):not([align],.align-center,.align-left,.align-right){text-align:right}[dir=rtl] .md-typeset table.data:not(.plain) :-moz-any(th,td):not([align],.align-center,.align-left,.align-right){text-align:right}[dir=rtl] .md-typeset table.data:not(.plain) :is(th,td):not([align],.align-center,.align-left,.align-right){text-align:right}.md-typeset table.data:not(.plain) th{font-weight:700;min-width:5rem;padding:.9375em 1.25em;vertical-align:top}.md-typeset table.data:not(.plain) td{border-top:.05rem solid var(--md-typeset-table-color);padding:.9375em 1.25em;vertical-align:top}.md-typeset table.data:not(.plain) tbody tr{transition:background-color 125ms}.md-typeset table.data:not(.plain) tbody tr:hover{background-color:rgba(0,0,0,.035);box-shadow:0 .05rem 0 var(--md-default-bg-color) inset}.md-typeset table.data:not(.plain) a{word-break:normal}.md-typeset table th[role=columnheader]{cursor:pointer}[dir=ltr] .md-typeset table th[role=columnheader]:after{margin-left:.5em}[dir=rtl] .md-typeset table th[role=columnheader]:after{margin-right:.5em}.md-typeset table th[role=columnheader]:after{content:"";display:inline-block;height:1.2em;-webkit-mask-image:var(--md-typeset-table-sort-icon);mask-image:var(--md-typeset-table-sort-icon);-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;transition:background-color 125ms;vertical-align:text-bottom;width:1.2em}.md-typeset table th[role=columnheader]:hover:after{background-color:var(--md-default-fg-color--lighter)}.md-typeset table th[role=columnheader][aria-sort=ascending]:after{background-color:var(--md-default-fg-color--light);-webkit-mask-image:var(--md-typeset-table-sort-icon--asc);mask-image:var(--md-typeset-table-sort-icon--asc)}.md-typeset table th[role=columnheader][aria-sort=descending]:after{background-color:var(--md-default-fg-color--light);-webkit-mask-image:var(--md-typeset-table-sort-icon--desc);mask-image:var(--md-typeset-table-sort-icon--desc)}.md-typeset__scrollwrap{margin:1em -.8rem;overflow-x:auto;touch-action:auto}.md-typeset__table{display:inline-block;margin-bottom:.5em;padding:0 .8rem}@media print{.md-typeset__table{display:block}}html .md-typeset__table table{display:table;margin:0;overflow:hidden;width:100%}@media screen and (max-width:44.9375em){.md-content__inner>pre{margin:1em -.8rem}.md-content__inner>pre code{border-radius:0}}.md-banner{background-color:var(--md-footer-bg-color);color:var(--md-footer-fg-color);overflow:auto}@media print{.md-banner{display:none}}.md-banner--warning{background:var(--md-typeset-mark-color);color:var(--md-default-fg-color)}.md-banner__inner{font-size:.7rem;margin:.6rem auto;padding:0 .8rem}[dir=ltr] .md-banner__button{float:right}[dir=rtl] .md-banner__button{float:left}.md-banner__button{color:inherit;cursor:pointer;transition:opacity .25s}.md-banner__button:hover{opacity:.7}html{font-size:125%;height:100%;overflow-x:hidden}@media screen and (min-width:100em){html{font-size:137.5%}}@media screen and (min-width:125em){html{font-size:150%}}body{background-color:var(--md-default-bg-color);display:flex;flex-direction:column;font-size:.5rem;min-height:100%;position:relative;width:100%}@media print{body{display:block}}@media screen and (max-width:59.9375em){body[data-md-scrolllock]{position:fixed}}.md-grid{margin-left:auto;margin-right:auto;max-width:61rem}.md-container{display:flex;flex-direction:column;flex-grow:1}@media print{.md-container{display:block}}.md-main{flex-grow:1}.md-main__inner{display:flex;height:100%;margin-top:1.5rem}.md-ellipsis{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.md-toggle{display:none}.md-option{height:0;opacity:0;position:absolute;width:0}.md-option:checked+label:not([hidden]){display:block}.md-option.focus-visible+label{outline-color:var(--md-accent-fg-color);outline-style:auto}.md-skip{background-color:var(--md-default-fg-color);border-radius:.1rem;color:var(--md-default-bg-color);font-size:.64rem;margin:.5rem;opacity:0;outline-color:var(--md-accent-fg-color);padding:.3rem .5rem;position:fixed;transform:translateY(.4rem);z-index:-1}.md-skip:focus{opacity:1;transform:translateY(0);transition:transform .25s cubic-bezier(.4,0,.2,1),opacity 175ms 75ms;z-index:10}@page{margin:25mm}:root{--md-clipboard-icon:url('data:image/svg+xml;charset=utf-8,')}.md-clipboard{border-radius:.1rem;color:var(--md-default-fg-color--lightest);cursor:pointer;height:1.5em;outline-color:var(--md-accent-fg-color);outline-offset:.1rem;position:absolute;right:.5em;top:.5em;transition:color .25s;width:1.5em;z-index:1}@media print{.md-clipboard{display:none}}.md-clipboard:not(.focus-visible){-webkit-tap-highlight-color:transparent;outline:none}:hover>.md-clipboard{color:var(--md-default-fg-color--light)}.md-clipboard:-webkit-any(:focus,:hover){color:var(--md-accent-fg-color)}.md-clipboard:-moz-any(:focus,:hover){color:var(--md-accent-fg-color)}.md-clipboard:is(:focus,:hover){color:var(--md-accent-fg-color)}.md-clipboard:after{background-color:currentcolor;content:"";display:block;height:1.125em;margin:0 auto;-webkit-mask-image:var(--md-clipboard-icon);mask-image:var(--md-clipboard-icon);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1.125em}.md-clipboard--inline{cursor:pointer}.md-clipboard--inline code{transition:color .25s,background-color .25s}.md-clipboard--inline:-webkit-any(:focus,:hover) code{background-color:var(--md-accent-fg-color--transparent);color:var(--md-accent-fg-color)}.md-clipboard--inline:-moz-any(:focus,:hover) code{background-color:var(--md-accent-fg-color--transparent);color:var(--md-accent-fg-color)}.md-clipboard--inline:is(:focus,:hover) code{background-color:var(--md-accent-fg-color--transparent);color:var(--md-accent-fg-color)}@keyframes consent{0%{opacity:0;transform:translateY(100%)}to{opacity:1;transform:translateY(0)}}@keyframes overlay{0%{opacity:0}to{opacity:1}}.md-consent__overlay{animation:overlay .25s both;-webkit-backdrop-filter:blur(.1rem);backdrop-filter:blur(.1rem);background-color:rgba(0,0,0,.54);height:100%;opacity:1;position:fixed;top:0;width:100%;z-index:5}.md-consent__inner{animation:consent .5s cubic-bezier(.1,.7,.1,1) both;background-color:var(--md-default-bg-color);border:0;border-radius:.1rem;bottom:0;box-shadow:0 0 .2rem rgba(0,0,0,.1),0 .2rem .4rem rgba(0,0,0,.2);max-height:100%;overflow:auto;padding:0;position:fixed;width:100%;z-index:5}.md-consent__form{padding:.8rem}.md-consent__settings{display:none;margin:1em 0}input:checked+.md-consent__settings{display:block}.md-consent__controls{margin-bottom:.8rem}.md-typeset .md-consent__controls .md-button{display:inline}@media screen and (max-width:44.9375em){.md-typeset .md-consent__controls .md-button{display:block;margin-top:.4rem;text-align:center;width:100%}}.md-consent label{cursor:pointer}.md-content{flex-grow:1;min-width:0}.md-content__inner{margin:0 .8rem 1.2rem;padding-top:.6rem}@media screen and (min-width:76.25em){[dir=ltr] .md-sidebar--primary:not([hidden])~.md-content>.md-content__inner{margin-left:1.2rem}[dir=ltr] .md-sidebar--secondary:not([hidden])~.md-content>.md-content__inner,[dir=rtl] .md-sidebar--primary:not([hidden])~.md-content>.md-content__inner{margin-right:1.2rem}[dir=rtl] .md-sidebar--secondary:not([hidden])~.md-content>.md-content__inner{margin-left:1.2rem}}.md-content__inner:before{content:"";display:block;height:.4rem}.md-content__inner>:last-child{margin-bottom:0}[dir=ltr] .md-content__button{float:right}[dir=rtl] .md-content__button{float:left}[dir=ltr] .md-content__button{margin-left:.4rem}[dir=rtl] .md-content__button{margin-right:.4rem}.md-content__button{margin:.4rem 0;padding:0}@media print{.md-content__button{display:none}}.md-typeset .md-content__button{color:var(--md-default-fg-color--lighter)}.md-content__button svg{display:inline;vertical-align:top}[dir=rtl] .md-content__button svg{transform:scaleX(-1)}[dir=ltr] .md-dialog{right:.8rem}[dir=rtl] .md-dialog{left:.8rem}.md-dialog{background-color:var(--md-default-fg-color);border-radius:.1rem;bottom:.8rem;box-shadow:var(--md-shadow-z3);min-width:11.1rem;opacity:0;padding:.4rem .6rem;pointer-events:none;position:fixed;transform:translateY(100%);transition:transform 0ms .4s,opacity .4s;z-index:4}@media print{.md-dialog{display:none}}.md-dialog--active{opacity:1;pointer-events:auto;transform:translateY(0);transition:transform .4s cubic-bezier(.075,.85,.175,1),opacity .4s}.md-dialog__inner{color:var(--md-default-bg-color);font-size:.7rem}.md-feedback{margin:2em 0 1em;text-align:center}.md-feedback fieldset{border:none;margin:0;padding:0}.md-feedback__title{font-weight:700;margin:1em auto}.md-feedback__inner{position:relative}.md-feedback__list{align-content:baseline;display:flex;flex-wrap:wrap;justify-content:center;position:relative}.md-feedback__list:hover .md-icon:not(:disabled){color:var(--md-default-fg-color--lighter)}:disabled .md-feedback__list{min-height:1.8rem}.md-feedback__icon{color:var(--md-default-fg-color--light);cursor:pointer;flex-shrink:0;margin:0 .1rem;transition:color 125ms}.md-feedback__icon:not(:disabled).md-icon:hover{color:var(--md-accent-fg-color)}.md-feedback__icon:disabled{color:var(--md-default-fg-color--lightest);pointer-events:none}.md-feedback__note{opacity:0;position:relative;transform:translateY(.4rem);transition:transform .4s cubic-bezier(.1,.7,.1,1),opacity .15s}.md-feedback__note>*{margin:0 auto;max-width:16rem}:disabled .md-feedback__note{opacity:1;transform:translateY(0)}.md-footer{background-color:var(--md-footer-bg-color);color:var(--md-footer-fg-color)}@media print{.md-footer{display:none}}.md-footer__inner{justify-content:space-between;overflow:auto;padding:.2rem}.md-footer__inner:not([hidden]){display:flex}.md-footer__link{display:flex;flex-grow:0.01;outline-color:var(--md-accent-fg-color);overflow:hidden;padding-bottom:.4rem;padding-top:1.4rem;transition:opacity .25s}.md-footer__link:-webkit-any(:focus,:hover){opacity:.7}.md-footer__link:-moz-any(:focus,:hover){opacity:.7}.md-footer__link:is(:focus,:hover){opacity:.7}[dir=rtl] .md-footer__link svg{transform:scaleX(-1)}@media screen and (max-width:44.9375em){.md-footer__link--prev .md-footer__title{display:none}}[dir=ltr] .md-footer__link--next{margin-left:auto}[dir=rtl] .md-footer__link--next{margin-right:auto}.md-footer__link--next{text-align:right}[dir=rtl] .md-footer__link--next{text-align:left}.md-footer__title{flex-grow:1;font-size:.9rem;line-height:2.4rem;max-width:calc(100% - 2.4rem);padding:0 1rem;position:relative;white-space:nowrap}.md-footer__button{margin:.2rem;padding:.4rem}.md-footer__direction{font-size:.64rem;left:0;margin-top:-1rem;opacity:.7;padding:0 1rem;position:absolute;right:0}.md-footer-meta{background-color:var(--md-footer-bg-color--dark)}.md-footer-meta__inner{display:flex;flex-wrap:wrap;justify-content:space-between;padding:.2rem}html .md-footer-meta.md-typeset a{color:var(--md-footer-fg-color--light)}html .md-footer-meta.md-typeset a:-webkit-any(:focus,:hover){color:var(--md-footer-fg-color)}html .md-footer-meta.md-typeset a:-moz-any(:focus,:hover){color:var(--md-footer-fg-color)}html .md-footer-meta.md-typeset a:is(:focus,:hover){color:var(--md-footer-fg-color)}.md-copyright{color:var(--md-footer-fg-color--lighter);font-size:.64rem;margin:auto .6rem;padding:.4rem 0;width:100%}@media screen and (min-width:45em){.md-copyright{width:auto}}.md-copyright__highlight{color:var(--md-footer-fg-color--light)}.md-social{margin:0 .4rem;padding:.2rem 0 .6rem}@media screen and (min-width:45em){.md-social{padding:.6rem 0}}.md-social__link{display:inline-block;height:1.6rem;text-align:center;width:1.6rem}.md-social__link:before{line-height:1.9}.md-social__link svg{fill:currentcolor;max-height:.8rem;vertical-align:-25%}.md-typeset .md-button{border:.1rem solid;border-radius:.1rem;color:var(--md-primary-fg-color);cursor:pointer;display:inline-block;font-weight:700;padding:.625em 2em;transition:color 125ms,background-color 125ms,border-color 125ms}.md-typeset .md-button--primary{background-color:var(--md-primary-fg-color);border-color:var(--md-primary-fg-color);color:var(--md-primary-bg-color)}.md-typeset .md-button:-webkit-any(:focus,:hover){background-color:var(--md-accent-fg-color);border-color:var(--md-accent-fg-color);color:var(--md-accent-bg-color)}.md-typeset .md-button:-moz-any(:focus,:hover){background-color:var(--md-accent-fg-color);border-color:var(--md-accent-fg-color);color:var(--md-accent-bg-color)}.md-typeset .md-button:is(:focus,:hover){background-color:var(--md-accent-fg-color);border-color:var(--md-accent-fg-color);color:var(--md-accent-bg-color)}[dir=ltr] .md-typeset .md-input{border-top-left-radius:.1rem}[dir=ltr] .md-typeset .md-input,[dir=rtl] .md-typeset .md-input{border-top-right-radius:.1rem}[dir=rtl] .md-typeset .md-input{border-top-left-radius:.1rem}.md-typeset .md-input{border-bottom:.1rem solid var(--md-default-fg-color--lighter);box-shadow:var(--md-shadow-z1);font-size:.8rem;height:1.8rem;padding:0 .6rem;transition:border .25s,box-shadow .25s}.md-typeset .md-input:-webkit-any(:focus,:hover){border-bottom-color:var(--md-accent-fg-color);box-shadow:var(--md-shadow-z2)}.md-typeset .md-input:-moz-any(:focus,:hover){border-bottom-color:var(--md-accent-fg-color);box-shadow:var(--md-shadow-z2)}.md-typeset .md-input:is(:focus,:hover){border-bottom-color:var(--md-accent-fg-color);box-shadow:var(--md-shadow-z2)}.md-typeset .md-input--stretch{width:100%}.md-header{background-color:var(--md-primary-fg-color);box-shadow:0 0 .2rem transparent,0 .2rem .4rem transparent;color:var(--md-primary-bg-color);display:block;left:0;position:sticky;right:0;top:0;z-index:4}@media print{.md-header{display:none}}.md-header[hidden]{transform:translateY(-100%);transition:transform .25s cubic-bezier(.8,0,.6,1),box-shadow .25s}.md-header--shadow{box-shadow:0 0 .2rem rgba(0,0,0,.1),0 .2rem .4rem rgba(0,0,0,.2);transition:transform .25s cubic-bezier(.1,.7,.1,1),box-shadow .25s}.md-header__inner{align-items:center;display:flex;padding:0 .2rem}.md-header__button{color:currentcolor;cursor:pointer;margin:.2rem;outline-color:var(--md-accent-fg-color);padding:.4rem;position:relative;transition:opacity .25s;vertical-align:middle;z-index:1}.md-header__button:hover{opacity:.7}.md-header__button:not([hidden]){display:inline-block}.md-header__button:not(.focus-visible){-webkit-tap-highlight-color:transparent;outline:none}.md-header__button.md-logo{margin:.2rem;padding:.4rem}@media screen and (max-width:76.1875em){.md-header__button.md-logo{display:none}}.md-header__button.md-logo :-webkit-any(img,svg){fill:currentcolor;display:block;height:1.2rem;width:auto}.md-header__button.md-logo :-moz-any(img,svg){fill:currentcolor;display:block;height:1.2rem;width:auto}.md-header__button.md-logo :is(img,svg){fill:currentcolor;display:block;height:1.2rem;width:auto}@media screen and (min-width:60em){.md-header__button[for=__search]{display:none}}.no-js .md-header__button[for=__search]{display:none}[dir=rtl] .md-header__button[for=__search] svg{transform:scaleX(-1)}@media screen and (min-width:76.25em){.md-header__button[for=__drawer]{display:none}}.md-header__topic{display:flex;max-width:100%;position:absolute;transition:transform .4s cubic-bezier(.1,.7,.1,1),opacity .15s;white-space:nowrap}.md-header__topic+.md-header__topic{opacity:0;pointer-events:none;transform:translateX(1.25rem);transition:transform .4s cubic-bezier(1,.7,.1,.1),opacity .15s;z-index:-1}[dir=rtl] .md-header__topic+.md-header__topic{transform:translateX(-1.25rem)}.md-header__topic:first-child{font-weight:700}[dir=ltr] .md-header__title{margin-right:.4rem}[dir=rtl] .md-header__title{margin-left:.4rem}[dir=ltr] .md-header__title{margin-left:1rem}[dir=rtl] .md-header__title{margin-right:1rem}.md-header__title{flex-grow:1;font-size:.9rem;height:2.4rem;line-height:2.4rem}.md-header__title--active .md-header__topic{opacity:0;pointer-events:none;transform:translateX(-1.25rem);transition:transform .4s cubic-bezier(1,.7,.1,.1),opacity .15s;z-index:-1}[dir=rtl] .md-header__title--active .md-header__topic{transform:translateX(1.25rem)}.md-header__title--active .md-header__topic+.md-header__topic{opacity:1;pointer-events:auto;transform:translateX(0);transition:transform .4s cubic-bezier(.1,.7,.1,1),opacity .15s;z-index:0}.md-header__title>.md-header__ellipsis{height:100%;position:relative;width:100%}.md-header__option{display:flex;flex-shrink:0;max-width:100%;transition:max-width 0ms .25s,opacity .25s .25s;white-space:nowrap}[data-md-toggle=search]:checked~.md-header .md-header__option{max-width:0;opacity:0;transition:max-width 0ms,opacity 0ms}.md-header__source{display:none}@media screen and (min-width:60em){[dir=ltr] .md-header__source{margin-left:1rem}[dir=rtl] .md-header__source{margin-right:1rem}.md-header__source{display:block;max-width:11.7rem;width:11.7rem}}@media screen and (min-width:76.25em){[dir=ltr] .md-header__source{margin-left:1.4rem}[dir=rtl] .md-header__source{margin-right:1.4rem}}.md-hero{background-color:var(--md-primary-fg-color);color:var(--md-primary-bg-color);font-size:1rem;overflow:hidden;transition:background .25s}.md-hero__inner{margin-top:1rem;padding:.8rem .8rem .4rem;transition:transform .4s cubic-bezier(.1,.7,.1,1),opacity .25s;transition-delay:.1s}@media screen and (max-width:76.1875em){.md-hero__inner{margin-bottom:1.2rem;margin-top:2.4rem}}[data-md-state=hidden] .md-hero__inner{opacity:0;pointer-events:none;transform:translateY(.625rem);transition:transform 0ms .4s,opacity .1s 0ms}.md-hero--expand .md-hero__inner{margin-bottom:1.2rem}:root{--md-nav-icon--prev:url('data:image/svg+xml;charset=utf-8,');--md-nav-icon--next:url('data:image/svg+xml;charset=utf-8,');--md-toc-icon:url('data:image/svg+xml;charset=utf-8,')}.md-nav{font-size:.7rem;line-height:1.3}.md-nav__title{align-items:center;display:flex;font-weight:700;overflow:hidden;padding:0 .6rem;text-overflow:ellipsis}.md-nav__title .md-nav__button{display:none}.md-nav__title .md-nav__button img{height:100%;width:auto}.md-nav__title .md-nav__button.md-logo :-webkit-any(img,svg){fill:currentcolor;display:block;height:2.4rem;max-width:100%;object-fit:contain;width:auto}.md-nav__title .md-nav__button.md-logo :-moz-any(img,svg){fill:currentcolor;display:block;height:2.4rem;max-width:100%;object-fit:contain;width:auto}.md-nav__title .md-nav__button.md-logo :is(img,svg){fill:currentcolor;display:block;height:2.4rem;max-width:100%;-o-object-fit:contain;object-fit:contain;width:auto}.md-nav__list{list-style:none;margin:0;padding:0}.md-nav__item{padding:0 .6rem}[dir=ltr] .md-nav__item .md-nav__item{padding-right:0}[dir=rtl] .md-nav__item .md-nav__item{padding-left:0}.md-nav__link{align-items:center;cursor:pointer;display:flex;margin-top:.625em;scroll-snap-align:start;transition:color 125ms}.md-nav__link.md-nav__sticky{box-shadow:0 -.625em var(--md-default-bg-color),0 .625em var(--md-default-bg-color)}.md-nav__link--passed{color:var(--md-default-fg-color--light)}.md-nav__item .md-nav__link--active{color:var(--md-typeset-a-color)}.md-nav__link--in-viewport{position:relative}.md-nav__link--in-viewport:before{background-color:var(--md-primary-fg-color);bottom:0;content:"";height:100%;position:absolute;right:calc(100% + .3rem);top:0;width:.05rem}.md-nav__item .md-nav__link--index [href]{width:100%}.md-nav__link:-webkit-any(:focus,:hover){color:var(--md-accent-fg-color)}.md-nav__link:-moz-any(:focus,:hover){color:var(--md-accent-fg-color)}.md-nav__link:is(:focus,:hover){color:var(--md-accent-fg-color)}.md-nav__link.focus-visible{outline-color:var(--md-accent-fg-color);outline-offset:.2rem}.md-nav--primary .md-nav__link[for=__toc]{display:none}.md-nav--primary .md-nav__link[for=__toc] .md-icon:after{background-color:currentcolor;display:block;height:100%;-webkit-mask-image:var(--md-toc-icon);mask-image:var(--md-toc-icon);width:100%}.md-nav--primary .md-nav__link[for=__toc]~.md-nav{display:none}.md-nav__link>*{cursor:pointer;display:flex}.md-nav__sticky{background-color:var(--md-default-bg-color);position:sticky;top:var(--md-nav__header-height,0);z-index:var(--md-nav__sticky-zindex)}.md-nav .md-ellipsis{display:block;flex-grow:1;white-space:normal}.md-nav__icon{flex-shrink:0}.md-nav__source{display:none}@media screen and (max-width:76.1875em){.md-nav--primary,.md-nav--primary .md-nav{background-color:var(--md-default-bg-color);display:flex;flex-direction:column;height:100%;left:0;position:absolute;right:0;top:0;z-index:1}.md-nav--primary .md-nav__sticky{background-color:transparent;box-shadow:none;position:static;z-index:auto}.md-nav--primary :-webkit-any(.md-nav__title,.md-nav__item){font-size:.8rem;line-height:1.5}.md-nav--primary :-moz-any(.md-nav__title,.md-nav__item){font-size:.8rem;line-height:1.5}.md-nav--primary :is(.md-nav__title,.md-nav__item){font-size:.8rem;line-height:1.5}.md-nav--primary .md-nav__title{background-color:var(--md-default-fg-color--lightest);color:var(--md-default-fg-color--light);cursor:pointer;line-height:2.4rem;min-height:5.6rem;padding:3rem .8rem .2rem;position:relative;white-space:nowrap}[dir=ltr] .md-nav--primary .md-nav__title .md-nav__icon{left:.4rem}[dir=rtl] .md-nav--primary .md-nav__title .md-nav__icon{right:.4rem}.md-nav--primary .md-nav__title .md-nav__icon{display:block;height:1.2rem;margin:.2rem;position:absolute;top:.4rem;width:1.2rem}.md-nav--primary .md-nav__title .md-nav__icon:after{background-color:currentcolor;content:"";display:block;height:100%;-webkit-mask-image:var(--md-nav-icon--prev);mask-image:var(--md-nav-icon--prev);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:100%}.md-nav--primary .md-nav__title~.md-nav__list{background-color:var(--md-default-bg-color);box-shadow:0 .05rem 0 var(--md-default-fg-color--lightest) inset;overflow-y:auto;scroll-snap-type:y mandatory;touch-action:pan-y}.md-nav--primary .md-nav__title~.md-nav__list>:first-child{border-top:0}.md-nav--primary .md-nav__title[for=__drawer]{background-color:var(--md-primary-fg-color);color:var(--md-primary-bg-color);font-weight:700}.md-nav--primary .md-nav__title .md-logo{display:block;left:.2rem;margin:.2rem;padding:.4rem;position:absolute;right:.2rem;top:.2rem}.md-nav--primary .md-nav__list{flex:1}.md-nav--primary .md-nav__item{border-top:.05rem solid var(--md-default-fg-color--lightest);padding:0}.md-nav--primary .md-nav__item--active>.md-nav__link{color:var(--md-typeset-a-color)}.md-nav--primary .md-nav__item--active>.md-nav__link:-webkit-any(:focus,:hover){color:var(--md-accent-fg-color)}.md-nav--primary .md-nav__item--active>.md-nav__link:-moz-any(:focus,:hover){color:var(--md-accent-fg-color)}.md-nav--primary .md-nav__item--active>.md-nav__link:is(:focus,:hover){color:var(--md-accent-fg-color)}.md-nav--primary .md-nav__link{margin-top:0;padding:.6rem .8rem}[dir=ltr] .md-nav--primary .md-nav__link .md-nav__icon{margin-right:-.2rem}[dir=rtl] .md-nav--primary .md-nav__link .md-nav__icon{margin-left:-.2rem}.md-nav--primary .md-nav__link .md-nav__icon{font-size:1.2rem;height:1.2rem;width:1.2rem}.md-nav--primary .md-nav__link .md-nav__icon:after{background-color:currentcolor;content:"";display:block;height:100%;-webkit-mask-image:var(--md-nav-icon--next);mask-image:var(--md-nav-icon--next);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:100%}[dir=rtl] .md-nav--primary .md-nav__icon:after{transform:scale(-1)}.md-nav--primary .md-nav--secondary .md-nav{background-color:transparent;position:static}[dir=ltr] .md-nav--primary .md-nav--secondary .md-nav .md-nav__link{padding-left:1.4rem}[dir=rtl] .md-nav--primary .md-nav--secondary .md-nav .md-nav__link{padding-right:1.4rem}[dir=ltr] .md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav__link{padding-left:2rem}[dir=rtl] .md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav__link{padding-right:2rem}[dir=ltr] .md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav .md-nav__link{padding-left:2.6rem}[dir=rtl] .md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav .md-nav__link{padding-right:2.6rem}[dir=ltr] .md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav .md-nav .md-nav__link{padding-left:3.2rem}[dir=rtl] .md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav .md-nav .md-nav__link{padding-right:3.2rem}.md-nav--secondary{background-color:transparent}.md-nav__toggle~.md-nav{display:flex;opacity:0;transform:translateX(100%);transition:transform .25s cubic-bezier(.8,0,.6,1),opacity 125ms 50ms}[dir=rtl] .md-nav__toggle~.md-nav{transform:translateX(-100%)}.md-nav__toggle:checked~.md-nav{opacity:1;transform:translateX(0);transition:transform .25s cubic-bezier(.4,0,.2,1),opacity 125ms 125ms}.md-nav__toggle:checked~.md-nav>.md-nav__list{-webkit-backface-visibility:hidden;backface-visibility:hidden}.md-nav .md-nav__title .md-ellipsis{white-space:nowrap}.md-nav .md-nav__title .md-ellipsis wbr{display:none}}@media screen and (max-width:59.9375em){.md-nav__current-nested{display:none}.md-nav--primary .md-nav__link[for=__toc]{display:flex}.md-nav--primary .md-nav__link[for=__toc] .md-icon:after{content:""}.md-nav--primary .md-nav__link[for=__toc]+.md-nav__link{display:none}.md-nav--primary .md-nav__link[for=__toc]~.md-nav{display:flex}.md-nav__source{background-color:var(--md-primary-fg-color--dark);color:var(--md-primary-bg-color);display:block;padding:0 .2rem}}@media screen and (min-width:60em) and (max-width:76.1875em){.md-nav--integrated .md-nav__link[for=__toc]{display:flex}.md-nav--integrated .md-nav__link[for=__toc] .md-icon:after{content:""}.md-nav--integrated .md-nav__link[for=__toc]+.md-nav__link{display:none}.md-nav--integrated .md-nav__link[for=__toc]~.md-nav{display:flex}}@media screen and (min-width:60em){.md-nav__current-toc{display:none}.md-nav--secondary .md-nav__title{background:var(--md-default-bg-color);box-shadow:0 0 .4rem .4rem var(--md-default-bg-color);position:sticky;top:0;z-index:1}.md-nav--secondary .md-nav__title[for=__toc]{scroll-snap-align:start}.md-nav--secondary .md-nav__title .md-nav__icon{display:none}}@media screen and (min-width:76.25em){.md-nav{transition:max-height .25s cubic-bezier(.86,0,.07,1)}.md-nav--primary .md-nav__title{background:var(--md-default-bg-color);box-shadow:0 0 .4rem .4rem var(--md-default-bg-color);position:sticky;top:0;z-index:1}.md-nav--primary .md-nav__title[for=__drawer]{scroll-snap-align:start}.md-nav--primary .md-nav__title .md-nav__icon,.md-nav__toggle~.md-nav{display:none}.md-nav__toggle:-webkit-any(:checked,:indeterminate)~.md-nav{display:block}.md-nav__toggle:-moz-any(:checked,:indeterminate)~.md-nav{display:block}.md-nav__toggle:is(:checked,:indeterminate)~.md-nav{display:block}.md-nav__item--nested>.md-nav>.md-nav__title{display:none}.md-nav__item--section{display:block;margin:1.25em 0}.md-nav__item--section:last-child{margin-bottom:0}.md-nav__item--section>.md-nav__link{font-weight:700;pointer-events:none}.md-nav__item--section>.md-nav__link--index [href]{pointer-events:auto}.md-nav__item--section>.md-nav__link .md-nav__icon{display:none}.md-nav__item--section>.md-nav{display:block}.md-nav__item--section>.md-nav>.md-nav__list>.md-nav__item{padding:0}.md-nav__icon{border-radius:100%;height:.9rem;transition:background-color .25s,transform .25s;width:.9rem}[dir=rtl] .md-nav__icon{transform:rotate(180deg)}.md-nav__icon:hover{background-color:var(--md-accent-fg-color--transparent)}.md-nav__icon:after{background-color:currentcolor;content:"";display:inline-block;height:100%;-webkit-mask-image:var(--md-nav-icon--next);mask-image:var(--md-nav-icon--next);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;vertical-align:-.1rem;width:100%}.md-nav__item--nested .md-nav__toggle:checked~.md-nav__link .md-nav__icon,.md-nav__item--nested .md-nav__toggle:indeterminate~.md-nav__link .md-nav__icon{transform:rotate(90deg)}.md-nav--lifted>.md-nav__list>.md-nav__item,.md-nav--lifted>.md-nav__list>.md-nav__item--nested,.md-nav--lifted>.md-nav__title{display:none}.md-nav--lifted>.md-nav__list>.md-nav__item--active{display:block;padding:0}.md-nav--lifted>.md-nav__list>.md-nav__item--active>.md-nav__link{background:var(--md-default-bg-color);box-shadow:0 0 .4rem .4rem var(--md-default-bg-color);font-weight:700;margin-top:0;padding:0 .6rem;position:sticky;top:0;z-index:var(--md-nav__sticky-zindex,1)}.md-nav--lifted>.md-nav__list>.md-nav__item--active>.md-nav__link:not(.md-nav__link--index){pointer-events:none}.md-nav--lifted>.md-nav__list>.md-nav__item--active>.md-nav__link .md-nav__icon{display:none}.md-nav--lifted .md-nav[data-md-level="1"]{display:block}[dir=ltr] .md-nav--lifted .md-nav[data-md-level="1"]>.md-nav__list>.md-nav__item{padding-right:.6rem}[dir=rtl] .md-nav--lifted .md-nav[data-md-level="1"]>.md-nav__list>.md-nav__item{padding-left:.6rem}.md-nav--integrated>.md-nav__list>.md-nav__item--active:not(.md-nav__item--nested){padding:0 .6rem}.md-nav--integrated>.md-nav__list>.md-nav__item--active:not(.md-nav__item--nested)>.md-nav__link{padding:0}[dir=ltr] .md-nav--integrated>.md-nav__list>.md-nav__item--active .md-nav--secondary{border-left:.05rem solid var(--md-primary-fg-color)}[dir=rtl] .md-nav--integrated>.md-nav__list>.md-nav__item--active .md-nav--secondary{border-right:.05rem solid var(--md-primary-fg-color)}.md-nav--integrated>.md-nav__list>.md-nav__item--active .md-nav--secondary{display:block;margin-bottom:1.25em}.md-nav--integrated>.md-nav__list>.md-nav__item--active .md-nav--secondary>.md-nav__title{display:none}}:root{--md-search-result-icon:url('data:image/svg+xml;charset=utf-8,')}.md-search{position:relative}@media screen and (min-width:60em){.md-search{padding:.2rem 0}}.no-js .md-search{display:none}.md-search__overlay{opacity:0;z-index:1}@media screen and (max-width:59.9375em){[dir=ltr] .md-search__overlay{left:-2.2rem}[dir=rtl] .md-search__overlay{right:-2.2rem}.md-search__overlay{background-color:var(--md-default-bg-color);border-radius:1rem;height:2rem;overflow:hidden;pointer-events:none;position:absolute;top:-1rem;transform-origin:center;transition:transform .3s .1s,opacity .2s .2s;width:2rem}[data-md-toggle=search]:checked~.md-header .md-search__overlay{opacity:1;transition:transform .4s,opacity .1s}}@media screen and (min-width:60em){[dir=ltr] .md-search__overlay{left:0}[dir=rtl] .md-search__overlay{right:0}.md-search__overlay{background-color:rgba(0,0,0,.54);cursor:pointer;height:0;position:fixed;top:0;transition:width 0ms .25s,height 0ms .25s,opacity .25s;width:0}[data-md-toggle=search]:checked~.md-header .md-search__overlay{height:200vh;opacity:1;transition:width 0ms,height 0ms,opacity .25s;width:100%}}@media screen and (max-width:29.9375em){[data-md-toggle=search]:checked~.md-header .md-search__overlay{transform:scale(45)}}@media screen and (min-width:30em) and (max-width:44.9375em){[data-md-toggle=search]:checked~.md-header .md-search__overlay{transform:scale(60)}}@media screen and (min-width:45em) and (max-width:59.9375em){[data-md-toggle=search]:checked~.md-header .md-search__overlay{transform:scale(75)}}.md-search__inner{-webkit-backface-visibility:hidden;backface-visibility:hidden}@media screen and (max-width:59.9375em){[dir=ltr] .md-search__inner{left:0}[dir=rtl] .md-search__inner{right:0}.md-search__inner{height:0;opacity:0;overflow:hidden;position:fixed;top:0;transform:translateX(5%);transition:width 0ms .3s,height 0ms .3s,transform .15s cubic-bezier(.4,0,.2,1) .15s,opacity .15s .15s;width:0;z-index:2}[dir=rtl] .md-search__inner{transform:translateX(-5%)}[data-md-toggle=search]:checked~.md-header .md-search__inner{height:100%;opacity:1;transform:translateX(0);transition:width 0ms 0ms,height 0ms 0ms,transform .15s cubic-bezier(.1,.7,.1,1) .15s,opacity .15s .15s;width:100%}}@media screen and (min-width:60em){[dir=ltr] .md-search__inner{float:right}[dir=rtl] .md-search__inner{float:left}.md-search__inner{padding:.1rem 0;position:relative;transition:width .25s cubic-bezier(.1,.7,.1,1);width:11.7rem}}@media screen and (min-width:60em) and (max-width:76.1875em){[data-md-toggle=search]:checked~.md-header .md-search__inner{width:23.4rem}}@media screen and (min-width:76.25em){[data-md-toggle=search]:checked~.md-header .md-search__inner{width:34.4rem}}.md-search__form{background-color:var(--md-default-bg-color);box-shadow:0 0 .6rem transparent;height:2.4rem;position:relative;transition:color .25s,background-color .25s;z-index:2}@media screen and (min-width:60em){.md-search__form{background-color:rgba(0,0,0,.26);border-radius:.1rem;height:1.8rem}.md-search__form:hover{background-color:hsla(0,0%,100%,.12)}}[data-md-toggle=search]:checked~.md-header .md-search__form{background-color:var(--md-default-bg-color);border-radius:.1rem .1rem 0 0;box-shadow:0 0 .6rem rgba(0,0,0,.07);color:var(--md-default-fg-color)}[dir=ltr] .md-search__input{padding-left:3.6rem;padding-right:2.2rem}[dir=rtl] .md-search__input{padding-left:2.2rem;padding-right:3.6rem}.md-search__input{background:transparent;font-size:.9rem;height:100%;position:relative;text-overflow:ellipsis;width:100%;z-index:2}.md-search__input::-moz-placeholder{-moz-transition:color .25s;transition:color .25s}.md-search__input::placeholder{transition:color .25s}.md-search__input::-moz-placeholder{color:var(--md-default-fg-color--light)}.md-search__input::placeholder,.md-search__input~.md-search__icon{color:var(--md-default-fg-color--light)}.md-search__input::-ms-clear{display:none}@media screen and (max-width:59.9375em){.md-search__input{font-size:.9rem;height:2.4rem;width:100%}}@media screen and (min-width:60em){[dir=ltr] .md-search__input{padding-left:2.2rem}[dir=rtl] .md-search__input{padding-right:2.2rem}.md-search__input{color:inherit;font-size:.8rem}.md-search__input::-moz-placeholder{color:var(--md-primary-bg-color--light)}.md-search__input::placeholder{color:var(--md-primary-bg-color--light)}.md-search__input+.md-search__icon{color:var(--md-primary-bg-color)}[data-md-toggle=search]:checked~.md-header .md-search__input{text-overflow:clip}[data-md-toggle=search]:checked~.md-header .md-search__input::-moz-placeholder{color:var(--md-default-fg-color--light)}[data-md-toggle=search]:checked~.md-header .md-search__input+.md-search__icon,[data-md-toggle=search]:checked~.md-header .md-search__input::placeholder{color:var(--md-default-fg-color--light)}}.md-search__icon{cursor:pointer;display:inline-block;height:1.2rem;transition:color .25s,opacity .25s;width:1.2rem}.md-search__icon:hover{opacity:.7}[dir=ltr] .md-search__icon[for=__search]{left:.5rem}[dir=rtl] .md-search__icon[for=__search]{right:.5rem}.md-search__icon[for=__search]{position:absolute;top:.3rem;z-index:2}[dir=rtl] .md-search__icon[for=__search] svg{transform:scaleX(-1)}@media screen and (max-width:59.9375em){[dir=ltr] .md-search__icon[for=__search]{left:.8rem}[dir=rtl] .md-search__icon[for=__search]{right:.8rem}.md-search__icon[for=__search]{top:.6rem}.md-search__icon[for=__search] svg:first-child{display:none}}@media screen and (min-width:60em){.md-search__icon[for=__search]{pointer-events:none}.md-search__icon[for=__search] svg:last-child{display:none}}[dir=ltr] .md-search__options{right:.5rem}[dir=rtl] .md-search__options{left:.5rem}.md-search__options{pointer-events:none;position:absolute;top:.3rem;z-index:2}@media screen and (max-width:59.9375em){[dir=ltr] .md-search__options{right:.8rem}[dir=rtl] .md-search__options{left:.8rem}.md-search__options{top:.6rem}}[dir=ltr] .md-search__options>*{margin-left:.2rem}[dir=rtl] .md-search__options>*{margin-right:.2rem}.md-search__options>*{color:var(--md-default-fg-color--light);opacity:0;transform:scale(.75);transition:transform .15s cubic-bezier(.1,.7,.1,1),opacity .15s}.md-search__options>:not(.focus-visible){-webkit-tap-highlight-color:transparent;outline:none}[data-md-toggle=search]:checked~.md-header .md-search__input:valid~.md-search__options>*{opacity:1;pointer-events:auto;transform:scale(1)}[data-md-toggle=search]:checked~.md-header .md-search__input:valid~.md-search__options>:hover{opacity:.7}[dir=ltr] .md-search__suggest{padding-left:3.6rem;padding-right:2.2rem}[dir=rtl] .md-search__suggest{padding-left:2.2rem;padding-right:3.6rem}.md-search__suggest{align-items:center;color:var(--md-default-fg-color--lighter);display:flex;font-size:.9rem;height:100%;opacity:0;position:absolute;top:0;transition:opacity 50ms;white-space:nowrap;width:100%}@media screen and (min-width:60em){[dir=ltr] .md-search__suggest{padding-left:2.2rem}[dir=rtl] .md-search__suggest{padding-right:2.2rem}.md-search__suggest{font-size:.8rem}}[data-md-toggle=search]:checked~.md-header .md-search__suggest{opacity:1;transition:opacity .3s .1s}[dir=ltr] .md-search__output{border-bottom-left-radius:.1rem}[dir=ltr] .md-search__output,[dir=rtl] .md-search__output{border-bottom-right-radius:.1rem}[dir=rtl] .md-search__output{border-bottom-left-radius:.1rem}.md-search__output{overflow:hidden;position:absolute;width:100%;z-index:1}@media screen and (max-width:59.9375em){.md-search__output{bottom:0;top:2.4rem}}@media screen and (min-width:60em){.md-search__output{opacity:0;top:1.9rem;transition:opacity .4s}[data-md-toggle=search]:checked~.md-header .md-search__output{box-shadow:var(--md-shadow-z3);opacity:1}}.md-search__scrollwrap{-webkit-backface-visibility:hidden;backface-visibility:hidden;background-color:var(--md-default-bg-color);height:100%;overflow-y:auto;touch-action:pan-y}@media (-webkit-max-device-pixel-ratio:1),(max-resolution:1dppx){.md-search__scrollwrap{transform:translateZ(0)}}@media screen and (min-width:60em) and (max-width:76.1875em){.md-search__scrollwrap{width:23.4rem}}@media screen and (min-width:76.25em){.md-search__scrollwrap{width:34.4rem}}@media screen and (min-width:60em){.md-search__scrollwrap{max-height:0;scrollbar-color:var(--md-default-fg-color--lighter) transparent;scrollbar-width:thin}[data-md-toggle=search]:checked~.md-header .md-search__scrollwrap{max-height:75vh}.md-search__scrollwrap:hover{scrollbar-color:var(--md-accent-fg-color) transparent}.md-search__scrollwrap::-webkit-scrollbar{height:.2rem;width:.2rem}.md-search__scrollwrap::-webkit-scrollbar-thumb{background-color:var(--md-default-fg-color--lighter)}.md-search__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:var(--md-accent-fg-color)}}.md-search-result{color:var(--md-default-fg-color);word-break:break-word}.md-search-result__meta{background-color:var(--md-default-fg-color--lightest);color:var(--md-default-fg-color--light);font-size:.64rem;line-height:1.8rem;padding:0 .8rem;scroll-snap-align:start}@media screen and (min-width:60em){[dir=ltr] .md-search-result__meta{padding-left:2.2rem}[dir=rtl] .md-search-result__meta{padding-right:2.2rem}}.md-search-result__list{list-style:none;margin:0;padding:0;-webkit-user-select:none;-moz-user-select:none;user-select:none}.md-search-result__item{box-shadow:0 -.05rem var(--md-default-fg-color--lightest)}.md-search-result__item:first-child{box-shadow:none}.md-search-result__link{display:block;outline:none;scroll-snap-align:start;transition:background-color .25s}.md-search-result__link:-webkit-any(:focus,:hover){background-color:var(--md-accent-fg-color--transparent)}.md-search-result__link:-moz-any(:focus,:hover){background-color:var(--md-accent-fg-color--transparent)}.md-search-result__link:is(:focus,:hover){background-color:var(--md-accent-fg-color--transparent)}.md-search-result__link:last-child p:last-child{margin-bottom:.6rem}.md-search-result__more summary{color:var(--md-typeset-a-color);cursor:pointer;display:block;font-size:.64rem;outline:none;padding:.75em .8rem;scroll-snap-align:start;transition:color .25s,background-color .25s}@media screen and (min-width:60em){[dir=ltr] .md-search-result__more summary{padding-left:2.2rem}[dir=rtl] .md-search-result__more summary{padding-right:2.2rem}}.md-search-result__more summary:-webkit-any(:focus,:hover){background-color:var(--md-accent-fg-color--transparent);color:var(--md-accent-fg-color)}.md-search-result__more summary:-moz-any(:focus,:hover){background-color:var(--md-accent-fg-color--transparent);color:var(--md-accent-fg-color)}.md-search-result__more summary:is(:focus,:hover){background-color:var(--md-accent-fg-color--transparent);color:var(--md-accent-fg-color)}.md-search-result__more summary::marker{display:none}.md-search-result__more summary::-webkit-details-marker{display:none}.md-search-result__more summary~*>*{opacity:.65}.md-search-result__article{overflow:hidden;padding:0 .8rem;position:relative}@media screen and (min-width:60em){[dir=ltr] .md-search-result__article{padding-left:2.2rem}[dir=rtl] .md-search-result__article{padding-right:2.2rem}}.md-search-result__article--document .md-search-result__title{font-size:.8rem;font-weight:400;line-height:1.4;margin:.55rem 0}[dir=ltr] .md-search-result__icon{left:0}[dir=rtl] .md-search-result__icon{right:0}.md-search-result__icon{color:var(--md-default-fg-color--light);height:1.2rem;margin:.5rem;position:absolute;width:1.2rem}@media screen and (max-width:59.9375em){.md-search-result__icon{display:none}}.md-search-result__icon:after{background-color:currentcolor;content:"";display:inline-block;height:100%;-webkit-mask-image:var(--md-search-result-icon);mask-image:var(--md-search-result-icon);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:100%}[dir=rtl] .md-search-result__icon:after{transform:scaleX(-1)}.md-search-result__title{font-size:.64rem;font-weight:700;line-height:1.6;margin:.5em 0}.md-search-result__teaser{-webkit-box-orient:vertical;-webkit-line-clamp:2;color:var(--md-default-fg-color--light);display:-webkit-box;font-size:.64rem;line-height:1.6;margin:.5em 0;max-height:2rem;overflow:hidden;text-overflow:ellipsis}@media screen and (max-width:44.9375em){.md-search-result__teaser{-webkit-line-clamp:3;max-height:3rem}}@media screen and (min-width:60em) and (max-width:76.1875em){.md-search-result__teaser{-webkit-line-clamp:3;max-height:3rem}}.md-search-result__teaser mark{background-color:transparent;text-decoration:underline}.md-search-result__terms{font-size:.64rem;font-style:italic;margin:.5em 0}.md-search-result mark{background-color:transparent;color:var(--md-accent-fg-color)}.md-select{position:relative;z-index:1}.md-select__inner{background-color:var(--md-default-bg-color);border-radius:.1rem;box-shadow:var(--md-shadow-z2);color:var(--md-default-fg-color);left:50%;margin-top:.2rem;max-height:0;opacity:0;position:absolute;top:calc(100% - .2rem);transform:translate3d(-50%,.3rem,0);transition:transform .25s 375ms,opacity .25s .25s,max-height 0ms .5s}.md-select:-webkit-any(:focus-within,:hover) .md-select__inner{max-height:10rem;opacity:1;transform:translate3d(-50%,0,0);-webkit-transition:transform .25s cubic-bezier(.1,.7,.1,1),opacity .25s,max-height 0ms;transition:transform .25s cubic-bezier(.1,.7,.1,1),opacity .25s,max-height 0ms}.md-select:-moz-any(:focus-within,:hover) .md-select__inner{max-height:10rem;opacity:1;transform:translate3d(-50%,0,0);-moz-transition:transform .25s cubic-bezier(.1,.7,.1,1),opacity .25s,max-height 0ms;transition:transform .25s cubic-bezier(.1,.7,.1,1),opacity .25s,max-height 0ms}.md-select:is(:focus-within,:hover) .md-select__inner{max-height:10rem;opacity:1;transform:translate3d(-50%,0,0);transition:transform .25s cubic-bezier(.1,.7,.1,1),opacity .25s,max-height 0ms}.md-select__inner:after{border-bottom:.2rem solid transparent;border-bottom-color:var(--md-default-bg-color);border-left:.2rem solid transparent;border-right:.2rem solid transparent;border-top:0;content:"";height:0;left:50%;margin-left:-.2rem;margin-top:-.2rem;position:absolute;top:0;width:0}.md-select__list{border-radius:.1rem;font-size:.8rem;list-style-type:none;margin:0;max-height:inherit;overflow:auto;padding:0}.md-select__item{line-height:1.8rem}[dir=ltr] .md-select__link{padding-left:.6rem;padding-right:1.2rem}[dir=rtl] .md-select__link{padding-left:1.2rem;padding-right:.6rem}.md-select__link{cursor:pointer;display:block;outline:none;scroll-snap-align:start;transition:background-color .25s,color .25s;width:100%}.md-select__link:-webkit-any(:focus,:hover){color:var(--md-accent-fg-color)}.md-select__link:-moz-any(:focus,:hover){color:var(--md-accent-fg-color)}.md-select__link:is(:focus,:hover){color:var(--md-accent-fg-color)}.md-select__link:focus{background-color:var(--md-default-fg-color--lightest)}.md-sidebar{align-self:flex-start;flex-shrink:0;padding:1.2rem 0;position:sticky;top:2.4rem;width:12.1rem}@media print{.md-sidebar{display:none}}@media screen and (max-width:76.1875em){[dir=ltr] .md-sidebar--primary{left:-12.1rem}[dir=rtl] .md-sidebar--primary{right:-12.1rem}.md-sidebar--primary{background-color:var(--md-default-bg-color);display:block;height:100%;position:fixed;top:0;transform:translateX(0);transition:transform .25s cubic-bezier(.4,0,.2,1),box-shadow .25s;width:12.1rem;z-index:5}[data-md-toggle=drawer]:checked~.md-container .md-sidebar--primary{box-shadow:var(--md-shadow-z3);transform:translateX(12.1rem)}[dir=rtl] [data-md-toggle=drawer]:checked~.md-container .md-sidebar--primary{transform:translateX(-12.1rem)}.md-sidebar--primary .md-sidebar__scrollwrap{bottom:0;left:0;margin:0;overflow:hidden;position:absolute;right:0;scroll-snap-type:none;top:0}}@media screen and (min-width:76.25em){.md-sidebar{height:0}.no-js .md-sidebar{height:auto}.md-header--lifted~.md-container .md-sidebar{top:4.8rem}}.md-sidebar--secondary{display:none;order:2}@media screen and (min-width:60em){.md-sidebar--secondary{height:0}.no-js .md-sidebar--secondary{height:auto}.md-sidebar--secondary:not([hidden]){display:block}.md-sidebar--secondary .md-sidebar__scrollwrap{touch-action:pan-y}}.md-sidebar__scrollwrap{scrollbar-gutter:stable;-webkit-backface-visibility:hidden;backface-visibility:hidden;margin:0 .2rem;overflow-y:auto;scrollbar-color:var(--md-default-fg-color--lighter) transparent;scrollbar-width:thin}.md-sidebar__scrollwrap:hover{scrollbar-color:var(--md-accent-fg-color) transparent}.md-sidebar__scrollwrap::-webkit-scrollbar{height:.2rem;width:.2rem}.md-sidebar__scrollwrap::-webkit-scrollbar-thumb{background-color:var(--md-default-fg-color--lighter)}.md-sidebar__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:var(--md-accent-fg-color)}@supports selector(::-webkit-scrollbar){.md-sidebar__scrollwrap{scrollbar-gutter:auto}[dir=ltr] .md-sidebar__inner{padding-right:calc(100% - 11.5rem)}[dir=rtl] .md-sidebar__inner{padding-left:calc(100% - 11.5rem)}}@media screen and (max-width:76.1875em){.md-overlay{background-color:rgba(0,0,0,.54);height:0;opacity:0;position:fixed;top:0;transition:width 0ms .25s,height 0ms .25s,opacity .25s;width:0;z-index:5}[data-md-toggle=drawer]:checked~.md-overlay{height:100%;opacity:1;transition:width 0ms,height 0ms,opacity .25s;width:100%}}@keyframes facts{0%{height:0}to{height:.65rem}}@keyframes fact{0%{opacity:0;transform:translateY(100%)}50%{opacity:0}to{opacity:1;transform:translateY(0)}}:root{--md-source-forks-icon:url('data:image/svg+xml;charset=utf-8,');--md-source-repositories-icon:url('data:image/svg+xml;charset=utf-8,');--md-source-stars-icon:url('data:image/svg+xml;charset=utf-8,');--md-source-version-icon:url('data:image/svg+xml;charset=utf-8,')}.md-source{-webkit-backface-visibility:hidden;backface-visibility:hidden;display:block;font-size:.65rem;line-height:1.2;outline-color:var(--md-accent-fg-color);transition:opacity .25s;white-space:nowrap}.md-source:hover{opacity:.7}.md-source__icon{display:inline-block;height:2.4rem;vertical-align:middle;width:2rem}[dir=ltr] .md-source__icon svg{margin-left:.6rem}[dir=rtl] .md-source__icon svg{margin-right:.6rem}.md-source__icon svg{margin-top:.6rem}[dir=ltr] .md-source__icon+.md-source__repository{margin-left:-2rem}[dir=rtl] .md-source__icon+.md-source__repository{margin-right:-2rem}[dir=ltr] .md-source__icon+.md-source__repository{padding-left:2rem}[dir=rtl] .md-source__icon+.md-source__repository{padding-right:2rem}[dir=ltr] .md-source__repository{margin-left:.6rem}[dir=rtl] .md-source__repository{margin-right:.6rem}.md-source__repository{display:inline-block;max-width:calc(100% - 1.2rem);overflow:hidden;text-overflow:ellipsis;vertical-align:middle}.md-source__facts{display:flex;font-size:.55rem;gap:.4rem;list-style-type:none;margin:.1rem 0 0;opacity:.75;overflow:hidden;padding:0;width:100%}.md-source__repository--active .md-source__facts{animation:facts .25s ease-in}.md-source__fact{overflow:hidden;text-overflow:ellipsis}.md-source__repository--active .md-source__fact{animation:fact .4s ease-out}[dir=ltr] .md-source__fact:before{margin-right:.1rem}[dir=rtl] .md-source__fact:before{margin-left:.1rem}.md-source__fact:before{background-color:currentcolor;content:"";display:inline-block;height:.6rem;-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;vertical-align:text-top;width:.6rem}.md-source__fact:nth-child(1n+2){flex-shrink:0}.md-source__fact--version:before{-webkit-mask-image:var(--md-source-version-icon);mask-image:var(--md-source-version-icon)}.md-source__fact--stars:before{-webkit-mask-image:var(--md-source-stars-icon);mask-image:var(--md-source-stars-icon)}.md-source__fact--forks:before{-webkit-mask-image:var(--md-source-forks-icon);mask-image:var(--md-source-forks-icon)}.md-source__fact--repositories:before{-webkit-mask-image:var(--md-source-repositories-icon);mask-image:var(--md-source-repositories-icon)}.md-tabs{background-color:var(--md-primary-fg-color);color:var(--md-primary-bg-color);display:block;line-height:1.3;overflow:auto;width:100%;z-index:3}@media print{.md-tabs{display:none}}@media screen and (max-width:76.1875em){.md-tabs{display:none}}.md-tabs[hidden]{pointer-events:none}[dir=ltr] .md-tabs__list{margin-left:.2rem}[dir=rtl] .md-tabs__list{margin-right:.2rem}.md-tabs__list{contain:content;list-style:none;margin:0;padding:0;white-space:nowrap}.md-tabs__item{display:inline-block;height:2.4rem;padding-left:.6rem;padding-right:.6rem}.md-tabs__link{-webkit-backface-visibility:hidden;backface-visibility:hidden;display:block;font-size:.7rem;margin-top:.8rem;opacity:.7;outline-color:var(--md-accent-fg-color);outline-offset:.2rem;transition:transform .4s cubic-bezier(.1,.7,.1,1),opacity .25s}.md-tabs__link--active,.md-tabs__link:-webkit-any(:focus,:hover){color:inherit;opacity:1}.md-tabs__link--active,.md-tabs__link:-moz-any(:focus,:hover){color:inherit;opacity:1}.md-tabs__link--active,.md-tabs__link:is(:focus,:hover){color:inherit;opacity:1}.md-tabs__item:nth-child(2) .md-tabs__link{transition-delay:20ms}.md-tabs__item:nth-child(3) .md-tabs__link{transition-delay:40ms}.md-tabs__item:nth-child(4) .md-tabs__link{transition-delay:60ms}.md-tabs__item:nth-child(5) .md-tabs__link{transition-delay:80ms}.md-tabs__item:nth-child(6) .md-tabs__link{transition-delay:.1s}.md-tabs__item:nth-child(7) .md-tabs__link{transition-delay:.12s}.md-tabs__item:nth-child(8) .md-tabs__link{transition-delay:.14s}.md-tabs__item:nth-child(9) .md-tabs__link{transition-delay:.16s}.md-tabs__item:nth-child(10) .md-tabs__link{transition-delay:.18s}.md-tabs__item:nth-child(11) .md-tabs__link{transition-delay:.2s}.md-tabs__item:nth-child(12) .md-tabs__link{transition-delay:.22s}.md-tabs__item:nth-child(13) .md-tabs__link{transition-delay:.24s}.md-tabs__item:nth-child(14) .md-tabs__link{transition-delay:.26s}.md-tabs__item:nth-child(15) .md-tabs__link{transition-delay:.28s}.md-tabs__item:nth-child(16) .md-tabs__link{transition-delay:.3s}.md-tabs[hidden] .md-tabs__link{opacity:0;transform:translateY(50%);transition:transform 0ms .1s,opacity .1s}:root{--md-tag-icon:url('data:image/svg+xml;charset=utf-8,')}.md-typeset .md-tags{margin-bottom:.75em;margin-top:-.125em}[dir=ltr] .md-typeset .md-tag{margin-right:.5em}[dir=rtl] .md-typeset .md-tag{margin-left:.5em}.md-typeset .md-tag{background:var(--md-default-fg-color--lightest);border-radius:2.4rem;display:inline-block;font-size:.64rem;font-weight:700;letter-spacing:normal;line-height:1.6;margin-bottom:.5em;padding:.3125em .9375em;vertical-align:middle}.md-typeset .md-tag[href]{-webkit-tap-highlight-color:transparent;color:inherit;outline:none;transition:color 125ms,background-color 125ms}.md-typeset .md-tag[href]:focus,.md-typeset .md-tag[href]:hover{background-color:var(--md-accent-fg-color);color:var(--md-accent-bg-color)}[id]>.md-typeset .md-tag{vertical-align:text-top}.md-typeset .md-tag-icon:before{background-color:var(--md-default-fg-color--lighter);content:"";display:inline-block;height:1.2em;margin-right:.4em;-webkit-mask-image:var(--md-tag-icon);mask-image:var(--md-tag-icon);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;transition:background-color 125ms;vertical-align:text-bottom;width:1.2em}.md-typeset .md-tag-icon:-webkit-any(a:focus,a:hover):before{background-color:var(--md-accent-bg-color)}.md-typeset .md-tag-icon:-moz-any(a:focus,a:hover):before{background-color:var(--md-accent-bg-color)}.md-typeset .md-tag-icon:is(a:focus,a:hover):before{background-color:var(--md-accent-bg-color)}@keyframes pulse{0%{box-shadow:0 0 0 0 var(--md-default-fg-color--lightest);transform:scale(.95)}75%{box-shadow:0 0 0 .625em transparent;transform:scale(1)}to{box-shadow:0 0 0 0 transparent;transform:scale(.95)}}:root{--md-tooltip-width:20rem}.md-tooltip{-webkit-backface-visibility:hidden;backface-visibility:hidden;background-color:var(--md-default-bg-color);border-radius:.1rem;box-shadow:var(--md-shadow-z2);color:var(--md-default-fg-color);font-family:var(--md-text-font-family);left:clamp(var(--md-tooltip-0,0rem) + .8rem,var(--md-tooltip-x),100vw + var(--md-tooltip-0,0rem) + .8rem - var(--md-tooltip-width) - 2 * .8rem);max-width:calc(100vw - 1.6rem);opacity:0;position:absolute;top:var(--md-tooltip-y);transform:translateY(-.4rem);transition:transform 0ms .25s,opacity .25s,z-index .25s;width:var(--md-tooltip-width);z-index:0}.md-tooltip--active{opacity:1;transform:translateY(0);transition:transform .25s cubic-bezier(.1,.7,.1,1),opacity .25s,z-index 0ms;z-index:2}:-webkit-any(.focus-visible>.md-tooltip,.md-tooltip:target){outline:var(--md-accent-fg-color) auto}:-moz-any(.focus-visible>.md-tooltip,.md-tooltip:target){outline:var(--md-accent-fg-color) auto}:is(.focus-visible>.md-tooltip,.md-tooltip:target){outline:var(--md-accent-fg-color) auto}.md-tooltip__inner{font-size:.64rem;padding:.8rem}.md-tooltip__inner.md-typeset>:first-child{margin-top:0}.md-tooltip__inner.md-typeset>:last-child{margin-bottom:0}.md-annotation{font-weight:400;outline:none;white-space:normal}[dir=rtl] .md-annotation{direction:rtl}.md-annotation:not([hidden]){display:inline-block;line-height:1.325}.md-annotation__index{cursor:pointer;font-family:var(--md-code-font-family);font-size:.85em;margin:0 1ch;outline:none;position:relative;-webkit-user-select:none;-moz-user-select:none;user-select:none;z-index:0}.md-annotation .md-annotation__index{color:#fff;transition:z-index .25s}.md-annotation .md-annotation__index:-webkit-any(:focus,:hover){color:#fff}.md-annotation .md-annotation__index:-moz-any(:focus,:hover){color:#fff}.md-annotation .md-annotation__index:is(:focus,:hover){color:#fff}.md-annotation__index:after{background-color:var(--md-default-fg-color--lighter);border-radius:2ch;content:"";height:2.2ch;left:-.125em;margin:0 -.4ch;padding:0 .4ch;position:absolute;top:0;transition:color .25s,background-color .25s;width:calc(100% + 1.2ch);width:max(2.2ch,100% + 1.2ch);z-index:-1}@media not all and (prefers-reduced-motion){[data-md-visible]>.md-annotation__index:after{animation:pulse 2s infinite}}.md-tooltip--active+.md-annotation__index:after{animation:none;transition:color .25s,background-color .25s}code .md-annotation__index{font-family:var(--md-code-font-family);font-size:inherit}:-webkit-any(.md-tooltip--active+.md-annotation__index,:hover>.md-annotation__index){color:var(--md-accent-bg-color)}:-moz-any(.md-tooltip--active+.md-annotation__index,:hover>.md-annotation__index){color:var(--md-accent-bg-color)}:is(.md-tooltip--active+.md-annotation__index,:hover>.md-annotation__index){color:var(--md-accent-bg-color)}:-webkit-any(.md-tooltip--active+.md-annotation__index,:hover>.md-annotation__index):after{background-color:var(--md-accent-fg-color)}:-moz-any(.md-tooltip--active+.md-annotation__index,:hover>.md-annotation__index):after{background-color:var(--md-accent-fg-color)}:is(.md-tooltip--active+.md-annotation__index,:hover>.md-annotation__index):after{background-color:var(--md-accent-fg-color)}.md-tooltip--active+.md-annotation__index{animation:none;transition:none;z-index:2}.md-annotation__index [data-md-annotation-id]{display:inline-block;line-height:90%}.md-annotation__index [data-md-annotation-id]:before{content:attr(data-md-annotation-id);display:inline-block;padding-bottom:.1em;transform:scale(1.15);transition:transform .4s cubic-bezier(.1,.7,.1,1);vertical-align:.065em}@media not print{.md-annotation__index [data-md-annotation-id]:before{content:"+"}:focus-within>.md-annotation__index [data-md-annotation-id]:before{transform:scale(1.25) rotate(45deg)}}[dir=ltr] .md-top{margin-left:50%}[dir=rtl] .md-top{margin-right:50%}.md-top{background-color:var(--md-default-bg-color);border-radius:1.6rem;box-shadow:var(--md-shadow-z2);color:var(--md-default-fg-color--light);display:block;font-size:.7rem;outline:none;padding:.4rem .8rem;position:fixed;top:3.2rem;transform:translate(-50%);transition:color 125ms,background-color 125ms,transform 125ms cubic-bezier(.4,0,.2,1),opacity 125ms;z-index:2}@media print{.md-top{display:none}}[dir=rtl] .md-top{transform:translate(50%)}.md-top[hidden]{opacity:0;pointer-events:none;transform:translate(-50%,.2rem);transition-duration:0ms}[dir=rtl] .md-top[hidden]{transform:translate(50%,.2rem)}.md-top:-webkit-any(:focus,:hover){background-color:var(--md-accent-fg-color);color:var(--md-accent-bg-color)}.md-top:-moz-any(:focus,:hover){background-color:var(--md-accent-fg-color);color:var(--md-accent-bg-color)}.md-top:is(:focus,:hover){background-color:var(--md-accent-fg-color);color:var(--md-accent-bg-color)}.md-top svg{display:inline-block;vertical-align:-.5em}@keyframes hoverfix{0%{pointer-events:none}}:root{--md-version-icon:url('data:image/svg+xml;charset=utf-8,')}.md-version{flex-shrink:0;font-size:.8rem;height:2.4rem}[dir=ltr] .md-version__current{margin-left:1.4rem;margin-right:.4rem}[dir=rtl] .md-version__current{margin-left:.4rem;margin-right:1.4rem}.md-version__current{color:inherit;cursor:pointer;outline:none;position:relative;top:.05rem}[dir=ltr] .md-version__current:after{margin-left:.4rem}[dir=rtl] .md-version__current:after{margin-right:.4rem}.md-version__current:after{background-color:currentcolor;content:"";display:inline-block;height:.6rem;-webkit-mask-image:var(--md-version-icon);mask-image:var(--md-version-icon);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:.4rem}.md-version__list{background-color:var(--md-default-bg-color);border-radius:.1rem;box-shadow:var(--md-shadow-z2);color:var(--md-default-fg-color);list-style-type:none;margin:.2rem .8rem;max-height:0;opacity:0;overflow:auto;padding:0;position:absolute;scroll-snap-type:y mandatory;top:.15rem;transition:max-height 0ms .5s,opacity .25s .25s;z-index:3}.md-version:-webkit-any(:focus-within,:hover) .md-version__list{max-height:10rem;opacity:1;-webkit-transition:max-height 0ms,opacity .25s;transition:max-height 0ms,opacity .25s}.md-version:-moz-any(:focus-within,:hover) .md-version__list{max-height:10rem;opacity:1;-moz-transition:max-height 0ms,opacity .25s;transition:max-height 0ms,opacity .25s}.md-version:is(:focus-within,:hover) .md-version__list{max-height:10rem;opacity:1;transition:max-height 0ms,opacity .25s}@media (pointer:coarse){.md-version:hover .md-version__list{animation:hoverfix .25s forwards}.md-version:focus-within .md-version__list{animation:none}}.md-version__item{line-height:1.8rem}[dir=ltr] .md-version__link{padding-left:.6rem;padding-right:1.2rem}[dir=rtl] .md-version__link{padding-left:1.2rem;padding-right:.6rem}.md-version__link{cursor:pointer;display:block;outline:none;scroll-snap-align:start;transition:color .25s,background-color .25s;white-space:nowrap;width:100%}.md-version__link:-webkit-any(:focus,:hover){color:var(--md-accent-fg-color)}.md-version__link:-moz-any(:focus,:hover){color:var(--md-accent-fg-color)}.md-version__link:is(:focus,:hover){color:var(--md-accent-fg-color)}.md-version__link:focus{background-color:var(--md-default-fg-color--lightest)}:root{--md-admonition-icon--note:url('data:image/svg+xml;charset=utf-8,');--md-admonition-icon--abstract:url('data:image/svg+xml;charset=utf-8,');--md-admonition-icon--info:url('data:image/svg+xml;charset=utf-8,');--md-admonition-icon--tip:url('data:image/svg+xml;charset=utf-8,');--md-admonition-icon--success:url('data:image/svg+xml;charset=utf-8,');--md-admonition-icon--question:url('data:image/svg+xml;charset=utf-8,');--md-admonition-icon--warning:url('data:image/svg+xml;charset=utf-8,');--md-admonition-icon--failure:url('data:image/svg+xml;charset=utf-8,');--md-admonition-icon--danger:url('data:image/svg+xml;charset=utf-8,');--md-admonition-icon--bug:url('data:image/svg+xml;charset=utf-8,');--md-admonition-icon--example:url('data:image/svg+xml;charset=utf-8,');--md-admonition-icon--quote:url('data:image/svg+xml;charset=utf-8,')}.md-typeset .admonition,.md-typeset details{background-color:var(--md-admonition-bg-color);border:.05rem solid #448aff;border-radius:.2rem;box-shadow:var(--md-shadow-z1);color:var(--md-admonition-fg-color);display:flow-root;font-size:.64rem;margin:1.5625em 0;padding:0 .6rem;page-break-inside:avoid}@media print{.md-typeset .admonition,.md-typeset details{box-shadow:none}}.md-typeset .admonition>*,.md-typeset details>*{box-sizing:border-box}.md-typeset .admonition :-webkit-any(.admonition,details),.md-typeset details :-webkit-any(.admonition,details){margin-bottom:1em;margin-top:1em}.md-typeset .admonition :-moz-any(.admonition,details),.md-typeset details :-moz-any(.admonition,details){margin-bottom:1em;margin-top:1em}.md-typeset .admonition :is(.admonition,details),.md-typeset details :is(.admonition,details){margin-bottom:1em;margin-top:1em}.md-typeset .admonition .md-typeset__scrollwrap,.md-typeset details .md-typeset__scrollwrap{margin:1em -.6rem}.md-typeset .admonition .md-typeset__table,.md-typeset details .md-typeset__table{padding:0 .6rem}.md-typeset .admonition>.tabbed-set:only-child,.md-typeset details>.tabbed-set:only-child{margin-top:0}html .md-typeset .admonition>:last-child,html .md-typeset details>:last-child{margin-bottom:.6rem}[dir=ltr] .md-typeset .admonition-title,[dir=ltr] .md-typeset summary{padding-left:2rem;padding-right:.6rem}[dir=rtl] .md-typeset .admonition-title,[dir=rtl] .md-typeset summary{padding-left:.6rem;padding-right:2rem}[dir=ltr] .md-typeset .admonition-title,[dir=ltr] .md-typeset summary{border-left-width:.2rem}[dir=rtl] .md-typeset .admonition-title,[dir=rtl] .md-typeset summary{border-right-width:.2rem}[dir=ltr] .md-typeset .admonition-title,[dir=ltr] .md-typeset summary{border-top-left-radius:.1rem}[dir=ltr] .md-typeset .admonition-title,[dir=ltr] .md-typeset summary,[dir=rtl] .md-typeset .admonition-title,[dir=rtl] .md-typeset summary{border-top-right-radius:.1rem}[dir=rtl] .md-typeset .admonition-title,[dir=rtl] .md-typeset summary{border-top-left-radius:.1rem}.md-typeset .admonition-title,.md-typeset summary{background-color:rgba(68,138,255,.1);border:none;font-weight:700;margin:0 -.6rem;padding-bottom:.4rem;padding-top:.4rem;position:relative}html .md-typeset .admonition-title:last-child,html .md-typeset summary:last-child{margin-bottom:0}[dir=ltr] .md-typeset .admonition-title:before,[dir=ltr] .md-typeset summary:before{left:.6rem}[dir=rtl] .md-typeset .admonition-title:before,[dir=rtl] .md-typeset summary:before{right:.6rem}.md-typeset .admonition-title:before,.md-typeset summary:before{background-color:#448aff;content:"";height:1rem;-webkit-mask-image:var(--md-admonition-icon--note);mask-image:var(--md-admonition-icon--note);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;position:absolute;top:.625em;width:1rem}.md-typeset .admonition-title code,.md-typeset summary code{box-shadow:0 0 0 .05rem var(--md-default-fg-color--lightest)}.md-typeset :-webkit-any(.admonition,details):-webkit-any(.note){border-color:#448aff}.md-typeset :-moz-any(.admonition,details):-moz-any(.note){border-color:#448aff}.md-typeset :is(.admonition,details):is(.note){border-color:#448aff}.md-typeset :-webkit-any(.note)>:-webkit-any(.admonition-title,summary){background-color:rgba(68,138,255,.1)}.md-typeset :-moz-any(.note)>:-moz-any(.admonition-title,summary){background-color:rgba(68,138,255,.1)}.md-typeset :is(.note)>:is(.admonition-title,summary){background-color:rgba(68,138,255,.1)}.md-typeset :-webkit-any(.note)>:-webkit-any(.admonition-title,summary):before{background-color:#448aff;-webkit-mask-image:var(--md-admonition-icon--note);mask-image:var(--md-admonition-icon--note)}.md-typeset :-moz-any(.note)>:-moz-any(.admonition-title,summary):before{background-color:#448aff;mask-image:var(--md-admonition-icon--note)}.md-typeset :is(.note)>:is(.admonition-title,summary):before{background-color:#448aff;-webkit-mask-image:var(--md-admonition-icon--note);mask-image:var(--md-admonition-icon--note)}.md-typeset :-webkit-any(.note)>:-webkit-any(.admonition-title,summary):after{color:#448aff}.md-typeset :-moz-any(.note)>:-moz-any(.admonition-title,summary):after{color:#448aff}.md-typeset :is(.note)>:is(.admonition-title,summary):after{color:#448aff}.md-typeset :-webkit-any(.admonition,details):-webkit-any(.abstract,.summary,.tldr){border-color:#00b0ff}.md-typeset :-moz-any(.admonition,details):-moz-any(.abstract,.summary,.tldr){border-color:#00b0ff}.md-typeset :is(.admonition,details):is(.abstract,.summary,.tldr){border-color:#00b0ff}.md-typeset :-webkit-any(.abstract,.summary,.tldr)>:-webkit-any(.admonition-title,summary){background-color:rgba(0,176,255,.1)}.md-typeset :-moz-any(.abstract,.summary,.tldr)>:-moz-any(.admonition-title,summary){background-color:rgba(0,176,255,.1)}.md-typeset :is(.abstract,.summary,.tldr)>:is(.admonition-title,summary){background-color:rgba(0,176,255,.1)}.md-typeset :-webkit-any(.abstract,.summary,.tldr)>:-webkit-any(.admonition-title,summary):before{background-color:#00b0ff;-webkit-mask-image:var(--md-admonition-icon--abstract);mask-image:var(--md-admonition-icon--abstract)}.md-typeset :-moz-any(.abstract,.summary,.tldr)>:-moz-any(.admonition-title,summary):before{background-color:#00b0ff;mask-image:var(--md-admonition-icon--abstract)}.md-typeset :is(.abstract,.summary,.tldr)>:is(.admonition-title,summary):before{background-color:#00b0ff;-webkit-mask-image:var(--md-admonition-icon--abstract);mask-image:var(--md-admonition-icon--abstract)}.md-typeset :-webkit-any(.abstract,.summary,.tldr)>:-webkit-any(.admonition-title,summary):after{color:#00b0ff}.md-typeset :-moz-any(.abstract,.summary,.tldr)>:-moz-any(.admonition-title,summary):after{color:#00b0ff}.md-typeset :is(.abstract,.summary,.tldr)>:is(.admonition-title,summary):after{color:#00b0ff}.md-typeset :-webkit-any(.admonition,details):-webkit-any(.info,.todo){border-color:#00b8d4}.md-typeset :-moz-any(.admonition,details):-moz-any(.info,.todo){border-color:#00b8d4}.md-typeset :is(.admonition,details):is(.info,.todo){border-color:#00b8d4}.md-typeset :-webkit-any(.info,.todo)>:-webkit-any(.admonition-title,summary){background-color:rgba(0,184,212,.1)}.md-typeset :-moz-any(.info,.todo)>:-moz-any(.admonition-title,summary){background-color:rgba(0,184,212,.1)}.md-typeset :is(.info,.todo)>:is(.admonition-title,summary){background-color:rgba(0,184,212,.1)}.md-typeset :-webkit-any(.info,.todo)>:-webkit-any(.admonition-title,summary):before{background-color:#00b8d4;-webkit-mask-image:var(--md-admonition-icon--info);mask-image:var(--md-admonition-icon--info)}.md-typeset :-moz-any(.info,.todo)>:-moz-any(.admonition-title,summary):before{background-color:#00b8d4;mask-image:var(--md-admonition-icon--info)}.md-typeset :is(.info,.todo)>:is(.admonition-title,summary):before{background-color:#00b8d4;-webkit-mask-image:var(--md-admonition-icon--info);mask-image:var(--md-admonition-icon--info)}.md-typeset :-webkit-any(.info,.todo)>:-webkit-any(.admonition-title,summary):after{color:#00b8d4}.md-typeset :-moz-any(.info,.todo)>:-moz-any(.admonition-title,summary):after{color:#00b8d4}.md-typeset :is(.info,.todo)>:is(.admonition-title,summary):after{color:#00b8d4}.md-typeset :-webkit-any(.admonition,details):-webkit-any(.tip,.hint,.important){border-color:#00bfa5}.md-typeset :-moz-any(.admonition,details):-moz-any(.tip,.hint,.important){border-color:#00bfa5}.md-typeset :is(.admonition,details):is(.tip,.hint,.important){border-color:#00bfa5}.md-typeset :-webkit-any(.tip,.hint,.important)>:-webkit-any(.admonition-title,summary){background-color:rgba(0,191,165,.1)}.md-typeset :-moz-any(.tip,.hint,.important)>:-moz-any(.admonition-title,summary){background-color:rgba(0,191,165,.1)}.md-typeset :is(.tip,.hint,.important)>:is(.admonition-title,summary){background-color:rgba(0,191,165,.1)}.md-typeset :-webkit-any(.tip,.hint,.important)>:-webkit-any(.admonition-title,summary):before{background-color:#00bfa5;-webkit-mask-image:var(--md-admonition-icon--tip);mask-image:var(--md-admonition-icon--tip)}.md-typeset :-moz-any(.tip,.hint,.important)>:-moz-any(.admonition-title,summary):before{background-color:#00bfa5;mask-image:var(--md-admonition-icon--tip)}.md-typeset :is(.tip,.hint,.important)>:is(.admonition-title,summary):before{background-color:#00bfa5;-webkit-mask-image:var(--md-admonition-icon--tip);mask-image:var(--md-admonition-icon--tip)}.md-typeset :-webkit-any(.tip,.hint,.important)>:-webkit-any(.admonition-title,summary):after{color:#00bfa5}.md-typeset :-moz-any(.tip,.hint,.important)>:-moz-any(.admonition-title,summary):after{color:#00bfa5}.md-typeset :is(.tip,.hint,.important)>:is(.admonition-title,summary):after{color:#00bfa5}.md-typeset :-webkit-any(.admonition,details):-webkit-any(.success,.check,.done){border-color:#00c853}.md-typeset :-moz-any(.admonition,details):-moz-any(.success,.check,.done){border-color:#00c853}.md-typeset :is(.admonition,details):is(.success,.check,.done){border-color:#00c853}.md-typeset :-webkit-any(.success,.check,.done)>:-webkit-any(.admonition-title,summary){background-color:rgba(0,200,83,.1)}.md-typeset :-moz-any(.success,.check,.done)>:-moz-any(.admonition-title,summary){background-color:rgba(0,200,83,.1)}.md-typeset :is(.success,.check,.done)>:is(.admonition-title,summary){background-color:rgba(0,200,83,.1)}.md-typeset :-webkit-any(.success,.check,.done)>:-webkit-any(.admonition-title,summary):before{background-color:#00c853;-webkit-mask-image:var(--md-admonition-icon--success);mask-image:var(--md-admonition-icon--success)}.md-typeset :-moz-any(.success,.check,.done)>:-moz-any(.admonition-title,summary):before{background-color:#00c853;mask-image:var(--md-admonition-icon--success)}.md-typeset :is(.success,.check,.done)>:is(.admonition-title,summary):before{background-color:#00c853;-webkit-mask-image:var(--md-admonition-icon--success);mask-image:var(--md-admonition-icon--success)}.md-typeset :-webkit-any(.success,.check,.done)>:-webkit-any(.admonition-title,summary):after{color:#00c853}.md-typeset :-moz-any(.success,.check,.done)>:-moz-any(.admonition-title,summary):after{color:#00c853}.md-typeset :is(.success,.check,.done)>:is(.admonition-title,summary):after{color:#00c853}.md-typeset :-webkit-any(.admonition,details):-webkit-any(.question,.help,.faq){border-color:#64dd17}.md-typeset :-moz-any(.admonition,details):-moz-any(.question,.help,.faq){border-color:#64dd17}.md-typeset :is(.admonition,details):is(.question,.help,.faq){border-color:#64dd17}.md-typeset :-webkit-any(.question,.help,.faq)>:-webkit-any(.admonition-title,summary){background-color:rgba(100,221,23,.1)}.md-typeset :-moz-any(.question,.help,.faq)>:-moz-any(.admonition-title,summary){background-color:rgba(100,221,23,.1)}.md-typeset :is(.question,.help,.faq)>:is(.admonition-title,summary){background-color:rgba(100,221,23,.1)}.md-typeset :-webkit-any(.question,.help,.faq)>:-webkit-any(.admonition-title,summary):before{background-color:#64dd17;-webkit-mask-image:var(--md-admonition-icon--question);mask-image:var(--md-admonition-icon--question)}.md-typeset :-moz-any(.question,.help,.faq)>:-moz-any(.admonition-title,summary):before{background-color:#64dd17;mask-image:var(--md-admonition-icon--question)}.md-typeset :is(.question,.help,.faq)>:is(.admonition-title,summary):before{background-color:#64dd17;-webkit-mask-image:var(--md-admonition-icon--question);mask-image:var(--md-admonition-icon--question)}.md-typeset :-webkit-any(.question,.help,.faq)>:-webkit-any(.admonition-title,summary):after{color:#64dd17}.md-typeset :-moz-any(.question,.help,.faq)>:-moz-any(.admonition-title,summary):after{color:#64dd17}.md-typeset :is(.question,.help,.faq)>:is(.admonition-title,summary):after{color:#64dd17}.md-typeset :-webkit-any(.admonition,details):-webkit-any(.warning,.caution,.attention){border-color:#ff9100}.md-typeset :-moz-any(.admonition,details):-moz-any(.warning,.caution,.attention){border-color:#ff9100}.md-typeset :is(.admonition,details):is(.warning,.caution,.attention){border-color:#ff9100}.md-typeset :-webkit-any(.warning,.caution,.attention)>:-webkit-any(.admonition-title,summary){background-color:rgba(255,145,0,.1)}.md-typeset :-moz-any(.warning,.caution,.attention)>:-moz-any(.admonition-title,summary){background-color:rgba(255,145,0,.1)}.md-typeset :is(.warning,.caution,.attention)>:is(.admonition-title,summary){background-color:rgba(255,145,0,.1)}.md-typeset :-webkit-any(.warning,.caution,.attention)>:-webkit-any(.admonition-title,summary):before{background-color:#ff9100;-webkit-mask-image:var(--md-admonition-icon--warning);mask-image:var(--md-admonition-icon--warning)}.md-typeset :-moz-any(.warning,.caution,.attention)>:-moz-any(.admonition-title,summary):before{background-color:#ff9100;mask-image:var(--md-admonition-icon--warning)}.md-typeset :is(.warning,.caution,.attention)>:is(.admonition-title,summary):before{background-color:#ff9100;-webkit-mask-image:var(--md-admonition-icon--warning);mask-image:var(--md-admonition-icon--warning)}.md-typeset :-webkit-any(.warning,.caution,.attention)>:-webkit-any(.admonition-title,summary):after{color:#ff9100}.md-typeset :-moz-any(.warning,.caution,.attention)>:-moz-any(.admonition-title,summary):after{color:#ff9100}.md-typeset :is(.warning,.caution,.attention)>:is(.admonition-title,summary):after{color:#ff9100}.md-typeset :-webkit-any(.admonition,details):-webkit-any(.failure,.fail,.missing){border-color:#ff5252}.md-typeset :-moz-any(.admonition,details):-moz-any(.failure,.fail,.missing){border-color:#ff5252}.md-typeset :is(.admonition,details):is(.failure,.fail,.missing){border-color:#ff5252}.md-typeset :-webkit-any(.failure,.fail,.missing)>:-webkit-any(.admonition-title,summary){background-color:rgba(255,82,82,.1)}.md-typeset :-moz-any(.failure,.fail,.missing)>:-moz-any(.admonition-title,summary){background-color:rgba(255,82,82,.1)}.md-typeset :is(.failure,.fail,.missing)>:is(.admonition-title,summary){background-color:rgba(255,82,82,.1)}.md-typeset :-webkit-any(.failure,.fail,.missing)>:-webkit-any(.admonition-title,summary):before{background-color:#ff5252;-webkit-mask-image:var(--md-admonition-icon--failure);mask-image:var(--md-admonition-icon--failure)}.md-typeset :-moz-any(.failure,.fail,.missing)>:-moz-any(.admonition-title,summary):before{background-color:#ff5252;mask-image:var(--md-admonition-icon--failure)}.md-typeset :is(.failure,.fail,.missing)>:is(.admonition-title,summary):before{background-color:#ff5252;-webkit-mask-image:var(--md-admonition-icon--failure);mask-image:var(--md-admonition-icon--failure)}.md-typeset :-webkit-any(.failure,.fail,.missing)>:-webkit-any(.admonition-title,summary):after{color:#ff5252}.md-typeset :-moz-any(.failure,.fail,.missing)>:-moz-any(.admonition-title,summary):after{color:#ff5252}.md-typeset :is(.failure,.fail,.missing)>:is(.admonition-title,summary):after{color:#ff5252}.md-typeset :-webkit-any(.admonition,details):-webkit-any(.danger,.error){border-color:#ff1744}.md-typeset :-moz-any(.admonition,details):-moz-any(.danger,.error){border-color:#ff1744}.md-typeset :is(.admonition,details):is(.danger,.error){border-color:#ff1744}.md-typeset :-webkit-any(.danger,.error)>:-webkit-any(.admonition-title,summary){background-color:rgba(255,23,68,.1)}.md-typeset :-moz-any(.danger,.error)>:-moz-any(.admonition-title,summary){background-color:rgba(255,23,68,.1)}.md-typeset :is(.danger,.error)>:is(.admonition-title,summary){background-color:rgba(255,23,68,.1)}.md-typeset :-webkit-any(.danger,.error)>:-webkit-any(.admonition-title,summary):before{background-color:#ff1744;-webkit-mask-image:var(--md-admonition-icon--danger);mask-image:var(--md-admonition-icon--danger)}.md-typeset :-moz-any(.danger,.error)>:-moz-any(.admonition-title,summary):before{background-color:#ff1744;mask-image:var(--md-admonition-icon--danger)}.md-typeset :is(.danger,.error)>:is(.admonition-title,summary):before{background-color:#ff1744;-webkit-mask-image:var(--md-admonition-icon--danger);mask-image:var(--md-admonition-icon--danger)}.md-typeset :-webkit-any(.danger,.error)>:-webkit-any(.admonition-title,summary):after{color:#ff1744}.md-typeset :-moz-any(.danger,.error)>:-moz-any(.admonition-title,summary):after{color:#ff1744}.md-typeset :is(.danger,.error)>:is(.admonition-title,summary):after{color:#ff1744}.md-typeset :-webkit-any(.admonition,details):-webkit-any(.bug){border-color:#f50057}.md-typeset :-moz-any(.admonition,details):-moz-any(.bug){border-color:#f50057}.md-typeset :is(.admonition,details):is(.bug){border-color:#f50057}.md-typeset :-webkit-any(.bug)>:-webkit-any(.admonition-title,summary){background-color:rgba(245,0,87,.1)}.md-typeset :-moz-any(.bug)>:-moz-any(.admonition-title,summary){background-color:rgba(245,0,87,.1)}.md-typeset :is(.bug)>:is(.admonition-title,summary){background-color:rgba(245,0,87,.1)}.md-typeset :-webkit-any(.bug)>:-webkit-any(.admonition-title,summary):before{background-color:#f50057;-webkit-mask-image:var(--md-admonition-icon--bug);mask-image:var(--md-admonition-icon--bug)}.md-typeset :-moz-any(.bug)>:-moz-any(.admonition-title,summary):before{background-color:#f50057;mask-image:var(--md-admonition-icon--bug)}.md-typeset :is(.bug)>:is(.admonition-title,summary):before{background-color:#f50057;-webkit-mask-image:var(--md-admonition-icon--bug);mask-image:var(--md-admonition-icon--bug)}.md-typeset :-webkit-any(.bug)>:-webkit-any(.admonition-title,summary):after{color:#f50057}.md-typeset :-moz-any(.bug)>:-moz-any(.admonition-title,summary):after{color:#f50057}.md-typeset :is(.bug)>:is(.admonition-title,summary):after{color:#f50057}.md-typeset :-webkit-any(.admonition,details):-webkit-any(.example){border-color:#7c4dff}.md-typeset :-moz-any(.admonition,details):-moz-any(.example){border-color:#7c4dff}.md-typeset :is(.admonition,details):is(.example){border-color:#7c4dff}.md-typeset :-webkit-any(.example)>:-webkit-any(.admonition-title,summary){background-color:rgba(124,77,255,.1)}.md-typeset :-moz-any(.example)>:-moz-any(.admonition-title,summary){background-color:rgba(124,77,255,.1)}.md-typeset :is(.example)>:is(.admonition-title,summary){background-color:rgba(124,77,255,.1)}.md-typeset :-webkit-any(.example)>:-webkit-any(.admonition-title,summary):before{background-color:#7c4dff;-webkit-mask-image:var(--md-admonition-icon--example);mask-image:var(--md-admonition-icon--example)}.md-typeset :-moz-any(.example)>:-moz-any(.admonition-title,summary):before{background-color:#7c4dff;mask-image:var(--md-admonition-icon--example)}.md-typeset :is(.example)>:is(.admonition-title,summary):before{background-color:#7c4dff;-webkit-mask-image:var(--md-admonition-icon--example);mask-image:var(--md-admonition-icon--example)}.md-typeset :-webkit-any(.example)>:-webkit-any(.admonition-title,summary):after{color:#7c4dff}.md-typeset :-moz-any(.example)>:-moz-any(.admonition-title,summary):after{color:#7c4dff}.md-typeset :is(.example)>:is(.admonition-title,summary):after{color:#7c4dff}.md-typeset :-webkit-any(.admonition,details):-webkit-any(.quote,.cite){border-color:#9e9e9e}.md-typeset :-moz-any(.admonition,details):-moz-any(.quote,.cite){border-color:#9e9e9e}.md-typeset :is(.admonition,details):is(.quote,.cite){border-color:#9e9e9e}.md-typeset :-webkit-any(.quote,.cite)>:-webkit-any(.admonition-title,summary){background-color:hsla(0,0%,62%,.1)}.md-typeset :-moz-any(.quote,.cite)>:-moz-any(.admonition-title,summary){background-color:hsla(0,0%,62%,.1)}.md-typeset :is(.quote,.cite)>:is(.admonition-title,summary){background-color:hsla(0,0%,62%,.1)}.md-typeset :-webkit-any(.quote,.cite)>:-webkit-any(.admonition-title,summary):before{background-color:#9e9e9e;-webkit-mask-image:var(--md-admonition-icon--quote);mask-image:var(--md-admonition-icon--quote)}.md-typeset :-moz-any(.quote,.cite)>:-moz-any(.admonition-title,summary):before{background-color:#9e9e9e;mask-image:var(--md-admonition-icon--quote)}.md-typeset :is(.quote,.cite)>:is(.admonition-title,summary):before{background-color:#9e9e9e;-webkit-mask-image:var(--md-admonition-icon--quote);mask-image:var(--md-admonition-icon--quote)}.md-typeset :-webkit-any(.quote,.cite)>:-webkit-any(.admonition-title,summary):after{color:#9e9e9e}.md-typeset :-moz-any(.quote,.cite)>:-moz-any(.admonition-title,summary):after{color:#9e9e9e}.md-typeset :is(.quote,.cite)>:is(.admonition-title,summary):after{color:#9e9e9e}:root{--md-footnotes-icon:url('data:image/svg+xml;charset=utf-8,')}.md-typeset .footnote{color:var(--md-default-fg-color--light);font-size:.64rem}[dir=ltr] .md-typeset .footnote>ol{margin-left:0}[dir=rtl] .md-typeset .footnote>ol{margin-right:0}.md-typeset .footnote>ol>li{transition:color 125ms}.md-typeset .footnote>ol>li:target{color:var(--md-default-fg-color)}.md-typeset .footnote>ol>li:focus-within .footnote-backref{opacity:1;transform:translateX(0);transition:none}.md-typeset .footnote>ol>li:-webkit-any(:hover,:target) .footnote-backref{opacity:1;transform:translateX(0)}.md-typeset .footnote>ol>li:-moz-any(:hover,:target) .footnote-backref{opacity:1;transform:translateX(0)}.md-typeset .footnote>ol>li:is(:hover,:target) .footnote-backref{opacity:1;transform:translateX(0)}.md-typeset .footnote>ol>li>:first-child{margin-top:0}.md-typeset .footnote-ref{font-size:.75em;font-weight:700}html .md-typeset .footnote-ref{outline-offset:.1rem}.md-typeset [id^="fnref:"]:target>.footnote-ref{outline:auto}.md-typeset .footnote-backref{color:var(--md-typeset-a-color);display:inline-block;font-size:0;opacity:0;transform:translateX(.25rem);transition:color .25s,transform .25s .25s,opacity 125ms .25s;vertical-align:text-bottom}@media print{.md-typeset .footnote-backref{color:var(--md-typeset-a-color);opacity:1;transform:translateX(0)}}[dir=rtl] .md-typeset .footnote-backref{transform:translateX(-.25rem)}.md-typeset .footnote-backref:hover{color:var(--md-accent-fg-color)}.md-typeset .footnote-backref:before{background-color:currentcolor;content:"";display:inline-block;height:.8rem;-webkit-mask-image:var(--md-footnotes-icon);mask-image:var(--md-footnotes-icon);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:.8rem}[dir=rtl] .md-typeset .footnote-backref:before svg{transform:scaleX(-1)}[dir=ltr] .md-typeset .headerlink{margin-left:.5rem}[dir=rtl] .md-typeset .headerlink{margin-right:.5rem}.md-typeset .headerlink{color:var(--md-default-fg-color--lighter);display:inline-block;opacity:0;transition:color .25s,opacity 125ms}@media print{.md-typeset .headerlink{display:none}}.md-typeset .headerlink:focus,.md-typeset :-webkit-any(:hover,:target)>.headerlink{opacity:1;-webkit-transition:color .25s,opacity 125ms;transition:color .25s,opacity 125ms}.md-typeset .headerlink:focus,.md-typeset :-moz-any(:hover,:target)>.headerlink{opacity:1;-moz-transition:color .25s,opacity 125ms;transition:color .25s,opacity 125ms}.md-typeset .headerlink:focus,.md-typeset :is(:hover,:target)>.headerlink{opacity:1;transition:color .25s,opacity 125ms}.md-typeset .headerlink:-webkit-any(:focus,:hover),.md-typeset :target>.headerlink{color:var(--md-accent-fg-color)}.md-typeset .headerlink:-moz-any(:focus,:hover),.md-typeset :target>.headerlink{color:var(--md-accent-fg-color)}.md-typeset .headerlink:is(:focus,:hover),.md-typeset :target>.headerlink{color:var(--md-accent-fg-color)}.md-typeset :target{--md-scroll-margin:3.6rem;--md-scroll-offset:0rem;scroll-margin-top:calc(var(--md-scroll-margin) - var(--md-scroll-offset))}@media screen and (min-width:76.25em){.md-header--lifted~.md-container .md-typeset :target{--md-scroll-margin:6rem}}.md-typeset :-webkit-any(h1,h2,h3):target{--md-scroll-offset:0.2rem}.md-typeset :-moz-any(h1,h2,h3):target{--md-scroll-offset:0.2rem}.md-typeset :is(h1,h2,h3):target{--md-scroll-offset:0.2rem}.md-typeset h4:target{--md-scroll-offset:0.15rem}.md-typeset div.arithmatex{overflow:auto}@media screen and (max-width:44.9375em){.md-typeset div.arithmatex{margin:0 -.8rem}}.md-typeset div.arithmatex>*{margin-left:auto!important;margin-right:auto!important;padding:0 .8rem;touch-action:auto;width:-moz-min-content;width:min-content}.md-typeset div.arithmatex>* mjx-container{margin:0!important}.md-typeset :-webkit-any(del,ins,.comment).critic{-webkit-box-decoration-break:clone;box-decoration-break:clone}.md-typeset :-moz-any(del,ins,.comment).critic{box-decoration-break:clone}.md-typeset :is(del,ins,.comment).critic{-webkit-box-decoration-break:clone;box-decoration-break:clone}.md-typeset del.critic{background-color:var(--md-typeset-del-color)}.md-typeset ins.critic{background-color:var(--md-typeset-ins-color)}.md-typeset .critic.comment{color:var(--md-code-hl-comment-color)}.md-typeset .critic.comment:before{content:"/* "}.md-typeset .critic.comment:after{content:" */"}.md-typeset .critic.block{box-shadow:none;display:block;margin:1em 0;overflow:auto;padding-left:.8rem;padding-right:.8rem}.md-typeset .critic.block>:first-child{margin-top:.5em}.md-typeset .critic.block>:last-child{margin-bottom:.5em}:root{--md-details-icon:url('data:image/svg+xml;charset=utf-8,')}.md-typeset details{display:flow-root;overflow:visible;padding-top:0}.md-typeset details[open]>summary:after{transform:rotate(90deg)}.md-typeset details:not([open]){box-shadow:none;padding-bottom:0}.md-typeset details:not([open])>summary{border-radius:.1rem}[dir=ltr] .md-typeset summary{padding-right:1.8rem}[dir=rtl] .md-typeset summary{padding-left:1.8rem}[dir=ltr] .md-typeset summary{border-top-left-radius:.1rem}[dir=ltr] .md-typeset summary,[dir=rtl] .md-typeset summary{border-top-right-radius:.1rem}[dir=rtl] .md-typeset summary{border-top-left-radius:.1rem}.md-typeset summary{cursor:pointer;display:block;min-height:1rem}.md-typeset summary.focus-visible{outline-color:var(--md-accent-fg-color);outline-offset:.2rem}.md-typeset summary:not(.focus-visible){-webkit-tap-highlight-color:transparent;outline:none}[dir=ltr] .md-typeset summary:after{right:.4rem}[dir=rtl] .md-typeset summary:after{left:.4rem}.md-typeset summary:after{background-color:currentcolor;content:"";height:1rem;-webkit-mask-image:var(--md-details-icon);mask-image:var(--md-details-icon);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;position:absolute;top:.625em;transform:rotate(0deg);transition:transform .25s;width:1rem}[dir=rtl] .md-typeset summary:after{transform:rotate(180deg)}.md-typeset summary::marker{display:none}.md-typeset summary::-webkit-details-marker{display:none}.md-typeset :-webkit-any(.emojione,.twemoji,.gemoji){display:inline-flex;height:1.125em;vertical-align:text-top}.md-typeset :-moz-any(.emojione,.twemoji,.gemoji){display:inline-flex;height:1.125em;vertical-align:text-top}.md-typeset :is(.emojione,.twemoji,.gemoji){display:inline-flex;height:1.125em;vertical-align:text-top}.md-typeset :-webkit-any(.emojione,.twemoji,.gemoji) svg{fill:currentcolor;max-height:100%;width:1.125em}.md-typeset :-moz-any(.emojione,.twemoji,.gemoji) svg{fill:currentcolor;max-height:100%;width:1.125em}.md-typeset :is(.emojione,.twemoji,.gemoji) svg{fill:currentcolor;max-height:100%;width:1.125em}.highlight :-webkit-any(.o,.ow){color:var(--md-code-hl-operator-color)}.highlight :-moz-any(.o,.ow){color:var(--md-code-hl-operator-color)}.highlight :is(.o,.ow){color:var(--md-code-hl-operator-color)}.highlight .p{color:var(--md-code-hl-punctuation-color)}.highlight :-webkit-any(.cpf,.l,.s,.sb,.sc,.s2,.si,.s1,.ss){color:var(--md-code-hl-string-color)}.highlight :-moz-any(.cpf,.l,.s,.sb,.sc,.s2,.si,.s1,.ss){color:var(--md-code-hl-string-color)}.highlight :is(.cpf,.l,.s,.sb,.sc,.s2,.si,.s1,.ss){color:var(--md-code-hl-string-color)}.highlight :-webkit-any(.cp,.se,.sh,.sr,.sx){color:var(--md-code-hl-special-color)}.highlight :-moz-any(.cp,.se,.sh,.sr,.sx){color:var(--md-code-hl-special-color)}.highlight :is(.cp,.se,.sh,.sr,.sx){color:var(--md-code-hl-special-color)}.highlight :-webkit-any(.m,.mb,.mf,.mh,.mi,.il,.mo){color:var(--md-code-hl-number-color)}.highlight :-moz-any(.m,.mb,.mf,.mh,.mi,.il,.mo){color:var(--md-code-hl-number-color)}.highlight :is(.m,.mb,.mf,.mh,.mi,.il,.mo){color:var(--md-code-hl-number-color)}.highlight :-webkit-any(.k,.kd,.kn,.kp,.kr,.kt){color:var(--md-code-hl-keyword-color)}.highlight :-moz-any(.k,.kd,.kn,.kp,.kr,.kt){color:var(--md-code-hl-keyword-color)}.highlight :is(.k,.kd,.kn,.kp,.kr,.kt){color:var(--md-code-hl-keyword-color)}.highlight :-webkit-any(.n){color:var(--md-code-hl-name-color)}.highlight :-moz-any(.n){color:var(--md-code-hl-name-color)}.highlight :is(.n){color:var(--md-code-hl-name-color)}.highlight :-webkit-any(.kc,.no,.nb,.bp){color:var(--md-code-hl-constant-color)}.highlight :-moz-any(.kc,.no,.nb,.bp){color:var(--md-code-hl-constant-color)}.highlight :is(.kc,.no,.nb,.bp){color:var(--md-code-hl-constant-color)}.highlight :-webkit-any(.nc,.ne,.nf,.nn){color:var(--md-code-hl-function-color)}.highlight :-moz-any(.nc,.ne,.nf,.nn){color:var(--md-code-hl-function-color)}.highlight :is(.nc,.ne,.nf,.nn){color:var(--md-code-hl-function-color)}.highlight :-webkit-any(.nd,.ni,.nl,.nt){color:var(--md-code-hl-keyword-color)}.highlight :-moz-any(.nd,.ni,.nl,.nt){color:var(--md-code-hl-keyword-color)}.highlight :is(.nd,.ni,.nl,.nt){color:var(--md-code-hl-keyword-color)}.highlight :-webkit-any(.c,.cm,.c1,.ch,.cs,.sd){color:var(--md-code-hl-comment-color)}.highlight :-moz-any(.c,.cm,.c1,.ch,.cs,.sd){color:var(--md-code-hl-comment-color)}.highlight :is(.c,.cm,.c1,.ch,.cs,.sd){color:var(--md-code-hl-comment-color)}.highlight :-webkit-any(.na,.nv,.vc,.vg,.vi){color:var(--md-code-hl-variable-color)}.highlight :-moz-any(.na,.nv,.vc,.vg,.vi){color:var(--md-code-hl-variable-color)}.highlight :is(.na,.nv,.vc,.vg,.vi){color:var(--md-code-hl-variable-color)}.highlight :-webkit-any(.ge,.gr,.gh,.go,.gp,.gs,.gu,.gt){color:var(--md-code-hl-generic-color)}.highlight :-moz-any(.ge,.gr,.gh,.go,.gp,.gs,.gu,.gt){color:var(--md-code-hl-generic-color)}.highlight :is(.ge,.gr,.gh,.go,.gp,.gs,.gu,.gt){color:var(--md-code-hl-generic-color)}.highlight :-webkit-any(.gd,.gi){border-radius:.1rem;margin:0 -.125em;padding:0 .125em}.highlight :-moz-any(.gd,.gi){border-radius:.1rem;margin:0 -.125em;padding:0 .125em}.highlight :is(.gd,.gi){border-radius:.1rem;margin:0 -.125em;padding:0 .125em}.highlight .gd{background-color:var(--md-typeset-del-color)}.highlight .gi{background-color:var(--md-typeset-ins-color)}.highlight .hll{background-color:var(--md-code-hl-color);display:block;margin:0 -1.1764705882em;padding:0 1.1764705882em}.highlight span.filename{background-color:var(--md-code-bg-color);border-bottom:.05rem solid var(--md-default-fg-color--lightest);border-top-left-radius:.1rem;border-top-right-radius:.1rem;display:flow-root;font-size:.85em;font-weight:700;margin-top:1em;padding:.6617647059em 1.1764705882em;position:relative}.highlight span.filename+pre{margin-top:0}.highlight span.filename+pre>code{border-top-left-radius:0;border-top-right-radius:0}.highlight [data-linenos]:before{background-color:var(--md-code-bg-color);box-shadow:-.05rem 0 var(--md-default-fg-color--lightest) inset;color:var(--md-default-fg-color--light);content:attr(data-linenos);float:left;left:-1.1764705882em;margin-left:-1.1764705882em;margin-right:1.1764705882em;padding-left:1.1764705882em;position:sticky;-webkit-user-select:none;-moz-user-select:none;user-select:none;z-index:3}.highlight code a[id]{position:absolute;visibility:hidden}.highlight code[data-md-copying] .hll{display:contents}.highlight code[data-md-copying] .md-annotation{display:none}.highlighttable{display:flow-root}.highlighttable :-webkit-any(tbody,td){display:block;padding:0}.highlighttable :-moz-any(tbody,td){display:block;padding:0}.highlighttable :is(tbody,td){display:block;padding:0}.highlighttable tr{display:flex}.highlighttable pre{margin:0}.highlighttable th.filename{flex-grow:1;padding:0;text-align:left}.highlighttable th.filename span.filename{margin-top:0}.highlighttable .linenos{background-color:var(--md-code-bg-color);border-bottom-left-radius:.1rem;border-top-left-radius:.1rem;font-size:.85em;padding:.7720588235em 0 .7720588235em 1.1764705882em;-webkit-user-select:none;-moz-user-select:none;user-select:none}.highlighttable .linenodiv{box-shadow:-.05rem 0 var(--md-default-fg-color--lightest) inset;padding-right:.5882352941em}.highlighttable .linenodiv pre{color:var(--md-default-fg-color--light);text-align:right}.highlighttable .code{flex:1;min-width:0}.linenodiv a{color:inherit}.md-typeset .highlighttable{direction:ltr;margin:1em 0}.md-typeset .highlighttable>tbody>tr>.code>div>pre>code{border-bottom-left-radius:0;border-top-left-radius:0}.md-typeset :-webkit-any(.highlight,.highlighttable,.literal-block-wrapper,div[class^=highlight-],.results-prefix)+.result{border:.05rem solid var(--md-code-bg-color);border-bottom-left-radius:.1rem;border-bottom-right-radius:.1rem;border-top-width:.1rem;margin-top:-1.125em;overflow:visible;padding:0 1em}.md-typeset :-moz-any(.highlight,.highlighttable,.literal-block-wrapper,div[class^=highlight-],.results-prefix)+.result{border:.05rem solid var(--md-code-bg-color);border-bottom-left-radius:.1rem;border-bottom-right-radius:.1rem;border-top-width:.1rem;margin-top:-1.125em;overflow:visible;padding:0 1em}.md-typeset :is(.highlight,.highlighttable,.literal-block-wrapper,div[class^=highlight-],.results-prefix)+.result{border:.05rem solid var(--md-code-bg-color);border-bottom-left-radius:.1rem;border-bottom-right-radius:.1rem;border-top-width:.1rem;margin-top:-1.125em;overflow:visible;padding:0 1em}.md-typeset :-webkit-any(.highlight,.highlighttable,.literal-block-wrapper,div[class^=highlight-],.results-prefix)+.result:after{clear:both;content:"";display:block}.md-typeset :-moz-any(.highlight,.highlighttable,.literal-block-wrapper,div[class^=highlight-],.results-prefix)+.result:after{clear:both;content:"";display:block}.md-typeset :is(.highlight,.highlighttable,.literal-block-wrapper,div[class^=highlight-],.results-prefix)+.result:after{clear:both;content:"";display:block}.md-typeset .results .results-prefix+.result{margin-top:0}.md-typeset .results .results-prefix{background-color:var(--md-code-bg-color);font-size:.85em;font-weight:700;margin-top:-1em;padding:.6617647059em 1.1764705882em}@media screen and (max-width:44.9375em){.md-content__inner>.highlight{margin:1em -.8rem}.md-content__inner>.highlight>.filename,.md-content__inner>.highlight>.highlighttable>tbody>tr>.code>div>pre>code,.md-content__inner>.highlight>.highlighttable>tbody>tr>.filename span.filename,.md-content__inner>.highlight>.highlighttable>tbody>tr>.linenos,.md-content__inner>.highlight>pre>code{border-radius:0}.md-content__inner>.highlight+.result{border-left-width:0;border-radius:0;border-right-width:0;margin-left:-.8rem;margin-right:-.8rem}}.md-typeset .keys kbd:-webkit-any(:before,:after){-moz-osx-font-smoothing:initial;-webkit-font-smoothing:initial;color:inherit;margin:0;position:relative}.md-typeset .keys kbd:-moz-any(:before,:after){-moz-osx-font-smoothing:initial;-webkit-font-smoothing:initial;color:inherit;margin:0;position:relative}.md-typeset .keys kbd:is(:before,:after){-moz-osx-font-smoothing:initial;-webkit-font-smoothing:initial;color:inherit;margin:0;position:relative}.md-typeset .keys span{color:var(--md-default-fg-color--light);padding:0 .2em}.md-typeset .keys .key-alt:before,.md-typeset .keys .key-left-alt:before,.md-typeset .keys .key-right-alt:before{content:"⎇";padding-right:.4em}.md-typeset .keys .key-command:before,.md-typeset .keys .key-left-command:before,.md-typeset .keys .key-right-command:before{content:"⌘";padding-right:.4em}.md-typeset .keys .key-control:before,.md-typeset .keys .key-left-control:before,.md-typeset .keys .key-right-control:before{content:"⌃";padding-right:.4em}.md-typeset .keys .key-left-meta:before,.md-typeset .keys .key-meta:before,.md-typeset .keys .key-right-meta:before{content:"◆";padding-right:.4em}.md-typeset .keys .key-left-option:before,.md-typeset .keys .key-option:before,.md-typeset .keys .key-right-option:before{content:"⌥";padding-right:.4em}.md-typeset .keys .key-left-shift:before,.md-typeset .keys .key-right-shift:before,.md-typeset .keys .key-shift:before{content:"⇧";padding-right:.4em}.md-typeset .keys .key-left-super:before,.md-typeset .keys .key-right-super:before,.md-typeset .keys .key-super:before{content:"❖";padding-right:.4em}.md-typeset .keys .key-left-windows:before,.md-typeset .keys .key-right-windows:before,.md-typeset .keys .key-windows:before{content:"⊞";padding-right:.4em}.md-typeset .keys .key-arrow-down:before{content:"↓";padding-right:.4em}.md-typeset .keys .key-arrow-left:before{content:"←";padding-right:.4em}.md-typeset .keys .key-arrow-right:before{content:"→";padding-right:.4em}.md-typeset .keys .key-arrow-up:before{content:"↑";padding-right:.4em}.md-typeset .keys .key-backspace:before{content:"⌫";padding-right:.4em}.md-typeset .keys .key-backtab:before{content:"⇤";padding-right:.4em}.md-typeset .keys .key-caps-lock:before{content:"⇪";padding-right:.4em}.md-typeset .keys .key-clear:before{content:"⌧";padding-right:.4em}.md-typeset .keys .key-context-menu:before{content:"☰";padding-right:.4em}.md-typeset .keys .key-delete:before{content:"⌦";padding-right:.4em}.md-typeset .keys .key-eject:before{content:"⏏";padding-right:.4em}.md-typeset .keys .key-end:before{content:"⤓";padding-right:.4em}.md-typeset .keys .key-escape:before{content:"⎋";padding-right:.4em}.md-typeset .keys .key-home:before{content:"⤒";padding-right:.4em}.md-typeset .keys .key-insert:before{content:"⎀";padding-right:.4em}.md-typeset .keys .key-page-down:before{content:"⇟";padding-right:.4em}.md-typeset .keys .key-page-up:before{content:"⇞";padding-right:.4em}.md-typeset .keys .key-print-screen:before{content:"⎙";padding-right:.4em}.md-typeset .keys .key-tab:after{content:"⇥";padding-left:.4em}.md-typeset .keys .key-num-enter:after{content:"⌤";padding-left:.4em}.md-typeset .keys .key-enter:after{content:"⏎";padding-left:.4em}:root{--md-tabbed-icon--prev:url('data:image/svg+xml;charset=utf-8,');--md-tabbed-icon--next:url('data:image/svg+xml;charset=utf-8,')}.md-typeset .tabbed-set{border-radius:.1rem;display:flex;flex-flow:column wrap;margin:1em 0;position:relative}.md-typeset .tabbed-set>input{height:0;opacity:0;position:absolute;width:0}.md-typeset .tabbed-set>input:target{--md-scroll-offset:0.625em}.md-typeset .tabbed-labels{-ms-overflow-style:none;box-shadow:0 -.05rem var(--md-default-fg-color--lightest) inset;display:flex;max-width:100%;overflow:auto;scrollbar-width:none}@media print{.md-typeset .tabbed-labels{display:contents}}@media screen{.js .md-typeset .tabbed-labels{position:relative}.js .md-typeset .tabbed-labels:before{background:var(--md-accent-fg-color);bottom:0;content:"";display:block;height:2px;left:0;position:absolute;transform:translateX(var(--md-indicator-x));transition:width 225ms,transform .25s;transition-timing-function:cubic-bezier(.4,0,.2,1);width:var(--md-indicator-width)}}.md-typeset .tabbed-labels::-webkit-scrollbar{display:none}.md-typeset .tabbed-labels>label{border-bottom:.1rem solid transparent;border-radius:.1rem .1rem 0 0;color:var(--md-default-fg-color--light);cursor:pointer;flex-shrink:0;font-size:.64rem;font-weight:700;padding:.78125em 1.25em .625em;scroll-margin-inline-start:1rem;transition:background-color .25s,color .25s;white-space:nowrap;width:auto}@media print{.md-typeset .tabbed-labels>label:first-child{order:1}.md-typeset .tabbed-labels>label:nth-child(2){order:2}.md-typeset .tabbed-labels>label:nth-child(3){order:3}.md-typeset .tabbed-labels>label:nth-child(4){order:4}.md-typeset .tabbed-labels>label:nth-child(5){order:5}.md-typeset .tabbed-labels>label:nth-child(6){order:6}.md-typeset .tabbed-labels>label:nth-child(7){order:7}.md-typeset .tabbed-labels>label:nth-child(8){order:8}.md-typeset .tabbed-labels>label:nth-child(9){order:9}.md-typeset .tabbed-labels>label:nth-child(10){order:10}.md-typeset .tabbed-labels>label:nth-child(11){order:11}.md-typeset .tabbed-labels>label:nth-child(12){order:12}.md-typeset .tabbed-labels>label:nth-child(13){order:13}.md-typeset .tabbed-labels>label:nth-child(14){order:14}.md-typeset .tabbed-labels>label:nth-child(15){order:15}.md-typeset .tabbed-labels>label:nth-child(16){order:16}.md-typeset .tabbed-labels>label:nth-child(17){order:17}.md-typeset .tabbed-labels>label:nth-child(18){order:18}.md-typeset .tabbed-labels>label:nth-child(19){order:19}.md-typeset .tabbed-labels>label:nth-child(20){order:20}}.md-typeset .tabbed-labels>label:hover{color:var(--md-accent-fg-color)}.md-typeset .tabbed-content{width:100%}@media print{.md-typeset .tabbed-content{display:contents}}.md-typeset .tabbed-block{display:none}@media print{.md-typeset .tabbed-block{display:block}.md-typeset .tabbed-block:first-child{order:1}.md-typeset .tabbed-block:nth-child(2){order:2}.md-typeset .tabbed-block:nth-child(3){order:3}.md-typeset .tabbed-block:nth-child(4){order:4}.md-typeset .tabbed-block:nth-child(5){order:5}.md-typeset .tabbed-block:nth-child(6){order:6}.md-typeset .tabbed-block:nth-child(7){order:7}.md-typeset .tabbed-block:nth-child(8){order:8}.md-typeset .tabbed-block:nth-child(9){order:9}.md-typeset .tabbed-block:nth-child(10){order:10}.md-typeset .tabbed-block:nth-child(11){order:11}.md-typeset .tabbed-block:nth-child(12){order:12}.md-typeset .tabbed-block:nth-child(13){order:13}.md-typeset .tabbed-block:nth-child(14){order:14}.md-typeset .tabbed-block:nth-child(15){order:15}.md-typeset .tabbed-block:nth-child(16){order:16}.md-typeset .tabbed-block:nth-child(17){order:17}.md-typeset .tabbed-block:nth-child(18){order:18}.md-typeset .tabbed-block:nth-child(19){order:19}.md-typeset .tabbed-block:nth-child(20){order:20}}.md-typeset .tabbed-block>.highlight:first-child>pre,.md-typeset .tabbed-block>pre:first-child{margin:0}.md-typeset .tabbed-block>.highlight:first-child>pre>code,.md-typeset .tabbed-block>pre:first-child>code{border-top-left-radius:0;border-top-right-radius:0}.md-typeset .tabbed-block>.highlight:first-child>.filename{border-top-left-radius:0;border-top-right-radius:0;margin:0}.md-typeset .tabbed-block>.highlight:first-child>.highlighttable{margin:0}.md-typeset .tabbed-block>.highlight:first-child>.highlighttable>tbody>tr>.filename span.filename,.md-typeset .tabbed-block>.highlight:first-child>.highlighttable>tbody>tr>.linenos{border-top-left-radius:0;border-top-right-radius:0;margin:0}.md-typeset .tabbed-block>.highlight:first-child>.highlighttable>tbody>tr>.code>div>pre>code{border-top-left-radius:0;border-top-right-radius:0}.md-typeset .tabbed-block>.highlight:first-child+.result{margin-top:-.125em}.md-typeset .tabbed-block>.tabbed-set{margin:0}.md-typeset .tabbed-button{align-self:center;border-radius:100%;color:var(--md-default-fg-color--light);cursor:pointer;display:block;height:.9rem;margin-top:.1rem;pointer-events:auto;transition:background-color .25s;width:.9rem}.md-typeset .tabbed-button:hover{background-color:var(--md-accent-fg-color--transparent);color:var(--md-accent-fg-color)}.md-typeset .tabbed-button:after{background-color:currentcolor;content:"";display:block;height:100%;-webkit-mask-image:var(--md-tabbed-icon--prev);mask-image:var(--md-tabbed-icon--prev);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;transition:background-color .25s,transform .25s;width:100%}.md-typeset .tabbed-control{background:linear-gradient(to right,var(--md-default-bg-color) 60%,transparent);display:flex;height:1.9rem;justify-content:start;pointer-events:none;position:absolute;transition:opacity 125ms;width:1.2rem}[dir=rtl] .md-typeset .tabbed-control{transform:rotate(180deg)}.md-typeset .tabbed-control[hidden]{opacity:0}.md-typeset .tabbed-control--next{background:linear-gradient(to left,var(--md-default-bg-color) 60%,transparent);justify-content:end;right:0}.md-typeset .tabbed-control--next .tabbed-button:after{-webkit-mask-image:var(--md-tabbed-icon--next);mask-image:var(--md-tabbed-icon--next)}@media screen and (max-width:44.9375em){[dir=ltr] .md-content__inner>.tabbed-set .tabbed-labels{padding-left:.8rem}[dir=rtl] .md-content__inner>.tabbed-set .tabbed-labels{padding-right:.8rem}.md-content__inner>.tabbed-set .tabbed-labels{margin:0 -.8rem;max-width:100vw;scroll-padding-inline-start:.8rem}[dir=ltr] .md-content__inner>.tabbed-set .tabbed-labels:after{padding-right:.8rem}[dir=rtl] .md-content__inner>.tabbed-set .tabbed-labels:after{padding-left:.8rem}.md-content__inner>.tabbed-set .tabbed-labels:after{content:""}[dir=ltr] .md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--prev{margin-left:-.8rem}[dir=rtl] .md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--prev{margin-right:-.8rem}[dir=ltr] .md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--prev{padding-left:.8rem}[dir=rtl] .md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--prev{padding-right:.8rem}.md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--prev{width:2rem}[dir=ltr] .md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--next{margin-right:-.8rem}[dir=rtl] .md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--next{margin-left:-.8rem}[dir=ltr] .md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--next{padding-right:.8rem}[dir=rtl] .md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--next{padding-left:.8rem}.md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--next{width:2rem}}@media screen{.md-typeset .tabbed-set>input:first-child:checked~.tabbed-labels>:first-child,.md-typeset .tabbed-set>input:nth-child(10):checked~.tabbed-labels>:nth-child(10),.md-typeset .tabbed-set>input:nth-child(11):checked~.tabbed-labels>:nth-child(11),.md-typeset .tabbed-set>input:nth-child(12):checked~.tabbed-labels>:nth-child(12),.md-typeset .tabbed-set>input:nth-child(13):checked~.tabbed-labels>:nth-child(13),.md-typeset .tabbed-set>input:nth-child(14):checked~.tabbed-labels>:nth-child(14),.md-typeset .tabbed-set>input:nth-child(15):checked~.tabbed-labels>:nth-child(15),.md-typeset .tabbed-set>input:nth-child(16):checked~.tabbed-labels>:nth-child(16),.md-typeset .tabbed-set>input:nth-child(17):checked~.tabbed-labels>:nth-child(17),.md-typeset .tabbed-set>input:nth-child(18):checked~.tabbed-labels>:nth-child(18),.md-typeset .tabbed-set>input:nth-child(19):checked~.tabbed-labels>:nth-child(19),.md-typeset .tabbed-set>input:nth-child(2):checked~.tabbed-labels>:nth-child(2),.md-typeset .tabbed-set>input:nth-child(20):checked~.tabbed-labels>:nth-child(20),.md-typeset .tabbed-set>input:nth-child(3):checked~.tabbed-labels>:nth-child(3),.md-typeset .tabbed-set>input:nth-child(4):checked~.tabbed-labels>:nth-child(4),.md-typeset .tabbed-set>input:nth-child(5):checked~.tabbed-labels>:nth-child(5),.md-typeset .tabbed-set>input:nth-child(6):checked~.tabbed-labels>:nth-child(6),.md-typeset .tabbed-set>input:nth-child(7):checked~.tabbed-labels>:nth-child(7),.md-typeset .tabbed-set>input:nth-child(8):checked~.tabbed-labels>:nth-child(8),.md-typeset .tabbed-set>input:nth-child(9):checked~.tabbed-labels>:nth-child(9){color:var(--md-accent-fg-color)}.md-typeset .no-js .tabbed-set>input:first-child:checked~.tabbed-labels>:first-child,.md-typeset .no-js .tabbed-set>input:nth-child(10):checked~.tabbed-labels>:nth-child(10),.md-typeset .no-js .tabbed-set>input:nth-child(11):checked~.tabbed-labels>:nth-child(11),.md-typeset .no-js .tabbed-set>input:nth-child(12):checked~.tabbed-labels>:nth-child(12),.md-typeset .no-js .tabbed-set>input:nth-child(13):checked~.tabbed-labels>:nth-child(13),.md-typeset .no-js .tabbed-set>input:nth-child(14):checked~.tabbed-labels>:nth-child(14),.md-typeset .no-js .tabbed-set>input:nth-child(15):checked~.tabbed-labels>:nth-child(15),.md-typeset .no-js .tabbed-set>input:nth-child(16):checked~.tabbed-labels>:nth-child(16),.md-typeset .no-js .tabbed-set>input:nth-child(17):checked~.tabbed-labels>:nth-child(17),.md-typeset .no-js .tabbed-set>input:nth-child(18):checked~.tabbed-labels>:nth-child(18),.md-typeset .no-js .tabbed-set>input:nth-child(19):checked~.tabbed-labels>:nth-child(19),.md-typeset .no-js .tabbed-set>input:nth-child(2):checked~.tabbed-labels>:nth-child(2),.md-typeset .no-js .tabbed-set>input:nth-child(20):checked~.tabbed-labels>:nth-child(20),.md-typeset .no-js .tabbed-set>input:nth-child(3):checked~.tabbed-labels>:nth-child(3),.md-typeset .no-js .tabbed-set>input:nth-child(4):checked~.tabbed-labels>:nth-child(4),.md-typeset .no-js .tabbed-set>input:nth-child(5):checked~.tabbed-labels>:nth-child(5),.md-typeset .no-js .tabbed-set>input:nth-child(6):checked~.tabbed-labels>:nth-child(6),.md-typeset .no-js .tabbed-set>input:nth-child(7):checked~.tabbed-labels>:nth-child(7),.md-typeset .no-js .tabbed-set>input:nth-child(8):checked~.tabbed-labels>:nth-child(8),.md-typeset .no-js .tabbed-set>input:nth-child(9):checked~.tabbed-labels>:nth-child(9),.no-js .md-typeset .tabbed-set>input:first-child:checked~.tabbed-labels>:first-child,.no-js .md-typeset .tabbed-set>input:nth-child(10):checked~.tabbed-labels>:nth-child(10),.no-js .md-typeset .tabbed-set>input:nth-child(11):checked~.tabbed-labels>:nth-child(11),.no-js .md-typeset .tabbed-set>input:nth-child(12):checked~.tabbed-labels>:nth-child(12),.no-js .md-typeset .tabbed-set>input:nth-child(13):checked~.tabbed-labels>:nth-child(13),.no-js .md-typeset .tabbed-set>input:nth-child(14):checked~.tabbed-labels>:nth-child(14),.no-js .md-typeset .tabbed-set>input:nth-child(15):checked~.tabbed-labels>:nth-child(15),.no-js .md-typeset .tabbed-set>input:nth-child(16):checked~.tabbed-labels>:nth-child(16),.no-js .md-typeset .tabbed-set>input:nth-child(17):checked~.tabbed-labels>:nth-child(17),.no-js .md-typeset .tabbed-set>input:nth-child(18):checked~.tabbed-labels>:nth-child(18),.no-js .md-typeset .tabbed-set>input:nth-child(19):checked~.tabbed-labels>:nth-child(19),.no-js .md-typeset .tabbed-set>input:nth-child(2):checked~.tabbed-labels>:nth-child(2),.no-js .md-typeset .tabbed-set>input:nth-child(20):checked~.tabbed-labels>:nth-child(20),.no-js .md-typeset .tabbed-set>input:nth-child(3):checked~.tabbed-labels>:nth-child(3),.no-js .md-typeset .tabbed-set>input:nth-child(4):checked~.tabbed-labels>:nth-child(4),.no-js .md-typeset .tabbed-set>input:nth-child(5):checked~.tabbed-labels>:nth-child(5),.no-js .md-typeset .tabbed-set>input:nth-child(6):checked~.tabbed-labels>:nth-child(6),.no-js .md-typeset .tabbed-set>input:nth-child(7):checked~.tabbed-labels>:nth-child(7),.no-js .md-typeset .tabbed-set>input:nth-child(8):checked~.tabbed-labels>:nth-child(8),.no-js .md-typeset .tabbed-set>input:nth-child(9):checked~.tabbed-labels>:nth-child(9){border-color:var(--md-accent-fg-color)}}.md-typeset .tabbed-set>input:first-child.focus-visible~.tabbed-labels>:first-child,.md-typeset .tabbed-set>input:nth-child(10).focus-visible~.tabbed-labels>:nth-child(10),.md-typeset .tabbed-set>input:nth-child(11).focus-visible~.tabbed-labels>:nth-child(11),.md-typeset .tabbed-set>input:nth-child(12).focus-visible~.tabbed-labels>:nth-child(12),.md-typeset .tabbed-set>input:nth-child(13).focus-visible~.tabbed-labels>:nth-child(13),.md-typeset .tabbed-set>input:nth-child(14).focus-visible~.tabbed-labels>:nth-child(14),.md-typeset .tabbed-set>input:nth-child(15).focus-visible~.tabbed-labels>:nth-child(15),.md-typeset .tabbed-set>input:nth-child(16).focus-visible~.tabbed-labels>:nth-child(16),.md-typeset .tabbed-set>input:nth-child(17).focus-visible~.tabbed-labels>:nth-child(17),.md-typeset .tabbed-set>input:nth-child(18).focus-visible~.tabbed-labels>:nth-child(18),.md-typeset .tabbed-set>input:nth-child(19).focus-visible~.tabbed-labels>:nth-child(19),.md-typeset .tabbed-set>input:nth-child(2).focus-visible~.tabbed-labels>:nth-child(2),.md-typeset .tabbed-set>input:nth-child(20).focus-visible~.tabbed-labels>:nth-child(20),.md-typeset .tabbed-set>input:nth-child(3).focus-visible~.tabbed-labels>:nth-child(3),.md-typeset .tabbed-set>input:nth-child(4).focus-visible~.tabbed-labels>:nth-child(4),.md-typeset .tabbed-set>input:nth-child(5).focus-visible~.tabbed-labels>:nth-child(5),.md-typeset .tabbed-set>input:nth-child(6).focus-visible~.tabbed-labels>:nth-child(6),.md-typeset .tabbed-set>input:nth-child(7).focus-visible~.tabbed-labels>:nth-child(7),.md-typeset .tabbed-set>input:nth-child(8).focus-visible~.tabbed-labels>:nth-child(8),.md-typeset .tabbed-set>input:nth-child(9).focus-visible~.tabbed-labels>:nth-child(9){background-color:var(--md-accent-fg-color--transparent)}.md-typeset .tabbed-set>input:first-child:checked~.tabbed-content>:first-child,.md-typeset .tabbed-set>input:nth-child(10):checked~.tabbed-content>:nth-child(10),.md-typeset .tabbed-set>input:nth-child(11):checked~.tabbed-content>:nth-child(11),.md-typeset .tabbed-set>input:nth-child(12):checked~.tabbed-content>:nth-child(12),.md-typeset .tabbed-set>input:nth-child(13):checked~.tabbed-content>:nth-child(13),.md-typeset .tabbed-set>input:nth-child(14):checked~.tabbed-content>:nth-child(14),.md-typeset .tabbed-set>input:nth-child(15):checked~.tabbed-content>:nth-child(15),.md-typeset .tabbed-set>input:nth-child(16):checked~.tabbed-content>:nth-child(16),.md-typeset .tabbed-set>input:nth-child(17):checked~.tabbed-content>:nth-child(17),.md-typeset .tabbed-set>input:nth-child(18):checked~.tabbed-content>:nth-child(18),.md-typeset .tabbed-set>input:nth-child(19):checked~.tabbed-content>:nth-child(19),.md-typeset .tabbed-set>input:nth-child(2):checked~.tabbed-content>:nth-child(2),.md-typeset .tabbed-set>input:nth-child(20):checked~.tabbed-content>:nth-child(20),.md-typeset .tabbed-set>input:nth-child(3):checked~.tabbed-content>:nth-child(3),.md-typeset .tabbed-set>input:nth-child(4):checked~.tabbed-content>:nth-child(4),.md-typeset .tabbed-set>input:nth-child(5):checked~.tabbed-content>:nth-child(5),.md-typeset .tabbed-set>input:nth-child(6):checked~.tabbed-content>:nth-child(6),.md-typeset .tabbed-set>input:nth-child(7):checked~.tabbed-content>:nth-child(7),.md-typeset .tabbed-set>input:nth-child(8):checked~.tabbed-content>:nth-child(8),.md-typeset .tabbed-set>input:nth-child(9):checked~.tabbed-content>:nth-child(9){display:block}:root{--md-tasklist-icon:url('data:image/svg+xml;charset=utf-8,');--md-tasklist-icon--checked:url('data:image/svg+xml;charset=utf-8,')}.md-typeset .task-list-item{list-style-type:none;position:relative}[dir=ltr] .md-typeset .task-list-item [type=checkbox]{left:-2em}[dir=rtl] .md-typeset .task-list-item [type=checkbox]{right:-2em}.md-typeset .task-list-item [type=checkbox]{position:absolute;top:.45em}.md-typeset .task-list-control [type=checkbox]{opacity:0;z-index:-1}[dir=ltr] .md-typeset .task-list-indicator:before{left:-1.5em}[dir=rtl] .md-typeset .task-list-indicator:before{right:-1.5em}.md-typeset .task-list-indicator:before{background-color:var(--md-default-fg-color--lightest);content:"";height:1.25em;-webkit-mask-image:var(--md-tasklist-icon);mask-image:var(--md-tasklist-icon);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;position:absolute;top:.15em;width:1.25em}.md-typeset [type=checkbox]:checked+.task-list-indicator:before{background-color:#00e676;-webkit-mask-image:var(--md-tasklist-icon--checked);mask-image:var(--md-tasklist-icon--checked)}.rst-versions{font-family:var(--md-text-font-family)}.rst-versions.rst-badge{bottom:inherit!important;font-size:.85rem;height:auto;top:50px}:root>*{--md-mermaid-font-family:var(--md-text-font-family),sans-serif;--md-mermaid-edge-color:var(--md-code-fg-color);--md-mermaid-node-bg-color:var(--md-accent-fg-color--transparent);--md-mermaid-node-fg-color:var(--md-accent-fg-color);--md-mermaid-label-bg-color:var(--md-default-bg-color);--md-mermaid-label-fg-color:var(--md-code-fg-color)}.mermaid{line-height:normal;margin:1em 0}:root>*{--md-graphviz-edge-color:var(--md-default-fg-color);--md-graphviz-node-bg-color:var(--md-accent-fg-color--transparent);--md-graphviz-node-fg-color:var(--md-accent-fg-color);--md-graphviz-label-bg-color:var(--md-default-bg-color);--md-graphviz-label-fg-color:var(--md-code-fg-color);--md-graphviz-a-hover-color:var(--md-primary-fg-color)}.graphviz{margin:1em 0}.graphviz a:hover>text{fill:var(--md-graphviz-hover-color)!important}@media screen and (min-width:45em){[dir=ltr] .md-typeset .inline{float:left}[dir=rtl] .md-typeset .inline{float:right}[dir=ltr] .md-typeset .inline{margin-right:.8rem}[dir=rtl] .md-typeset .inline{margin-left:.8rem}.md-typeset .inline{margin-bottom:.8rem;margin-top:0;width:11.7rem}[dir=ltr] .md-typeset .inline.end{float:right}[dir=rtl] .md-typeset .inline.end{float:left}[dir=ltr] .md-typeset .inline.end{margin-left:.8rem;margin-right:0}[dir=rtl] .md-typeset .inline.end{margin-left:0;margin-right:.8rem}}.md-typeset .align-left{text-align:left}.md-typeset .align-right{text-align:right}.md-typeset .align-center{clear:both;text-align:center}.md-typeset .align-top{vertical-align:top}.md-typeset .align-middle{vertical-align:middle}.md-typeset .align-bottom{vertical-align:bottom}.md-typeset .figure.align-left,.md-typeset figure.align-left,.md-typeset img.align-left,.md-typeset object.align-left,.md-typeset table.align-left{margin-right:auto}.md-typeset .figure.align-center,.md-typeset figure.align-center,.md-typeset img.align-center,.md-typeset object.align-center,.md-typeset table.align-center{margin-left:auto;margin-right:auto}.md-typeset .figure.align-right,.md-typeset figure.align-right,.md-typeset img.align-right,.md-typeset object.align-right,.md-typeset table.align-right{margin-left:auto}.md-typeset .figure.align-center,.md-typeset .figure.align-right,.md-typeset figure.align-center,.md-typeset figure.align-right,.md-typeset img.align-center,.md-typeset img.align-right,.md-typeset object.align-center,.md-typeset object.align-right{display:block}.md-typeset .figure.align-left,.md-typeset .figure.align-right,.md-typeset figure.align-left,.md-typeset figure.align-right,.md-typeset table.align-center,.md-typeset table.align-left,.md-typeset table.align-right{text-align:inherit}.md-typeset .rubric{font-weight:700}.md-typeset .viewcode-block .viewcode-back{float:right}.md-typeset .versionmodified{font-style:italic}.md-typeset div.line-block{display:block}.md-typeset div.line-block div.line-block{margin-left:1.5em}.md-typeset :-webkit-any(dl.objdesc,dl.api-field)>dt{background:var(--md-code-bg-color);font-family:var(--md-code-font-family)}.md-typeset :-moz-any(dl.objdesc,dl.api-field)>dt{background:var(--md-code-bg-color);font-family:var(--md-code-font-family)}.md-typeset :is(dl.objdesc,dl.api-field)>dt{background:var(--md-code-bg-color);font-family:var(--md-code-font-family)}.md-typeset :-webkit-any(dl.objdesc,dl.api-field)>dt code{border-radius:0;padding:0}.md-typeset :-moz-any(dl.objdesc,dl.api-field)>dt code{border-radius:0;padding:0}.md-typeset :is(dl.objdesc,dl.api-field)>dt code{border-radius:0;padding:0}.md-typeset :-webkit-any(dl.objdesc,dl.api-field)>dt .sig-name:not(.sig-name-nonprimary){color:var(--md-code-hl-name-color);font-weight:700;padding:0}.md-typeset :-moz-any(dl.objdesc,dl.api-field)>dt .sig-name:not(.sig-name-nonprimary){color:var(--md-code-hl-name-color);font-weight:700;padding:0}.md-typeset :is(dl.objdesc,dl.api-field)>dt .sig-name:not(.sig-name-nonprimary){color:var(--md-code-hl-name-color);font-weight:700;padding:0}.md-typeset :-webkit-any(dl.objdesc,dl.api-field)>dt .sig-param{font-style:normal}.md-typeset :-moz-any(dl.objdesc,dl.api-field)>dt .sig-param{font-style:normal}.md-typeset :is(dl.objdesc,dl.api-field)>dt .sig-param{font-style:normal}.md-typeset :-webkit-any(dl.objdesc,dl.api-field)>dt .sig-param .n:not(.desctype){color:var(--md-default-fg-color--light)}.md-typeset :-moz-any(dl.objdesc,dl.api-field)>dt .sig-param .n:not(.desctype){color:var(--md-default-fg-color--light)}.md-typeset :is(dl.objdesc,dl.api-field)>dt .sig-param .n:not(.desctype){color:var(--md-default-fg-color--light)}.md-typeset :-webkit-any(dl.objdesc,dl.api-field)>dt .sig-param a.reference .n:not(.desctype):hover{color:var(--md-accent-fg-color)}.md-typeset :-moz-any(dl.objdesc,dl.api-field)>dt .sig-param a.reference .n:not(.desctype):hover{color:var(--md-accent-fg-color)}.md-typeset :is(dl.objdesc,dl.api-field)>dt .sig-param a.reference .n:not(.desctype):hover{color:var(--md-accent-fg-color)}.md-typeset :-webkit-any(dl.objdesc,dl.api-field)>dt.sig-wrap .sig-param-decl:before{content:"\a     ";white-space:pre}.md-typeset :-moz-any(dl.objdesc,dl.api-field)>dt.sig-wrap .sig-param-decl:before{content:"\a     ";white-space:pre}.md-typeset :is(dl.objdesc,dl.api-field)>dt.sig-wrap .sig-param-decl:before{content:"\a     ";white-space:pre}.md-typeset :-webkit-any(dl.objdesc,dl.api-field)>dt.sig-wrap .sig-paren~.sig-paren:before{content:"\a";white-space:pre}.md-typeset :-moz-any(dl.objdesc,dl.api-field)>dt.sig-wrap .sig-paren~.sig-paren:before{content:"\a";white-space:pre}.md-typeset :is(dl.objdesc,dl.api-field)>dt.sig-wrap .sig-paren~.sig-paren:before{content:"\a";white-space:pre}.md-typeset dl.objdesc>dd>dl.field-list>dt>.colon{display:none}.md-typeset .sig-inline a.reference.sig-name,.md-typeset .sig-inline a.reference:not(.desctype)>.n,.md-typeset .sig-inline a.reference>.sig-name,.md-typeset :-webkit-any(dl.objdesc,dl.api-field)>dt a.reference.sig-name,.md-typeset :-webkit-any(dl.objdesc,dl.api-field)>dt a.reference:not(.desctype)>.n,.md-typeset :-webkit-any(dl.objdesc,dl.api-field)>dt a.reference>.sig-name{color:var(--md-typeset-a-color)}.md-typeset .sig-inline a.reference.sig-name,.md-typeset .sig-inline a.reference:not(.desctype)>.n,.md-typeset .sig-inline a.reference>.sig-name,.md-typeset :-moz-any(dl.objdesc,dl.api-field)>dt a.reference.sig-name,.md-typeset :-moz-any(dl.objdesc,dl.api-field)>dt a.reference:not(.desctype)>.n,.md-typeset :-moz-any(dl.objdesc,dl.api-field)>dt a.reference>.sig-name{color:var(--md-typeset-a-color)}.md-typeset .sig-inline a.reference.sig-name,.md-typeset .sig-inline a.reference:not(.desctype)>.n,.md-typeset .sig-inline a.reference>.sig-name,.md-typeset :is(dl.objdesc,dl.api-field)>dt a.reference.sig-name,.md-typeset :is(dl.objdesc,dl.api-field)>dt a.reference:not(.desctype)>.n,.md-typeset :is(dl.objdesc,dl.api-field)>dt a.reference>.sig-name{color:var(--md-typeset-a-color)}.md-typeset .sig-inline a.reference.sig-name:hover,.md-typeset .sig-inline a.reference:not(.desctype)>.n:hover,.md-typeset .sig-inline a.reference>.sig-name:hover,.md-typeset :-webkit-any(dl.objdesc,dl.api-field)>dt a.reference.sig-name:hover,.md-typeset :-webkit-any(dl.objdesc,dl.api-field)>dt a.reference:not(.desctype)>.n:hover,.md-typeset :-webkit-any(dl.objdesc,dl.api-field)>dt a.reference>.sig-name:hover{color:var(--md-accent-fg-color)}.md-typeset .sig-inline a.reference.sig-name:hover,.md-typeset .sig-inline a.reference:not(.desctype)>.n:hover,.md-typeset .sig-inline a.reference>.sig-name:hover,.md-typeset :-moz-any(dl.objdesc,dl.api-field)>dt a.reference.sig-name:hover,.md-typeset :-moz-any(dl.objdesc,dl.api-field)>dt a.reference:not(.desctype)>.n:hover,.md-typeset :-moz-any(dl.objdesc,dl.api-field)>dt a.reference>.sig-name:hover{color:var(--md-accent-fg-color)}.md-typeset .sig-inline a.reference.sig-name:hover,.md-typeset .sig-inline a.reference:not(.desctype)>.n:hover,.md-typeset .sig-inline a.reference>.sig-name:hover,.md-typeset :is(dl.objdesc,dl.api-field)>dt a.reference.sig-name:hover,.md-typeset :is(dl.objdesc,dl.api-field)>dt a.reference:not(.desctype)>.n:hover,.md-typeset :is(dl.objdesc,dl.api-field)>dt a.reference>.sig-name:hover{color:var(--md-accent-fg-color)}.md-typeset .sig-inline .desctype,.md-typeset .sig-inline .desctype>a.reference,.md-typeset :-webkit-any(dl.objdesc,dl.api-field)>dt .desctype,.md-typeset :-webkit-any(dl.objdesc,dl.api-field)>dt .desctype>a.reference{color:var(--md-code-hl-special-color)}.md-typeset .sig-inline .desctype,.md-typeset .sig-inline .desctype>a.reference,.md-typeset :-moz-any(dl.objdesc,dl.api-field)>dt .desctype,.md-typeset :-moz-any(dl.objdesc,dl.api-field)>dt .desctype>a.reference{color:var(--md-code-hl-special-color)}.md-typeset .sig-inline .desctype,.md-typeset .sig-inline .desctype>a.reference,.md-typeset :is(dl.objdesc,dl.api-field)>dt .desctype,.md-typeset :is(dl.objdesc,dl.api-field)>dt .desctype>a.reference{color:var(--md-code-hl-special-color)}.md-typeset .sig-inline .desctype .n,.md-typeset .sig-inline .desctype>a.reference .n,.md-typeset :-webkit-any(dl.objdesc,dl.api-field)>dt .desctype .n,.md-typeset :-webkit-any(dl.objdesc,dl.api-field)>dt .desctype>a.reference .n{color:inherit}.md-typeset .sig-inline .desctype .n,.md-typeset .sig-inline .desctype>a.reference .n,.md-typeset :-moz-any(dl.objdesc,dl.api-field)>dt .desctype .n,.md-typeset :-moz-any(dl.objdesc,dl.api-field)>dt .desctype>a.reference .n{color:inherit}.md-typeset .sig-inline .desctype .n,.md-typeset .sig-inline .desctype>a.reference .n,.md-typeset :is(dl.objdesc,dl.api-field)>dt .desctype .n,.md-typeset :is(dl.objdesc,dl.api-field)>dt .desctype>a.reference .n{color:inherit}.md-typeset .sig-inline .desctype:-webkit-any(a.reference):hover,.md-typeset .sig-inline .desctype>a.reference:hover,.md-typeset :-webkit-any(dl.objdesc,dl.api-field)>dt .desctype:-webkit-any(a.reference):hover,.md-typeset :-webkit-any(dl.objdesc,dl.api-field)>dt .desctype>a.reference:hover{color:var(--md-accent-fg-color)}.md-typeset .sig-inline .desctype:-moz-any(a.reference):hover,.md-typeset .sig-inline .desctype>a.reference:hover,.md-typeset :-moz-any(dl.objdesc,dl.api-field)>dt .desctype:-moz-any(a.reference):hover,.md-typeset :-moz-any(dl.objdesc,dl.api-field)>dt .desctype>a.reference:hover{color:var(--md-accent-fg-color)}.md-typeset .sig-inline .desctype:is(a.reference):hover,.md-typeset .sig-inline .desctype>a.reference:hover,.md-typeset :is(dl.objdesc,dl.api-field)>dt .desctype:is(a.reference):hover,.md-typeset :is(dl.objdesc,dl.api-field)>dt .desctype>a.reference:hover{color:var(--md-accent-fg-color)}.md-typeset dl.objdesc>dt{background:var(--md-code-bg-color);font-family:var(--md-code-font-family);padding-left:.5em;padding-right:.5em;padding-top:.5em}.md-typeset dl.objdesc>dt,.md-typeset dl.objdesc>dt code{font-size:.75rem}.md-typeset dl.objdesc>dt .property{color:var(--md-code-hl-keyword-color);font-style:normal;font-weight:700}.md-typeset dl.objdesc>dt .sig-prename{color:var(--md-code-hl-name-color);padding:0}.md-typeset dl.objdesc>dt .viewcode-back,.md-typeset dl.objdesc>dt .viewcode-link{float:right;text-align:right}.md-typeset dl.objdesc>dt.api-include-path,.md-typeset dl.objdesc>dt.api-include-path code{font-size:.65rem}.md-typeset dl.objdesc>dt:first-child{padding-top:.5em}.md-typeset dl.objdesc>dt:last-of-type{padding-bottom:.5em}.md-typeset dl.objdesc>dd dl.field-list>dt{font-size:1em;font-weight:700;margin-bottom:1em}.md-typeset dl.objdesc>dd dd.noindent{margin-left:0}.md-typeset dl.api-field>dt{display:table}.md-typeset dl.api-field>dt a.headerlink{left:.5em;margin-left:0;position:relative;width:0}.md-typeset dl.api-field>dt,.md-typeset dl.api-field>dt code{font-size:.65rem}.md-typeset dl.api-field>dt.api-parameter-kind{float:right;font-family:var(--md-text-font-family)}.md-typeset dl.api-field>dt.api-parameter-kind:before{content:"["}.md-typeset dl.api-field>dt.api-parameter-kind:after{content:"]"}.md-typeset dl.objdesc.summary>dd,.md-typeset dl.objdesc.summary>dd>p:first-child{margin-top:0}.md-typeset .sig-inline:-webkit-any(.c-texpr,.cpp-texpr){background-color:unset;font-family:unset}.md-typeset .sig-inline:-moz-any(.c-texpr,.cpp-texpr){background-color:unset;font-family:unset}.md-typeset .sig-inline:is(.c-texpr,.cpp-texpr){background-color:unset;font-family:unset}.md-nav__link{white-space:nowrap}:root>*{--objinfo-icon-fg-alias:#e65100;--objinfo-icon-fg-default:#424242;--objinfo-icon-fg-data:#1565c0;--objinfo-icon-fg-procedure:#6a1b9a;--objinfo-icon-fg-sub-data:#2e7d32;--objinfo-icon-bg-default:var(--md-default-bg-color)}@media screen{[data-md-color-scheme=slate]{--objinfo-icon-fg-alias:#ffb74d;--objinfo-icon-fg-default:#e0e0e0;--objinfo-icon-fg-data:#64b5f6;--objinfo-icon-fg-procedure:#ce93d8;--objinfo-icon-fg-sub-data:#81c784}}.objinfo-icon{background-color:var(--objinfo-icon-bg-default);border:1px solid var(--objinfo-icon-fg-default);border-radius:2px;color:var(--objinfo-icon-fg-default);display:inline-block;flex-shrink:0;font-family:var(--md-text-font-family);font-weight:500;height:16px;line-height:16px;margin-right:8px;text-align:center;vertical-align:middle;width:16px}.objinfo-icon__alias{background-color:var(--objinfo-icon-fg-alias);border:1px solid var(--objinfo-icon-fg-alias);color:var(--objinfo-icon-bg-default)}.objinfo-icon__procedure{background-color:var(--objinfo-icon-fg-procedure);border:1px solid var(--objinfo-icon-fg-procedure);color:var(--objinfo-icon-bg-default)}.objinfo-icon__data{background-color:var(--objinfo-icon-fg-data);border:1px solid var(--objinfo-icon-fg-data);color:var(--objinfo-icon-bg-default)}.objinfo-icon__sub-data{background-color:var(--objinfo-icon-fg-sub-data);border:1px solid var(--objinfo-icon-fg-sub-data);color:var(--objinfo-icon-bg-default)}.search-result-objlabel{border:1px solid var(--md-default-fg-color--light);border-radius:2px;float:right;padding:2px}table.longtable.docutils.data.align-default tbody>tr>td>p>a.reference.internal>code.xref.py.py-obj.docutils.literal.notranslate>span.pre{word-break:normal}
+@charset "UTF-8";html{-webkit-text-size-adjust:none;-moz-text-size-adjust:none;text-size-adjust:none;box-sizing:border-box}*,:after,:before{box-sizing:inherit}@media (prefers-reduced-motion){*,:after,:before{transition:none!important}}body{margin:0}a,button,input,label{-webkit-tap-highlight-color:transparent}a{color:inherit;text-decoration:none}hr{border:0;box-sizing:content-box;display:block;height:.05rem;overflow:visible;padding:0}small{font-size:80%}sub,sup{line-height:1em}img{border-style:none}table{border-collapse:separate;border-spacing:0}td,th{font-weight:400;vertical-align:top}button{background:transparent;border:0;font-family:inherit;font-size:inherit;margin:0;padding:0}input{border:0;outline:none}:root,[data-md-color-scheme=default]{--md-default-fg-color:rgba(0,0,0,.87);--md-default-fg-color--light:rgba(0,0,0,.54);--md-default-fg-color--lighter:rgba(0,0,0,.32);--md-default-fg-color--lightest:rgba(0,0,0,.07);--md-default-bg-color:#fff;--md-default-bg-color--light:hsla(0,0%,100%,.7);--md-default-bg-color--lighter:hsla(0,0%,100%,.3);--md-default-bg-color--lightest:hsla(0,0%,100%,.12);--md-primary-fg-color:#4051b5;--md-primary-fg-color--light:#5d6cc0;--md-primary-fg-color--dark:#303fa1;--md-primary-bg-color:#fff;--md-primary-bg-color--light:hsla(0,0%,100%,.7);--md-accent-fg-color:#526cfe;--md-accent-fg-color--transparent:rgba(82,108,254,.1);--md-accent-bg-color:#fff;--md-accent-bg-color--light:hsla(0,0%,100%,.7);--md-code-fg-color:#36464e;--md-code-bg-color:#f5f5f5;--md-code-hl-color:rgba(255,255,0,.5);--md-code-hl-number-color:#d52a2a;--md-code-hl-special-color:#db1457;--md-code-hl-function-color:#a846b9;--md-code-hl-constant-color:#6e59d9;--md-code-hl-keyword-color:#3f6ec6;--md-code-hl-string-color:#1c7d4d;--md-code-hl-name-color:var(--md-code-fg-color);--md-code-hl-operator-color:var(--md-default-fg-color--light);--md-code-hl-punctuation-color:var(--md-default-fg-color--light);--md-code-hl-comment-color:var(--md-default-fg-color--light);--md-code-hl-generic-color:var(--md-default-fg-color--light);--md-code-hl-variable-color:var(--md-default-fg-color--light);--md-typeset-color:var(--md-default-fg-color);--md-typeset-a-color:var(--md-primary-fg-color);--md-typeset-mark-color:rgba(255,255,0,.5);--md-typeset-del-color:rgba(245,80,61,.15);--md-typeset-ins-color:rgba(11,213,112,.15);--md-typeset-kbd-color:#fafafa;--md-typeset-kbd-accent-color:#fff;--md-typeset-kbd-border-color:#b8b8b8;--md-typeset-table-color:rgba(0,0,0,.12);--md-admonition-fg-color:var(--md-default-fg-color);--md-admonition-bg-color:var(--md-default-bg-color);--md-footer-fg-color:#fff;--md-footer-fg-color--light:hsla(0,0%,100%,.7);--md-footer-fg-color--lighter:hsla(0,0%,100%,.3);--md-footer-bg-color:rgba(0,0,0,.87);--md-footer-bg-color--dark:rgba(0,0,0,.32);--md-shadow-z1:0 0.2rem 0.5rem rgba(0,0,0,.05),0 0 0.05rem rgba(0,0,0,.1);--md-shadow-z2:0 0.2rem 0.5rem rgba(0,0,0,.1),0 0 0.05rem rgba(0,0,0,.25);--md-shadow-z3:0 0.2rem 0.5rem rgba(0,0,0,.2),0 0 0.05rem rgba(0,0,0,.35)}.md-icon svg{fill:currentcolor;display:block;height:1.2rem;width:1.2rem}.si-icon-inline:before{background-color:var(--md-default-fg-color);content:"";display:inline-flex;height:1.125em;-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;vertical-align:text-top;width:1.125em}body{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;--md-text-font-family:var(--md-text-font,_),-apple-system,BlinkMacSystemFont,Helvetica,Arial,sans-serif;--md-code-font-family:var(--md-code-font,_),SFMono-Regular,Consolas,Menlo,monospace}body,input{font-feature-settings:"kern","liga";font-family:var(--md-text-font-family)}body,code,input,kbd,pre{color:var(--md-typeset-color)}code,kbd,pre{font-feature-settings:"kern";font-family:var(--md-code-font-family)}:root{--md-typeset-table-sort-icon:url('data:image/svg+xml;charset=utf-8,');--md-typeset-table-sort-icon--asc:url('data:image/svg+xml;charset=utf-8,');--md-typeset-table-sort-icon--desc:url('data:image/svg+xml;charset=utf-8,')}.md-typeset{-webkit-print-color-adjust:exact;color-adjust:exact;font-size:.8rem;line-height:1.6}@media print{.md-typeset{font-size:.68rem}}.md-typeset blockquote,.md-typeset dl,.md-typeset figure,.md-typeset ol,.md-typeset pre,.md-typeset ul{margin-bottom:1em;margin-top:1em}.md-typeset h1{color:var(--md-default-fg-color--light);font-size:2em;line-height:1.3;margin:0 0 1.25em}.md-typeset h1,.md-typeset h2{font-weight:300;letter-spacing:-.01em}.md-typeset h2{font-size:1.5625em;line-height:1.4;margin:1.6em 0 .64em}.md-typeset h3{font-size:1.25em;font-weight:400;letter-spacing:-.01em;line-height:1.5;margin:1.6em 0 .8em}.md-typeset h2+h3{margin-top:.8em}.md-typeset h4{font-weight:700;letter-spacing:-.01em;margin:1em 0}.md-typeset h5,.md-typeset h6{color:var(--md-default-fg-color--light);font-size:.8em;font-weight:700;letter-spacing:-.01em;margin:1.25em 0}.md-typeset h5{text-transform:uppercase}.md-typeset hr{border-bottom:.05rem solid var(--md-default-fg-color--lightest);display:flow-root;margin:1.5em 0}.md-typeset a{color:var(--md-typeset-a-color);word-break:break-word}.md-typeset a,.md-typeset a:before{transition:color 125ms}.md-typeset a:focus,.md-typeset a:hover{color:var(--md-accent-fg-color)}.md-typeset a:focus code,.md-typeset a:hover code{background-color:var(--md-accent-fg-color--transparent)}.md-typeset a code{color:currentcolor;transition:background-color 125ms}.md-typeset a.focus-visible{outline-color:var(--md-accent-fg-color);outline-offset:.2rem}.md-typeset code,.md-typeset kbd,.md-typeset pre{color:var(--md-code-fg-color);direction:ltr;font-variant-ligatures:none}@media print{.md-typeset code,.md-typeset kbd,.md-typeset pre{white-space:pre-wrap}}.md-typeset code{background-color:var(--md-code-bg-color);border-radius:.1rem;-webkit-box-decoration-break:clone;box-decoration-break:clone;font-size:.85em;padding:0 .2941176471em;word-break:break-word}.md-typeset code:not(.focus-visible){-webkit-tap-highlight-color:transparent;outline:none}.md-typeset pre{display:flow-root;line-height:1.4;position:relative}.md-typeset pre>code{-webkit-box-decoration-break:slice;box-decoration-break:slice;box-shadow:none;display:block;margin:0;outline-color:var(--md-accent-fg-color);overflow:auto;padding:.7720588235em 1.1764705882em;scrollbar-color:var(--md-default-fg-color--lighter) transparent;scrollbar-width:thin;touch-action:auto;word-break:normal}.md-typeset pre>code:hover{scrollbar-color:var(--md-accent-fg-color) transparent}.md-typeset pre>code::-webkit-scrollbar{height:.2rem;width:.2rem}.md-typeset pre>code::-webkit-scrollbar-thumb{background-color:var(--md-default-fg-color--lighter)}.md-typeset pre>code::-webkit-scrollbar-thumb:hover{background-color:var(--md-accent-fg-color)}.md-typeset .code-block-caption+.notranslate .highlighttable,.md-typeset .code-block-caption+.notranslate pre{margin-top:0}.md-typeset kbd{background-color:var(--md-typeset-kbd-color);border-radius:.1rem;box-shadow:0 .1rem 0 .05rem var(--md-typeset-kbd-border-color),0 .1rem 0 var(--md-typeset-kbd-border-color),0 -.1rem .2rem var(--md-typeset-kbd-accent-color) inset;color:var(--md-default-fg-color);display:inline-block;font-size:.75em;padding:0 .6666666667em;vertical-align:text-top;word-break:break-word}.md-typeset mark{background-color:var(--md-typeset-mark-color);-webkit-box-decoration-break:clone;box-decoration-break:clone;color:inherit;word-break:break-word}.md-typeset abbr{border-bottom:.05rem dotted var(--md-default-fg-color--light);cursor:help;text-decoration:none}@media (hover:none){.md-typeset abbr{position:relative}.md-typeset abbr[title]:-webkit-any(:focus,:hover):after{background-color:var(--md-default-fg-color);border-radius:.1rem;box-shadow:var(--md-shadow-z3);color:var(--md-default-bg-color);content:attr(title);display:inline-block;font-size:.7rem;margin-top:2em;max-width:80%;min-width:max-content;padding:.2rem .3rem;position:absolute;width:auto}.md-typeset abbr[title]:-moz-any(:focus,:hover):after{background-color:var(--md-default-fg-color);border-radius:.1rem;box-shadow:var(--md-shadow-z3);color:var(--md-default-bg-color);content:attr(title);display:inline-block;font-size:.7rem;margin-top:2em;max-width:80%;min-width:-moz-max-content;min-width:max-content;padding:.2rem .3rem;position:absolute;width:auto}[dir=ltr] .md-typeset abbr[title]:-webkit-any(:focus,:hover):after{left:0}[dir=ltr] .md-typeset abbr[title]:-moz-any(:focus,:hover):after{left:0}[dir=ltr] .md-typeset abbr[title]:is(:focus,:hover):after{left:0}[dir=rtl] .md-typeset abbr[title]:-webkit-any(:focus,:hover):after{right:0}[dir=rtl] .md-typeset abbr[title]:-moz-any(:focus,:hover):after{right:0}[dir=rtl] .md-typeset abbr[title]:is(:focus,:hover):after{right:0}.md-typeset abbr[title]:is(:focus,:hover):after{background-color:var(--md-default-fg-color);border-radius:.1rem;box-shadow:var(--md-shadow-z3);color:var(--md-default-bg-color);content:attr(title);display:inline-block;font-size:.7rem;margin-top:2em;max-width:80%;min-width:-moz-max-content;min-width:max-content;padding:.2rem .3rem;position:absolute;width:auto}}.md-typeset small{opacity:.75}[dir=ltr] .md-typeset sub,[dir=ltr] .md-typeset sup{margin-left:.078125em}[dir=rtl] .md-typeset sub,[dir=rtl] .md-typeset sup{margin-right:.078125em}[dir=ltr] .md-typeset blockquote{padding-left:.6rem}[dir=rtl] .md-typeset blockquote{padding-right:.6rem}[dir=ltr] .md-typeset blockquote{border-left:.2rem solid var(--md-default-fg-color--lighter)}[dir=rtl] .md-typeset blockquote{border-right:.2rem solid var(--md-default-fg-color--lighter)}.md-typeset blockquote{color:var(--md-default-fg-color--light);margin-left:0;margin-right:0}.md-typeset ul{list-style-type:disc}[dir=ltr] .md-typeset ol,[dir=ltr] .md-typeset ul{margin-left:.625em}[dir=rtl] .md-typeset ol,[dir=rtl] .md-typeset ul{margin-right:.625em}.md-typeset ol,.md-typeset ul{padding:0}.md-typeset ol:not([hidden]),.md-typeset ul:not([hidden]){display:flow-root}.md-typeset ol ol,.md-typeset ul ol{list-style-type:lower-alpha}.md-typeset ol ol ol,.md-typeset ul ol ol{list-style-type:lower-roman}[dir=ltr] .md-typeset ol li,[dir=ltr] .md-typeset ul li{margin-left:1.25em}[dir=rtl] .md-typeset ol li,[dir=rtl] .md-typeset ul li{margin-right:1.25em}.md-typeset ol li,.md-typeset ul li{margin-bottom:.5em}.md-typeset ol li blockquote,.md-typeset ol li p,.md-typeset ul li blockquote,.md-typeset ul li p{margin:.5em 0}.md-typeset ol li:last-child,.md-typeset ul li:last-child{margin-bottom:0}.md-typeset ol li :-webkit-any(ul,ol),.md-typeset ul li :-webkit-any(ul,ol){margin-bottom:.5em;margin-top:.5em}.md-typeset ol li :-moz-any(ul,ol),.md-typeset ul li :-moz-any(ul,ol){margin-bottom:.5em;margin-top:.5em}[dir=ltr] .md-typeset ol li :-webkit-any(ul,ol),[dir=ltr] .md-typeset ul li :-webkit-any(ul,ol){margin-left:.625em}[dir=ltr] .md-typeset ol li :-moz-any(ul,ol),[dir=ltr] .md-typeset ul li :-moz-any(ul,ol){margin-left:.625em}[dir=ltr] .md-typeset ol li :is(ul,ol),[dir=ltr] .md-typeset ul li :is(ul,ol){margin-left:.625em}[dir=rtl] .md-typeset ol li :-webkit-any(ul,ol),[dir=rtl] .md-typeset ul li :-webkit-any(ul,ol){margin-right:.625em}[dir=rtl] .md-typeset ol li :-moz-any(ul,ol),[dir=rtl] .md-typeset ul li :-moz-any(ul,ol){margin-right:.625em}[dir=rtl] .md-typeset ol li :is(ul,ol),[dir=rtl] .md-typeset ul li :is(ul,ol){margin-right:.625em}.md-typeset ol li :is(ul,ol),.md-typeset ul li :is(ul,ol){margin-bottom:.5em;margin-top:.5em}[dir=ltr] .md-typeset dd{margin-left:1.875em}[dir=rtl] .md-typeset dd{margin-right:1.875em}.md-typeset dd{margin-bottom:1.5em;margin-top:1em}.md-typeset img,.md-typeset svg,.md-typeset video{height:auto;max-width:100%}.md-typeset img[align=left]{margin:1em 1em 1em 0}.md-typeset img[align=right]{margin:1em 0 1em 1em}.md-typeset img[align]:only-child{margin-top:0}.md-typeset img[src$="#gh-dark-mode-only"],.md-typeset img[src$="#only-dark"]{display:none}.md-typeset figure{display:flow-root;margin:1em auto;max-width:100%;text-align:center;width:-moz-fit-content;width:fit-content}.md-typeset figure img{display:block}.md-typeset figcaption{font-style:italic;margin:1em auto;max-width:24rem}.md-typeset iframe{max-width:100%}.md-typeset table.data:not(.plain){background-color:var(--md-default-bg-color);border:.05rem solid var(--md-typeset-table-color);border-radius:.1rem;display:block;font-size:.64rem;max-width:100%;overflow:auto;touch-action:auto;width:-moz-max-content;width:max-content}@media print{.md-typeset table.data:not(.plain){display:table}}.md-typeset table.data:not(.plain)+*{margin-top:1.5em}.md-typeset table.data:not(.plain) :-webkit-any(th,td)>:first-child{margin-top:0}.md-typeset table.data:not(.plain) :-moz-any(th,td)>:first-child{margin-top:0}.md-typeset table.data:not(.plain) :is(th,td)>:first-child{margin-top:0}.md-typeset table.data:not(.plain) :-webkit-any(th,td)>:last-child{margin-bottom:0}.md-typeset table.data:not(.plain) :-moz-any(th,td)>:last-child{margin-bottom:0}.md-typeset table.data:not(.plain) :is(th,td)>:last-child{margin-bottom:0}.md-typeset table.data:not(.plain) :-webkit-any(th,td):not([align],.align-center,.align-left,.align-right){text-align:left}.md-typeset table.data:not(.plain) :-moz-any(th,td):not([align],.align-center,.align-left,.align-right){text-align:left}.md-typeset table.data:not(.plain) :is(th,td):not([align],.align-center,.align-left,.align-right){text-align:left}[dir=rtl] .md-typeset table.data:not(.plain) :-webkit-any(th,td):not([align],.align-center,.align-left,.align-right){text-align:right}[dir=rtl] .md-typeset table.data:not(.plain) :-moz-any(th,td):not([align],.align-center,.align-left,.align-right){text-align:right}[dir=rtl] .md-typeset table.data:not(.plain) :is(th,td):not([align],.align-center,.align-left,.align-right){text-align:right}.md-typeset table.data:not(.plain) th{font-weight:700;min-width:5rem;padding:.9375em 1.25em;vertical-align:top}.md-typeset table.data:not(.plain) td{border-top:.05rem solid var(--md-typeset-table-color);padding:.9375em 1.25em;vertical-align:top}.md-typeset table.data:not(.plain) tbody tr{transition:background-color 125ms}.md-typeset table.data:not(.plain) tbody tr:hover{background-color:rgba(0,0,0,.035);box-shadow:0 .05rem 0 var(--md-default-bg-color) inset}.md-typeset table.data:not(.plain) a{word-break:normal}.md-typeset table th[role=columnheader]{cursor:pointer}[dir=ltr] .md-typeset table th[role=columnheader]:after{margin-left:.5em}[dir=rtl] .md-typeset table th[role=columnheader]:after{margin-right:.5em}.md-typeset table th[role=columnheader]:after{content:"";display:inline-block;height:1.2em;-webkit-mask-image:var(--md-typeset-table-sort-icon);mask-image:var(--md-typeset-table-sort-icon);-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;transition:background-color 125ms;vertical-align:text-bottom;width:1.2em}.md-typeset table th[role=columnheader]:hover:after{background-color:var(--md-default-fg-color--lighter)}.md-typeset table th[role=columnheader][aria-sort=ascending]:after{background-color:var(--md-default-fg-color--light);-webkit-mask-image:var(--md-typeset-table-sort-icon--asc);mask-image:var(--md-typeset-table-sort-icon--asc)}.md-typeset table th[role=columnheader][aria-sort=descending]:after{background-color:var(--md-default-fg-color--light);-webkit-mask-image:var(--md-typeset-table-sort-icon--desc);mask-image:var(--md-typeset-table-sort-icon--desc)}.md-typeset__scrollwrap{margin:1em -.8rem;overflow-x:auto;touch-action:auto}.md-typeset__table{display:inline-block;margin-bottom:.5em;padding:0 .8rem}@media print{.md-typeset__table{display:block}}html .md-typeset__table table{display:table;margin:0;overflow:hidden;width:100%}@media screen and (max-width:44.9375em){.md-content__inner>pre{margin:1em -.8rem}.md-content__inner>pre code{border-radius:0}}.md-banner{background-color:var(--md-footer-bg-color);color:var(--md-footer-fg-color);overflow:auto}@media print{.md-banner{display:none}}.md-banner--warning{background:var(--md-typeset-mark-color);color:var(--md-default-fg-color)}.md-banner__inner{font-size:.7rem;margin:.6rem auto;padding:0 .8rem}[dir=ltr] .md-banner__button{float:right}[dir=rtl] .md-banner__button{float:left}.md-banner__button{color:inherit;cursor:pointer;transition:opacity .25s}.md-banner__button:hover{opacity:.7}html{font-size:125%;height:100%;overflow-x:hidden}@media screen and (min-width:100em){html{font-size:137.5%}}@media screen and (min-width:125em){html{font-size:150%}}body{background-color:var(--md-default-bg-color);display:flex;flex-direction:column;font-size:.5rem;min-height:100%;position:relative;width:100%}@media print{body{display:block}}@media screen and (max-width:59.9375em){body[data-md-scrolllock]{position:fixed}}.md-grid{margin-left:auto;margin-right:auto;max-width:61rem}.md-container{display:flex;flex-direction:column;flex-grow:1}@media print{.md-container{display:block}}.md-main{flex-grow:1}.md-main__inner{display:flex;height:100%;margin-top:1.5rem}.md-ellipsis{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.md-toggle{display:none}.md-option{height:0;opacity:0;position:absolute;width:0}.md-option:checked+label:not([hidden]){display:block}.md-option.focus-visible+label{outline-color:var(--md-accent-fg-color);outline-style:auto}.md-skip{background-color:var(--md-default-fg-color);border-radius:.1rem;color:var(--md-default-bg-color);font-size:.64rem;margin:.5rem;opacity:0;outline-color:var(--md-accent-fg-color);padding:.3rem .5rem;position:fixed;transform:translateY(.4rem);z-index:-1}.md-skip:focus{opacity:1;transform:translateY(0);transition:transform .25s cubic-bezier(.4,0,.2,1),opacity 175ms 75ms;z-index:10}@page{margin:25mm}:root{--md-clipboard-icon:url('data:image/svg+xml;charset=utf-8,')}.md-clipboard{border-radius:.1rem;color:var(--md-default-fg-color--lightest);cursor:pointer;height:1.5em;outline-color:var(--md-accent-fg-color);outline-offset:.1rem;position:absolute;right:.5em;top:.5em;transition:color .25s;width:1.5em;z-index:1}@media print{.md-clipboard{display:none}}.md-clipboard:not(.focus-visible){-webkit-tap-highlight-color:transparent;outline:none}:hover>.md-clipboard{color:var(--md-default-fg-color--light)}.md-clipboard:-webkit-any(:focus,:hover){color:var(--md-accent-fg-color)}.md-clipboard:-moz-any(:focus,:hover){color:var(--md-accent-fg-color)}.md-clipboard:is(:focus,:hover){color:var(--md-accent-fg-color)}.md-clipboard:after{background-color:currentcolor;content:"";display:block;height:1.125em;margin:0 auto;-webkit-mask-image:var(--md-clipboard-icon);mask-image:var(--md-clipboard-icon);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1.125em}.md-clipboard--inline{cursor:pointer}.md-clipboard--inline code{transition:color .25s,background-color .25s}.md-clipboard--inline:-webkit-any(:focus,:hover) code{background-color:var(--md-accent-fg-color--transparent);color:var(--md-accent-fg-color)}.md-clipboard--inline:-moz-any(:focus,:hover) code{background-color:var(--md-accent-fg-color--transparent);color:var(--md-accent-fg-color)}.md-clipboard--inline:is(:focus,:hover) code{background-color:var(--md-accent-fg-color--transparent);color:var(--md-accent-fg-color)}@keyframes consent{0%{opacity:0;transform:translateY(100%)}to{opacity:1;transform:translateY(0)}}@keyframes overlay{0%{opacity:0}to{opacity:1}}.md-consent__overlay{animation:overlay .25s both;-webkit-backdrop-filter:blur(.1rem);backdrop-filter:blur(.1rem);background-color:rgba(0,0,0,.54);height:100%;opacity:1;position:fixed;top:0;width:100%;z-index:5}.md-consent__inner{animation:consent .5s cubic-bezier(.1,.7,.1,1) both;background-color:var(--md-default-bg-color);border:0;border-radius:.1rem;bottom:0;box-shadow:0 0 .2rem rgba(0,0,0,.1),0 .2rem .4rem rgba(0,0,0,.2);max-height:100%;overflow:auto;padding:0;position:fixed;width:100%;z-index:5}.md-consent__form{padding:.8rem}.md-consent__settings{display:none;margin:1em 0}input:checked+.md-consent__settings{display:block}.md-consent__controls{margin-bottom:.8rem}.md-typeset .md-consent__controls .md-button{display:inline}@media screen and (max-width:44.9375em){.md-typeset .md-consent__controls .md-button{display:block;margin-top:.4rem;text-align:center;width:100%}}.md-consent label{cursor:pointer}.md-content{flex-grow:1;min-width:0}.md-content__inner{margin:0 .8rem 1.2rem;padding-top:.6rem}@media screen and (min-width:76.25em){[dir=ltr] .md-sidebar--primary:not([hidden])~.md-content>.md-content__inner{margin-left:1.2rem}[dir=ltr] .md-sidebar--secondary:not([hidden])~.md-content>.md-content__inner,[dir=rtl] .md-sidebar--primary:not([hidden])~.md-content>.md-content__inner{margin-right:1.2rem}[dir=rtl] .md-sidebar--secondary:not([hidden])~.md-content>.md-content__inner{margin-left:1.2rem}}.md-content__inner:before{content:"";display:block;height:.4rem}.md-content__inner>:last-child{margin-bottom:0}[dir=ltr] .md-content__button{float:right}[dir=rtl] .md-content__button{float:left}[dir=ltr] .md-content__button{margin-left:.4rem}[dir=rtl] .md-content__button{margin-right:.4rem}.md-content__button{margin:.4rem 0;padding:0}@media print{.md-content__button{display:none}}.md-typeset .md-content__button{color:var(--md-default-fg-color--lighter)}.md-content__button svg{display:inline;vertical-align:top}[dir=rtl] .md-content__button svg{transform:scaleX(-1)}[dir=ltr] .md-dialog{right:.8rem}[dir=rtl] .md-dialog{left:.8rem}.md-dialog{background-color:var(--md-default-fg-color);border-radius:.1rem;bottom:.8rem;box-shadow:var(--md-shadow-z3);min-width:11.1rem;opacity:0;padding:.4rem .6rem;pointer-events:none;position:fixed;transform:translateY(100%);transition:transform 0ms .4s,opacity .4s;z-index:4}@media print{.md-dialog{display:none}}.md-dialog--active{opacity:1;pointer-events:auto;transform:translateY(0);transition:transform .4s cubic-bezier(.075,.85,.175,1),opacity .4s}.md-dialog__inner{color:var(--md-default-bg-color);font-size:.7rem}.md-feedback{margin:2em 0 1em;text-align:center}.md-feedback fieldset{border:none;margin:0;padding:0}.md-feedback__title{font-weight:700;margin:1em auto}.md-feedback__inner{position:relative}.md-feedback__list{align-content:baseline;display:flex;flex-wrap:wrap;justify-content:center;position:relative}.md-feedback__list:hover .md-icon:not(:disabled){color:var(--md-default-fg-color--lighter)}:disabled .md-feedback__list{min-height:1.8rem}.md-feedback__icon{color:var(--md-default-fg-color--light);cursor:pointer;flex-shrink:0;margin:0 .1rem;transition:color 125ms}.md-feedback__icon:not(:disabled).md-icon:hover{color:var(--md-accent-fg-color)}.md-feedback__icon:disabled{color:var(--md-default-fg-color--lightest);pointer-events:none}.md-feedback__note{opacity:0;position:relative;transform:translateY(.4rem);transition:transform .4s cubic-bezier(.1,.7,.1,1),opacity .15s}.md-feedback__note>*{margin:0 auto;max-width:16rem}:disabled .md-feedback__note{opacity:1;transform:translateY(0)}.md-footer{background-color:var(--md-footer-bg-color);color:var(--md-footer-fg-color)}@media print{.md-footer{display:none}}.md-footer__inner{justify-content:space-between;overflow:auto;padding:.2rem}.md-footer__inner:not([hidden]){display:flex}.md-footer__link{display:flex;flex-grow:0.01;outline-color:var(--md-accent-fg-color);overflow:hidden;padding-bottom:.4rem;padding-top:1.4rem;transition:opacity .25s}.md-footer__link:-webkit-any(:focus,:hover){opacity:.7}.md-footer__link:-moz-any(:focus,:hover){opacity:.7}.md-footer__link:is(:focus,:hover){opacity:.7}[dir=rtl] .md-footer__link svg{transform:scaleX(-1)}@media screen and (max-width:44.9375em){.md-footer__link--prev .md-footer__title{display:none}}[dir=ltr] .md-footer__link--next{margin-left:auto}[dir=rtl] .md-footer__link--next{margin-right:auto}.md-footer__link--next{text-align:right}[dir=rtl] .md-footer__link--next{text-align:left}.md-footer__title{flex-grow:1;font-size:.9rem;line-height:2.4rem;max-width:calc(100% - 2.4rem);padding:0 1rem;position:relative;white-space:nowrap}.md-footer__button{margin:.2rem;padding:.4rem}.md-footer__direction{font-size:.64rem;left:0;margin-top:-1rem;opacity:.7;padding:0 1rem;position:absolute;right:0}.md-footer-meta{background-color:var(--md-footer-bg-color--dark)}.md-footer-meta__inner{display:flex;flex-wrap:wrap;justify-content:space-between;padding:.2rem}html .md-footer-meta.md-typeset a{color:var(--md-footer-fg-color--light)}html .md-footer-meta.md-typeset a:-webkit-any(:focus,:hover){color:var(--md-footer-fg-color)}html .md-footer-meta.md-typeset a:-moz-any(:focus,:hover){color:var(--md-footer-fg-color)}html .md-footer-meta.md-typeset a:is(:focus,:hover){color:var(--md-footer-fg-color)}.md-copyright{color:var(--md-footer-fg-color--lighter);font-size:.64rem;margin:auto .6rem;padding:.4rem 0;width:100%}@media screen and (min-width:45em){.md-copyright{width:auto}}.md-copyright__highlight{color:var(--md-footer-fg-color--light)}.md-social{margin:0 .4rem;padding:.2rem 0 .6rem}@media screen and (min-width:45em){.md-social{padding:.6rem 0}}.md-social__link{display:inline-block;height:1.6rem;text-align:center;width:1.6rem}.md-social__link:before{line-height:1.9}.md-social__link svg{fill:currentcolor;max-height:.8rem;vertical-align:-25%}.md-typeset .md-button{border:.1rem solid;border-radius:.1rem;color:var(--md-primary-fg-color);cursor:pointer;display:inline-block;font-weight:700;padding:.625em 2em;transition:color 125ms,background-color 125ms,border-color 125ms}.md-typeset .md-button--primary{background-color:var(--md-primary-fg-color);border-color:var(--md-primary-fg-color);color:var(--md-primary-bg-color)}.md-typeset .md-button:-webkit-any(:focus,:hover){background-color:var(--md-accent-fg-color);border-color:var(--md-accent-fg-color);color:var(--md-accent-bg-color)}.md-typeset .md-button:-moz-any(:focus,:hover){background-color:var(--md-accent-fg-color);border-color:var(--md-accent-fg-color);color:var(--md-accent-bg-color)}.md-typeset .md-button:is(:focus,:hover){background-color:var(--md-accent-fg-color);border-color:var(--md-accent-fg-color);color:var(--md-accent-bg-color)}[dir=ltr] .md-typeset .md-input{border-top-left-radius:.1rem}[dir=ltr] .md-typeset .md-input,[dir=rtl] .md-typeset .md-input{border-top-right-radius:.1rem}[dir=rtl] .md-typeset .md-input{border-top-left-radius:.1rem}.md-typeset .md-input{border-bottom:.1rem solid var(--md-default-fg-color--lighter);box-shadow:var(--md-shadow-z1);font-size:.8rem;height:1.8rem;padding:0 .6rem;transition:border .25s,box-shadow .25s}.md-typeset .md-input:-webkit-any(:focus,:hover){border-bottom-color:var(--md-accent-fg-color);box-shadow:var(--md-shadow-z2)}.md-typeset .md-input:-moz-any(:focus,:hover){border-bottom-color:var(--md-accent-fg-color);box-shadow:var(--md-shadow-z2)}.md-typeset .md-input:is(:focus,:hover){border-bottom-color:var(--md-accent-fg-color);box-shadow:var(--md-shadow-z2)}.md-typeset .md-input--stretch{width:100%}.md-header{background-color:var(--md-primary-fg-color);box-shadow:0 0 .2rem transparent,0 .2rem .4rem transparent;color:var(--md-primary-bg-color);display:block;left:0;position:sticky;right:0;top:0;z-index:4}@media print{.md-header{display:none}}.md-header[hidden]{transform:translateY(-100%);transition:transform .25s cubic-bezier(.8,0,.6,1),box-shadow .25s}.md-header--shadow{box-shadow:0 0 .2rem rgba(0,0,0,.1),0 .2rem .4rem rgba(0,0,0,.2);transition:transform .25s cubic-bezier(.1,.7,.1,1),box-shadow .25s}.md-header__inner{align-items:center;display:flex;padding:0 .2rem}.md-header__button{color:currentcolor;cursor:pointer;margin:.2rem;outline-color:var(--md-accent-fg-color);padding:.4rem;position:relative;transition:opacity .25s;vertical-align:middle;z-index:1}.md-header__button:hover{opacity:.7}.md-header__button:not([hidden]){display:inline-block}.md-header__button:not(.focus-visible){-webkit-tap-highlight-color:transparent;outline:none}.md-header__button.md-logo{margin:.2rem;padding:.4rem}@media screen and (max-width:76.1875em){.md-header__button.md-logo{display:none}}.md-header__button.md-logo :-webkit-any(img,svg){fill:currentcolor;display:block;height:1.2rem;width:auto}.md-header__button.md-logo :-moz-any(img,svg){fill:currentcolor;display:block;height:1.2rem;width:auto}.md-header__button.md-logo :is(img,svg){fill:currentcolor;display:block;height:1.2rem;width:auto}@media screen and (min-width:60em){.md-header__button[for=__search]{display:none}}.no-js .md-header__button[for=__search]{display:none}[dir=rtl] .md-header__button[for=__search] svg{transform:scaleX(-1)}@media screen and (min-width:76.25em){.md-header__button[for=__drawer]{display:none}}.md-header__topic{display:flex;max-width:100%;position:absolute;transition:transform .4s cubic-bezier(.1,.7,.1,1),opacity .15s;white-space:nowrap}.md-header__topic+.md-header__topic{opacity:0;pointer-events:none;transform:translateX(1.25rem);transition:transform .4s cubic-bezier(1,.7,.1,.1),opacity .15s;z-index:-1}[dir=rtl] .md-header__topic+.md-header__topic{transform:translateX(-1.25rem)}.md-header__topic:first-child{font-weight:700}[dir=ltr] .md-header__title{margin-right:.4rem}[dir=rtl] .md-header__title{margin-left:.4rem}[dir=ltr] .md-header__title{margin-left:1rem}[dir=rtl] .md-header__title{margin-right:1rem}.md-header__title{flex-grow:1;font-size:.9rem;height:2.4rem;line-height:2.4rem}.md-header__title--active .md-header__topic{opacity:0;pointer-events:none;transform:translateX(-1.25rem);transition:transform .4s cubic-bezier(1,.7,.1,.1),opacity .15s;z-index:-1}[dir=rtl] .md-header__title--active .md-header__topic{transform:translateX(1.25rem)}.md-header__title--active .md-header__topic+.md-header__topic{opacity:1;pointer-events:auto;transform:translateX(0);transition:transform .4s cubic-bezier(.1,.7,.1,1),opacity .15s;z-index:0}.md-header__title>.md-header__ellipsis{height:100%;position:relative;width:100%}.md-header__option{display:flex;flex-shrink:0;max-width:100%;transition:max-width 0ms .25s,opacity .25s .25s;white-space:nowrap}[data-md-toggle=search]:checked~.md-header .md-header__option{max-width:0;opacity:0;transition:max-width 0ms,opacity 0ms}.md-header__source{display:none}@media screen and (min-width:60em){[dir=ltr] .md-header__source{margin-left:1rem}[dir=rtl] .md-header__source{margin-right:1rem}.md-header__source{display:block;max-width:11.7rem;width:11.7rem}}@media screen and (min-width:76.25em){[dir=ltr] .md-header__source{margin-left:1.4rem}[dir=rtl] .md-header__source{margin-right:1.4rem}}.md-hero{background-color:var(--md-primary-fg-color);color:var(--md-primary-bg-color);font-size:1rem;overflow:hidden;transition:background .25s}.md-hero__inner{margin-top:1rem;padding:.8rem .8rem .4rem;transition:transform .4s cubic-bezier(.1,.7,.1,1),opacity .25s;transition-delay:.1s}@media screen and (max-width:76.1875em){.md-hero__inner{margin-bottom:1.2rem;margin-top:2.4rem}}[data-md-state=hidden] .md-hero__inner{opacity:0;pointer-events:none;transform:translateY(.625rem);transition:transform 0ms .4s,opacity .1s 0ms}.md-hero--expand .md-hero__inner{margin-bottom:1.2rem}:root{--md-nav-icon--prev:url('data:image/svg+xml;charset=utf-8,');--md-nav-icon--next:url('data:image/svg+xml;charset=utf-8,');--md-toc-icon:url('data:image/svg+xml;charset=utf-8,')}.md-nav{font-size:.7rem;line-height:1.3}.md-nav__title{align-items:center;display:flex;font-weight:700;overflow:hidden;padding:0 .6rem;text-overflow:ellipsis}.md-nav__title .md-nav__button{display:none}.md-nav__title .md-nav__button img{height:100%;width:auto}.md-nav__title .md-nav__button.md-logo :-webkit-any(img,svg){fill:currentcolor;display:block;height:2.4rem;max-width:100%;object-fit:contain;width:auto}.md-nav__title .md-nav__button.md-logo :-moz-any(img,svg){fill:currentcolor;display:block;height:2.4rem;max-width:100%;object-fit:contain;width:auto}.md-nav__title .md-nav__button.md-logo :is(img,svg){fill:currentcolor;display:block;height:2.4rem;max-width:100%;-o-object-fit:contain;object-fit:contain;width:auto}.md-nav__list{list-style:none;margin:0;padding:0}.md-nav__item{padding:0 .6rem}[dir=ltr] .md-nav__item .md-nav__item{padding-right:0}[dir=rtl] .md-nav__item .md-nav__item{padding-left:0}.md-nav__link{align-items:center;cursor:pointer;display:flex;margin-top:.625em;scroll-snap-align:start;transition:color 125ms}.md-nav__link.md-nav__sticky{box-shadow:0 -.625em var(--md-default-bg-color),0 .625em var(--md-default-bg-color)}.md-nav__link--passed{color:var(--md-default-fg-color--light)}.md-nav__item .md-nav__link--active{color:var(--md-typeset-a-color)}.md-nav__link--in-viewport{position:relative}.md-nav__link--in-viewport:before{background-color:var(--md-primary-fg-color);bottom:0;content:"";height:100%;position:absolute;right:calc(100% + .3rem);top:0;width:.05rem}.md-nav__item .md-nav__link--index [href]{width:100%}.md-nav__link:-webkit-any(:focus,:hover){color:var(--md-accent-fg-color)}.md-nav__link:-moz-any(:focus,:hover){color:var(--md-accent-fg-color)}.md-nav__link:is(:focus,:hover){color:var(--md-accent-fg-color)}.md-nav__link.focus-visible{outline-color:var(--md-accent-fg-color);outline-offset:.2rem}.md-nav--primary .md-nav__link[for=__toc]{display:none}.md-nav--primary .md-nav__link[for=__toc] .md-icon:after{background-color:currentcolor;display:block;height:100%;-webkit-mask-image:var(--md-toc-icon);mask-image:var(--md-toc-icon);width:100%}.md-nav--primary .md-nav__link[for=__toc]~.md-nav{display:none}.md-nav__link>*{cursor:pointer;display:flex}.md-nav__sticky{background-color:var(--md-default-bg-color);position:sticky;top:var(--md-nav__header-height,0);z-index:var(--md-nav__sticky-zindex)}.md-nav .md-ellipsis{display:block;flex-grow:1;white-space:normal}.md-nav__icon{flex-shrink:0}.md-nav__source{display:none}@media screen and (max-width:76.1875em){.md-nav--primary,.md-nav--primary .md-nav{background-color:var(--md-default-bg-color);display:flex;flex-direction:column;height:100%;left:0;position:absolute;right:0;top:0;z-index:1}.md-nav--primary .md-nav__sticky{background-color:transparent;box-shadow:none;position:static;z-index:auto}.md-nav--primary :-webkit-any(.md-nav__title,.md-nav__item){font-size:.8rem;line-height:1.5}.md-nav--primary :-moz-any(.md-nav__title,.md-nav__item){font-size:.8rem;line-height:1.5}.md-nav--primary :is(.md-nav__title,.md-nav__item){font-size:.8rem;line-height:1.5}.md-nav--primary .md-nav__title{background-color:var(--md-default-fg-color--lightest);color:var(--md-default-fg-color--light);cursor:pointer;line-height:2.4rem;min-height:5.6rem;padding:3rem .8rem .2rem;position:relative;white-space:nowrap}[dir=ltr] .md-nav--primary .md-nav__title .md-nav__icon{left:.4rem}[dir=rtl] .md-nav--primary .md-nav__title .md-nav__icon{right:.4rem}.md-nav--primary .md-nav__title .md-nav__icon{display:block;height:1.2rem;margin:.2rem;position:absolute;top:.4rem;width:1.2rem}.md-nav--primary .md-nav__title .md-nav__icon:after{background-color:currentcolor;content:"";display:block;height:100%;-webkit-mask-image:var(--md-nav-icon--prev);mask-image:var(--md-nav-icon--prev);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:100%}.md-nav--primary .md-nav__title~.md-nav__list{background-color:var(--md-default-bg-color);box-shadow:0 .05rem 0 var(--md-default-fg-color--lightest) inset;overflow-y:auto;scroll-snap-type:y mandatory;touch-action:pan-y}.md-nav--primary .md-nav__title~.md-nav__list>:first-child{border-top:0}.md-nav--primary .md-nav__title[for=__drawer]{background-color:var(--md-primary-fg-color);color:var(--md-primary-bg-color);font-weight:700}.md-nav--primary .md-nav__title .md-logo{display:block;left:.2rem;margin:.2rem;padding:.4rem;position:absolute;right:.2rem;top:.2rem}.md-nav--primary .md-nav__list{flex:1}.md-nav--primary .md-nav__item{border-top:.05rem solid var(--md-default-fg-color--lightest);padding:0}.md-nav--primary .md-nav__item--active>.md-nav__link{color:var(--md-typeset-a-color)}.md-nav--primary .md-nav__item--active>.md-nav__link:-webkit-any(:focus,:hover){color:var(--md-accent-fg-color)}.md-nav--primary .md-nav__item--active>.md-nav__link:-moz-any(:focus,:hover){color:var(--md-accent-fg-color)}.md-nav--primary .md-nav__item--active>.md-nav__link:is(:focus,:hover){color:var(--md-accent-fg-color)}.md-nav--primary .md-nav__link{margin-top:0;padding:.6rem .8rem}[dir=ltr] .md-nav--primary .md-nav__link .md-nav__icon{margin-right:-.2rem}[dir=rtl] .md-nav--primary .md-nav__link .md-nav__icon{margin-left:-.2rem}.md-nav--primary .md-nav__link .md-nav__icon{font-size:1.2rem;height:1.2rem;width:1.2rem}.md-nav--primary .md-nav__link .md-nav__icon:after{background-color:currentcolor;content:"";display:block;height:100%;-webkit-mask-image:var(--md-nav-icon--next);mask-image:var(--md-nav-icon--next);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:100%}[dir=rtl] .md-nav--primary .md-nav__icon:after{transform:scale(-1)}.md-nav--primary .md-nav--secondary .md-nav{background-color:transparent;position:static}[dir=ltr] .md-nav--primary .md-nav--secondary .md-nav .md-nav__link{padding-left:1.4rem}[dir=rtl] .md-nav--primary .md-nav--secondary .md-nav .md-nav__link{padding-right:1.4rem}[dir=ltr] .md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav__link{padding-left:2rem}[dir=rtl] .md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav__link{padding-right:2rem}[dir=ltr] .md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav .md-nav__link{padding-left:2.6rem}[dir=rtl] .md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav .md-nav__link{padding-right:2.6rem}[dir=ltr] .md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav .md-nav .md-nav__link{padding-left:3.2rem}[dir=rtl] .md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav .md-nav .md-nav__link{padding-right:3.2rem}.md-nav--secondary{background-color:transparent}.md-nav__toggle~.md-nav{display:flex;opacity:0;transform:translateX(100%);transition:transform .25s cubic-bezier(.8,0,.6,1),opacity 125ms 50ms}[dir=rtl] .md-nav__toggle~.md-nav{transform:translateX(-100%)}.md-nav__toggle:checked~.md-nav{opacity:1;transform:translateX(0);transition:transform .25s cubic-bezier(.4,0,.2,1),opacity 125ms 125ms}.md-nav__toggle:checked~.md-nav>.md-nav__list{-webkit-backface-visibility:hidden;backface-visibility:hidden}.md-nav .md-nav__title .md-ellipsis{white-space:nowrap}.md-nav .md-nav__title .md-ellipsis wbr{display:none}}@media screen and (max-width:59.9375em){.md-nav__current-nested{display:none}.md-nav--primary .md-nav__link[for=__toc]{display:flex}.md-nav--primary .md-nav__link[for=__toc] .md-icon:after{content:""}.md-nav--primary .md-nav__link[for=__toc]+.md-nav__link{display:none}.md-nav--primary .md-nav__link[for=__toc]~.md-nav{display:flex}.md-nav__source{background-color:var(--md-primary-fg-color--dark);color:var(--md-primary-bg-color);display:block;padding:0 .2rem}}@media screen and (min-width:60em) and (max-width:76.1875em){.md-nav--integrated .md-nav__link[for=__toc]{display:flex}.md-nav--integrated .md-nav__link[for=__toc] .md-icon:after{content:""}.md-nav--integrated .md-nav__link[for=__toc]+.md-nav__link{display:none}.md-nav--integrated .md-nav__link[for=__toc]~.md-nav{display:flex}}@media screen and (min-width:60em){.md-nav__current-toc{display:none}.md-nav--secondary .md-nav__title{background:var(--md-default-bg-color);box-shadow:0 0 .4rem .4rem var(--md-default-bg-color);position:sticky;top:0;z-index:1}.md-nav--secondary .md-nav__title[for=__toc]{scroll-snap-align:start}.md-nav--secondary .md-nav__title .md-nav__icon{display:none}}@media screen and (min-width:76.25em){.md-nav{transition:max-height .25s cubic-bezier(.86,0,.07,1)}.md-nav--primary .md-nav__title{background:var(--md-default-bg-color);box-shadow:0 0 .4rem .4rem var(--md-default-bg-color);position:sticky;top:0;z-index:1}.md-nav--primary .md-nav__title[for=__drawer]{scroll-snap-align:start}.md-nav--primary .md-nav__title .md-nav__icon,.md-nav__toggle~.md-nav{display:none}.md-nav__toggle:-webkit-any(:checked,:indeterminate)~.md-nav{display:block}.md-nav__toggle:-moz-any(:checked,:indeterminate)~.md-nav{display:block}.md-nav__toggle:is(:checked,:indeterminate)~.md-nav{display:block}.md-nav__item--nested>.md-nav>.md-nav__title{display:none}.md-nav__item--section{display:block;margin:1.25em 0}.md-nav__item--section:last-child{margin-bottom:0}.md-nav__item--section>.md-nav__link{font-weight:700;pointer-events:none}.md-nav__item--section>.md-nav__link--index [href]{pointer-events:auto}.md-nav__item--section>.md-nav__link .md-nav__icon{display:none}.md-nav__item--section>.md-nav{display:block}.md-nav__item--section>.md-nav>.md-nav__list>.md-nav__item{padding:0}.md-nav__icon{border-radius:100%;height:.9rem;transition:background-color .25s,transform .25s;width:.9rem}[dir=rtl] .md-nav__icon{transform:rotate(180deg)}.md-nav__icon:hover{background-color:var(--md-accent-fg-color--transparent)}.md-nav__icon:after{background-color:currentcolor;content:"";display:inline-block;height:100%;-webkit-mask-image:var(--md-nav-icon--next);mask-image:var(--md-nav-icon--next);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;vertical-align:-.1rem;width:100%}.md-nav__item--nested .md-nav__toggle:checked~.md-nav__link .md-nav__icon,.md-nav__item--nested .md-nav__toggle:indeterminate~.md-nav__link .md-nav__icon{transform:rotate(90deg)}.md-nav--lifted>.md-nav__list>.md-nav__item,.md-nav--lifted>.md-nav__list>.md-nav__item--nested,.md-nav--lifted>.md-nav__title{display:none}.md-nav--lifted>.md-nav__list>.md-nav__item--active{display:block;padding:0}.md-nav--lifted>.md-nav__list>.md-nav__item--active>.md-nav__link{background:var(--md-default-bg-color);box-shadow:0 0 .4rem .4rem var(--md-default-bg-color);font-weight:700;margin-top:0;padding:0 .6rem;position:sticky;top:0;z-index:var(--md-nav__sticky-zindex,1)}.md-nav--lifted>.md-nav__list>.md-nav__item--active>.md-nav__link:not(.md-nav__link--index){pointer-events:none}.md-nav--lifted>.md-nav__list>.md-nav__item--active>.md-nav__link .md-nav__icon{display:none}.md-nav--lifted .md-nav[data-md-level="1"]{display:block}[dir=ltr] .md-nav--lifted .md-nav[data-md-level="1"]>.md-nav__list>.md-nav__item{padding-right:.6rem}[dir=rtl] .md-nav--lifted .md-nav[data-md-level="1"]>.md-nav__list>.md-nav__item{padding-left:.6rem}.md-nav--integrated>.md-nav__list>.md-nav__item--active:not(.md-nav__item--nested){padding:0 .6rem}.md-nav--integrated>.md-nav__list>.md-nav__item--active:not(.md-nav__item--nested)>.md-nav__link{padding:0}[dir=ltr] .md-nav--integrated>.md-nav__list>.md-nav__item--active .md-nav--secondary{border-left:.05rem solid var(--md-primary-fg-color)}[dir=rtl] .md-nav--integrated>.md-nav__list>.md-nav__item--active .md-nav--secondary{border-right:.05rem solid var(--md-primary-fg-color)}.md-nav--integrated>.md-nav__list>.md-nav__item--active .md-nav--secondary{display:block;margin-bottom:1.25em}.md-nav--integrated>.md-nav__list>.md-nav__item--active .md-nav--secondary>.md-nav__title{display:none}}:root{--md-search-result-icon:url('data:image/svg+xml;charset=utf-8,')}.md-search{position:relative}@media screen and (min-width:60em){.md-search{padding:.2rem 0}}.no-js .md-search{display:none}.md-search__overlay{opacity:0;z-index:1}@media screen and (max-width:59.9375em){[dir=ltr] .md-search__overlay{left:-2.2rem}[dir=rtl] .md-search__overlay{right:-2.2rem}.md-search__overlay{background-color:var(--md-default-bg-color);border-radius:1rem;height:2rem;overflow:hidden;pointer-events:none;position:absolute;top:-1rem;transform-origin:center;transition:transform .3s .1s,opacity .2s .2s;width:2rem}[data-md-toggle=search]:checked~.md-header .md-search__overlay{opacity:1;transition:transform .4s,opacity .1s}}@media screen and (min-width:60em){[dir=ltr] .md-search__overlay{left:0}[dir=rtl] .md-search__overlay{right:0}.md-search__overlay{background-color:rgba(0,0,0,.54);cursor:pointer;height:0;position:fixed;top:0;transition:width 0ms .25s,height 0ms .25s,opacity .25s;width:0}[data-md-toggle=search]:checked~.md-header .md-search__overlay{height:200vh;opacity:1;transition:width 0ms,height 0ms,opacity .25s;width:100%}}@media screen and (max-width:29.9375em){[data-md-toggle=search]:checked~.md-header .md-search__overlay{transform:scale(45)}}@media screen and (min-width:30em) and (max-width:44.9375em){[data-md-toggle=search]:checked~.md-header .md-search__overlay{transform:scale(60)}}@media screen and (min-width:45em) and (max-width:59.9375em){[data-md-toggle=search]:checked~.md-header .md-search__overlay{transform:scale(75)}}.md-search__inner{-webkit-backface-visibility:hidden;backface-visibility:hidden}@media screen and (max-width:59.9375em){[dir=ltr] .md-search__inner{left:0}[dir=rtl] .md-search__inner{right:0}.md-search__inner{height:0;opacity:0;overflow:hidden;position:fixed;top:0;transform:translateX(5%);transition:width 0ms .3s,height 0ms .3s,transform .15s cubic-bezier(.4,0,.2,1) .15s,opacity .15s .15s;width:0;z-index:2}[dir=rtl] .md-search__inner{transform:translateX(-5%)}[data-md-toggle=search]:checked~.md-header .md-search__inner{height:100%;opacity:1;transform:translateX(0);transition:width 0ms 0ms,height 0ms 0ms,transform .15s cubic-bezier(.1,.7,.1,1) .15s,opacity .15s .15s;width:100%}}@media screen and (min-width:60em){[dir=ltr] .md-search__inner{float:right}[dir=rtl] .md-search__inner{float:left}.md-search__inner{padding:.1rem 0;position:relative;transition:width .25s cubic-bezier(.1,.7,.1,1);width:11.7rem}}@media screen and (min-width:60em) and (max-width:76.1875em){[data-md-toggle=search]:checked~.md-header .md-search__inner{width:23.4rem}}@media screen and (min-width:76.25em){[data-md-toggle=search]:checked~.md-header .md-search__inner{width:34.4rem}}.md-search__form{background-color:var(--md-default-bg-color);box-shadow:0 0 .6rem transparent;height:2.4rem;position:relative;transition:color .25s,background-color .25s;z-index:2}@media screen and (min-width:60em){.md-search__form{background-color:rgba(0,0,0,.26);border-radius:.1rem;height:1.8rem}.md-search__form:hover{background-color:hsla(0,0%,100%,.12)}}[data-md-toggle=search]:checked~.md-header .md-search__form{background-color:var(--md-default-bg-color);border-radius:.1rem .1rem 0 0;box-shadow:0 0 .6rem rgba(0,0,0,.07);color:var(--md-default-fg-color)}[dir=ltr] .md-search__input{padding-left:3.6rem;padding-right:2.2rem}[dir=rtl] .md-search__input{padding-left:2.2rem;padding-right:3.6rem}.md-search__input{background:transparent;font-size:.9rem;height:100%;position:relative;text-overflow:ellipsis;width:100%;z-index:2}.md-search__input::-moz-placeholder{-moz-transition:color .25s;transition:color .25s}.md-search__input::placeholder{transition:color .25s}.md-search__input::-moz-placeholder{color:var(--md-default-fg-color--light)}.md-search__input::placeholder,.md-search__input~.md-search__icon{color:var(--md-default-fg-color--light)}.md-search__input::-ms-clear{display:none}@media screen and (max-width:59.9375em){.md-search__input{font-size:.9rem;height:2.4rem;width:100%}}@media screen and (min-width:60em){[dir=ltr] .md-search__input{padding-left:2.2rem}[dir=rtl] .md-search__input{padding-right:2.2rem}.md-search__input{color:inherit;font-size:.8rem}.md-search__input::-moz-placeholder{color:var(--md-primary-bg-color--light)}.md-search__input::placeholder{color:var(--md-primary-bg-color--light)}.md-search__input+.md-search__icon{color:var(--md-primary-bg-color)}[data-md-toggle=search]:checked~.md-header .md-search__input{text-overflow:clip}[data-md-toggle=search]:checked~.md-header .md-search__input::-moz-placeholder{color:var(--md-default-fg-color--light)}[data-md-toggle=search]:checked~.md-header .md-search__input+.md-search__icon,[data-md-toggle=search]:checked~.md-header .md-search__input::placeholder{color:var(--md-default-fg-color--light)}}.md-search__icon{cursor:pointer;display:inline-block;height:1.2rem;transition:color .25s,opacity .25s;width:1.2rem}.md-search__icon:hover{opacity:.7}[dir=ltr] .md-search__icon[for=__search]{left:.5rem}[dir=rtl] .md-search__icon[for=__search]{right:.5rem}.md-search__icon[for=__search]{position:absolute;top:.3rem;z-index:2}[dir=rtl] .md-search__icon[for=__search] svg{transform:scaleX(-1)}@media screen and (max-width:59.9375em){[dir=ltr] .md-search__icon[for=__search]{left:.8rem}[dir=rtl] .md-search__icon[for=__search]{right:.8rem}.md-search__icon[for=__search]{top:.6rem}.md-search__icon[for=__search] svg:first-child{display:none}}@media screen and (min-width:60em){.md-search__icon[for=__search]{pointer-events:none}.md-search__icon[for=__search] svg:last-child{display:none}}[dir=ltr] .md-search__options{right:.5rem}[dir=rtl] .md-search__options{left:.5rem}.md-search__options{pointer-events:none;position:absolute;top:.3rem;z-index:2}@media screen and (max-width:59.9375em){[dir=ltr] .md-search__options{right:.8rem}[dir=rtl] .md-search__options{left:.8rem}.md-search__options{top:.6rem}}[dir=ltr] .md-search__options>*{margin-left:.2rem}[dir=rtl] .md-search__options>*{margin-right:.2rem}.md-search__options>*{color:var(--md-default-fg-color--light);opacity:0;transform:scale(.75);transition:transform .15s cubic-bezier(.1,.7,.1,1),opacity .15s}.md-search__options>:not(.focus-visible){-webkit-tap-highlight-color:transparent;outline:none}[data-md-toggle=search]:checked~.md-header .md-search__input:valid~.md-search__options>*{opacity:1;pointer-events:auto;transform:scale(1)}[data-md-toggle=search]:checked~.md-header .md-search__input:valid~.md-search__options>:hover{opacity:.7}[dir=ltr] .md-search__suggest{padding-left:3.6rem;padding-right:2.2rem}[dir=rtl] .md-search__suggest{padding-left:2.2rem;padding-right:3.6rem}.md-search__suggest{align-items:center;color:var(--md-default-fg-color--lighter);display:flex;font-size:.9rem;height:100%;opacity:0;position:absolute;top:0;transition:opacity 50ms;white-space:nowrap;width:100%}@media screen and (min-width:60em){[dir=ltr] .md-search__suggest{padding-left:2.2rem}[dir=rtl] .md-search__suggest{padding-right:2.2rem}.md-search__suggest{font-size:.8rem}}[data-md-toggle=search]:checked~.md-header .md-search__suggest{opacity:1;transition:opacity .3s .1s}[dir=ltr] .md-search__output{border-bottom-left-radius:.1rem}[dir=ltr] .md-search__output,[dir=rtl] .md-search__output{border-bottom-right-radius:.1rem}[dir=rtl] .md-search__output{border-bottom-left-radius:.1rem}.md-search__output{overflow:hidden;position:absolute;width:100%;z-index:1}@media screen and (max-width:59.9375em){.md-search__output{bottom:0;top:2.4rem}}@media screen and (min-width:60em){.md-search__output{opacity:0;top:1.9rem;transition:opacity .4s}[data-md-toggle=search]:checked~.md-header .md-search__output{box-shadow:var(--md-shadow-z3);opacity:1}}.md-search__scrollwrap{-webkit-backface-visibility:hidden;backface-visibility:hidden;background-color:var(--md-default-bg-color);height:100%;overflow-y:auto;touch-action:pan-y}@media (-webkit-max-device-pixel-ratio:1),(max-resolution:1dppx){.md-search__scrollwrap{transform:translateZ(0)}}@media screen and (min-width:60em) and (max-width:76.1875em){.md-search__scrollwrap{width:23.4rem}}@media screen and (min-width:76.25em){.md-search__scrollwrap{width:34.4rem}}@media screen and (min-width:60em){.md-search__scrollwrap{max-height:0;scrollbar-color:var(--md-default-fg-color--lighter) transparent;scrollbar-width:thin}[data-md-toggle=search]:checked~.md-header .md-search__scrollwrap{max-height:75vh}.md-search__scrollwrap:hover{scrollbar-color:var(--md-accent-fg-color) transparent}.md-search__scrollwrap::-webkit-scrollbar{height:.2rem;width:.2rem}.md-search__scrollwrap::-webkit-scrollbar-thumb{background-color:var(--md-default-fg-color--lighter)}.md-search__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:var(--md-accent-fg-color)}}.md-search-result{color:var(--md-default-fg-color);word-break:break-word}.md-search-result__meta{background-color:var(--md-default-fg-color--lightest);color:var(--md-default-fg-color--light);font-size:.64rem;line-height:1.8rem;padding:0 .8rem;scroll-snap-align:start}@media screen and (min-width:60em){[dir=ltr] .md-search-result__meta{padding-left:2.2rem}[dir=rtl] .md-search-result__meta{padding-right:2.2rem}}.md-search-result__list{list-style:none;margin:0;padding:0;-webkit-user-select:none;-moz-user-select:none;user-select:none}.md-search-result__item{box-shadow:0 -.05rem var(--md-default-fg-color--lightest)}.md-search-result__item:first-child{box-shadow:none}.md-search-result__link{display:block;outline:none;scroll-snap-align:start;transition:background-color .25s}.md-search-result__link:-webkit-any(:focus,:hover){background-color:var(--md-accent-fg-color--transparent)}.md-search-result__link:-moz-any(:focus,:hover){background-color:var(--md-accent-fg-color--transparent)}.md-search-result__link:is(:focus,:hover){background-color:var(--md-accent-fg-color--transparent)}.md-search-result__link:last-child p:last-child{margin-bottom:.6rem}.md-search-result__more summary{color:var(--md-typeset-a-color);cursor:pointer;display:block;font-size:.64rem;outline:none;padding:.75em .8rem;scroll-snap-align:start;transition:color .25s,background-color .25s}@media screen and (min-width:60em){[dir=ltr] .md-search-result__more summary{padding-left:2.2rem}[dir=rtl] .md-search-result__more summary{padding-right:2.2rem}}.md-search-result__more summary:-webkit-any(:focus,:hover){background-color:var(--md-accent-fg-color--transparent);color:var(--md-accent-fg-color)}.md-search-result__more summary:-moz-any(:focus,:hover){background-color:var(--md-accent-fg-color--transparent);color:var(--md-accent-fg-color)}.md-search-result__more summary:is(:focus,:hover){background-color:var(--md-accent-fg-color--transparent);color:var(--md-accent-fg-color)}.md-search-result__more summary::marker{display:none}.md-search-result__more summary::-webkit-details-marker{display:none}.md-search-result__more summary~*>*{opacity:.65}.md-search-result__article{overflow:hidden;padding:0 .8rem;position:relative}@media screen and (min-width:60em){[dir=ltr] .md-search-result__article{padding-left:2.2rem}[dir=rtl] .md-search-result__article{padding-right:2.2rem}}.md-search-result__article--document .md-search-result__title{font-size:.8rem;font-weight:400;line-height:1.4;margin:.55rem 0}[dir=ltr] .md-search-result__icon{left:0}[dir=rtl] .md-search-result__icon{right:0}.md-search-result__icon{color:var(--md-default-fg-color--light);height:1.2rem;margin:.5rem;position:absolute;width:1.2rem}@media screen and (max-width:59.9375em){.md-search-result__icon{display:none}}.md-search-result__icon:after{background-color:currentcolor;content:"";display:inline-block;height:100%;-webkit-mask-image:var(--md-search-result-icon);mask-image:var(--md-search-result-icon);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:100%}[dir=rtl] .md-search-result__icon:after{transform:scaleX(-1)}.md-search-result__title{font-size:.64rem;font-weight:700;line-height:1.6;margin:.5em 0}.md-search-result__teaser{-webkit-box-orient:vertical;-webkit-line-clamp:2;color:var(--md-default-fg-color--light);display:-webkit-box;font-size:.64rem;line-height:1.6;margin:.5em 0;max-height:2rem;overflow:hidden;text-overflow:ellipsis}@media screen and (max-width:44.9375em){.md-search-result__teaser{-webkit-line-clamp:3;max-height:3rem}}@media screen and (min-width:60em) and (max-width:76.1875em){.md-search-result__teaser{-webkit-line-clamp:3;max-height:3rem}}.md-search-result__teaser mark{background-color:transparent;text-decoration:underline}.md-search-result__terms{font-size:.64rem;font-style:italic;margin:.5em 0}.md-search-result mark{background-color:transparent;color:var(--md-accent-fg-color)}.md-select{position:relative;z-index:1}.md-select__inner{background-color:var(--md-default-bg-color);border-radius:.1rem;box-shadow:var(--md-shadow-z2);color:var(--md-default-fg-color);left:50%;margin-top:.2rem;max-height:0;opacity:0;position:absolute;top:calc(100% - .2rem);transform:translate3d(-50%,.3rem,0);transition:transform .25s 375ms,opacity .25s .25s,max-height 0ms .5s}.md-select:-webkit-any(:focus-within,:hover) .md-select__inner{max-height:10rem;opacity:1;transform:translate3d(-50%,0,0);-webkit-transition:transform .25s cubic-bezier(.1,.7,.1,1),opacity .25s,max-height 0ms;transition:transform .25s cubic-bezier(.1,.7,.1,1),opacity .25s,max-height 0ms}.md-select:-moz-any(:focus-within,:hover) .md-select__inner{max-height:10rem;opacity:1;transform:translate3d(-50%,0,0);-moz-transition:transform .25s cubic-bezier(.1,.7,.1,1),opacity .25s,max-height 0ms;transition:transform .25s cubic-bezier(.1,.7,.1,1),opacity .25s,max-height 0ms}.md-select:is(:focus-within,:hover) .md-select__inner{max-height:10rem;opacity:1;transform:translate3d(-50%,0,0);transition:transform .25s cubic-bezier(.1,.7,.1,1),opacity .25s,max-height 0ms}.md-select__inner:after{border-bottom:.2rem solid transparent;border-bottom-color:var(--md-default-bg-color);border-left:.2rem solid transparent;border-right:.2rem solid transparent;border-top:0;content:"";height:0;left:50%;margin-left:-.2rem;margin-top:-.2rem;position:absolute;top:0;width:0}.md-select__list{border-radius:.1rem;font-size:.8rem;list-style-type:none;margin:0;max-height:inherit;overflow:auto;padding:0}.md-select__item{line-height:1.8rem}[dir=ltr] .md-select__link{padding-left:.6rem;padding-right:1.2rem}[dir=rtl] .md-select__link{padding-left:1.2rem;padding-right:.6rem}.md-select__link{cursor:pointer;display:block;outline:none;scroll-snap-align:start;transition:background-color .25s,color .25s;width:100%}.md-select__link:-webkit-any(:focus,:hover){color:var(--md-accent-fg-color)}.md-select__link:-moz-any(:focus,:hover){color:var(--md-accent-fg-color)}.md-select__link:is(:focus,:hover){color:var(--md-accent-fg-color)}.md-select__link:focus{background-color:var(--md-default-fg-color--lightest)}.md-sidebar{align-self:flex-start;flex-shrink:0;padding:1.2rem 0;position:sticky;top:2.4rem;width:12.1rem}@media print{.md-sidebar{display:none}}@media screen and (max-width:76.1875em){[dir=ltr] .md-sidebar--primary{left:-12.1rem}[dir=rtl] .md-sidebar--primary{right:-12.1rem}.md-sidebar--primary{background-color:var(--md-default-bg-color);display:block;height:100%;position:fixed;top:0;transform:translateX(0);transition:transform .25s cubic-bezier(.4,0,.2,1),box-shadow .25s;width:12.1rem;z-index:5}[data-md-toggle=drawer]:checked~.md-container .md-sidebar--primary{box-shadow:var(--md-shadow-z3);transform:translateX(12.1rem)}[dir=rtl] [data-md-toggle=drawer]:checked~.md-container .md-sidebar--primary{transform:translateX(-12.1rem)}.md-sidebar--primary .md-sidebar__scrollwrap{bottom:0;left:0;margin:0;overflow:hidden;position:absolute;right:0;scroll-snap-type:none;top:0}}@media screen and (min-width:76.25em){.md-sidebar{height:0}.no-js .md-sidebar{height:auto}.md-header--lifted~.md-container .md-sidebar{top:4.8rem}}.md-sidebar--secondary{display:none;order:2}@media screen and (min-width:60em){.md-sidebar--secondary{height:0}.no-js .md-sidebar--secondary{height:auto}.md-sidebar--secondary:not([hidden]){display:block}.md-sidebar--secondary .md-sidebar__scrollwrap{touch-action:pan-y}}.md-sidebar__scrollwrap{scrollbar-gutter:stable;-webkit-backface-visibility:hidden;backface-visibility:hidden;margin:0 .2rem;overflow-y:auto;scrollbar-color:var(--md-default-fg-color--lighter) transparent;scrollbar-width:thin}.md-sidebar__scrollwrap:hover{scrollbar-color:var(--md-accent-fg-color) transparent}.md-sidebar__scrollwrap::-webkit-scrollbar{height:.2rem;width:.2rem}.md-sidebar__scrollwrap::-webkit-scrollbar-thumb{background-color:var(--md-default-fg-color--lighter)}.md-sidebar__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:var(--md-accent-fg-color)}@supports selector(::-webkit-scrollbar){.md-sidebar__scrollwrap{scrollbar-gutter:auto}[dir=ltr] .md-sidebar__inner{padding-right:calc(100% - 11.5rem)}[dir=rtl] .md-sidebar__inner{padding-left:calc(100% - 11.5rem)}}@media screen and (max-width:76.1875em){.md-overlay{background-color:rgba(0,0,0,.54);height:0;opacity:0;position:fixed;top:0;transition:width 0ms .25s,height 0ms .25s,opacity .25s;width:0;z-index:5}[data-md-toggle=drawer]:checked~.md-overlay{height:100%;opacity:1;transition:width 0ms,height 0ms,opacity .25s;width:100%}}@keyframes facts{0%{height:0}to{height:.65rem}}@keyframes fact{0%{opacity:0;transform:translateY(100%)}50%{opacity:0}to{opacity:1;transform:translateY(0)}}:root{--md-source-forks-icon:url('data:image/svg+xml;charset=utf-8,');--md-source-repositories-icon:url('data:image/svg+xml;charset=utf-8,');--md-source-stars-icon:url('data:image/svg+xml;charset=utf-8,');--md-source-version-icon:url('data:image/svg+xml;charset=utf-8,')}.md-source{-webkit-backface-visibility:hidden;backface-visibility:hidden;display:block;font-size:.65rem;line-height:1.2;outline-color:var(--md-accent-fg-color);transition:opacity .25s;white-space:nowrap}.md-source:hover{opacity:.7}.md-source__icon{display:inline-block;height:2.4rem;vertical-align:middle;width:2rem}[dir=ltr] .md-source__icon svg{margin-left:.6rem}[dir=rtl] .md-source__icon svg{margin-right:.6rem}.md-source__icon svg{margin-top:.6rem}[dir=ltr] .md-source__icon+.md-source__repository{margin-left:-2rem}[dir=rtl] .md-source__icon+.md-source__repository{margin-right:-2rem}[dir=ltr] .md-source__icon+.md-source__repository{padding-left:2rem}[dir=rtl] .md-source__icon+.md-source__repository{padding-right:2rem}[dir=ltr] .md-source__repository{margin-left:.6rem}[dir=rtl] .md-source__repository{margin-right:.6rem}.md-source__repository{display:inline-block;max-width:calc(100% - 1.2rem);overflow:hidden;text-overflow:ellipsis;vertical-align:middle}.md-source__facts{display:flex;font-size:.55rem;gap:.4rem;list-style-type:none;margin:.1rem 0 0;opacity:.75;overflow:hidden;padding:0;width:100%}.md-source__repository--active .md-source__facts{animation:facts .25s ease-in}.md-source__fact{overflow:hidden;text-overflow:ellipsis}.md-source__repository--active .md-source__fact{animation:fact .4s ease-out}[dir=ltr] .md-source__fact:before{margin-right:.1rem}[dir=rtl] .md-source__fact:before{margin-left:.1rem}.md-source__fact:before{background-color:currentcolor;content:"";display:inline-block;height:.6rem;-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;vertical-align:text-top;width:.6rem}.md-source__fact:nth-child(1n+2){flex-shrink:0}.md-source__fact--version:before{-webkit-mask-image:var(--md-source-version-icon);mask-image:var(--md-source-version-icon)}.md-source__fact--stars:before{-webkit-mask-image:var(--md-source-stars-icon);mask-image:var(--md-source-stars-icon)}.md-source__fact--forks:before{-webkit-mask-image:var(--md-source-forks-icon);mask-image:var(--md-source-forks-icon)}.md-source__fact--repositories:before{-webkit-mask-image:var(--md-source-repositories-icon);mask-image:var(--md-source-repositories-icon)}.md-tabs{background-color:var(--md-primary-fg-color);color:var(--md-primary-bg-color);display:block;line-height:1.3;overflow:auto;width:100%;z-index:3}@media print{.md-tabs{display:none}}@media screen and (max-width:76.1875em){.md-tabs{display:none}}.md-tabs[hidden]{pointer-events:none}[dir=ltr] .md-tabs__list{margin-left:.2rem}[dir=rtl] .md-tabs__list{margin-right:.2rem}.md-tabs__list{contain:content;list-style:none;margin:0;padding:0;white-space:nowrap}.md-tabs__item{display:inline-block;height:2.4rem;padding-left:.6rem;padding-right:.6rem}.md-tabs__link{-webkit-backface-visibility:hidden;backface-visibility:hidden;display:block;font-size:.7rem;margin-top:.8rem;opacity:.7;outline-color:var(--md-accent-fg-color);outline-offset:.2rem;transition:transform .4s cubic-bezier(.1,.7,.1,1),opacity .25s}.md-tabs__link--active,.md-tabs__link:-webkit-any(:focus,:hover){color:inherit;opacity:1}.md-tabs__link--active,.md-tabs__link:-moz-any(:focus,:hover){color:inherit;opacity:1}.md-tabs__link--active,.md-tabs__link:is(:focus,:hover){color:inherit;opacity:1}.md-tabs__item:nth-child(2) .md-tabs__link{transition-delay:20ms}.md-tabs__item:nth-child(3) .md-tabs__link{transition-delay:40ms}.md-tabs__item:nth-child(4) .md-tabs__link{transition-delay:60ms}.md-tabs__item:nth-child(5) .md-tabs__link{transition-delay:80ms}.md-tabs__item:nth-child(6) .md-tabs__link{transition-delay:.1s}.md-tabs__item:nth-child(7) .md-tabs__link{transition-delay:.12s}.md-tabs__item:nth-child(8) .md-tabs__link{transition-delay:.14s}.md-tabs__item:nth-child(9) .md-tabs__link{transition-delay:.16s}.md-tabs__item:nth-child(10) .md-tabs__link{transition-delay:.18s}.md-tabs__item:nth-child(11) .md-tabs__link{transition-delay:.2s}.md-tabs__item:nth-child(12) .md-tabs__link{transition-delay:.22s}.md-tabs__item:nth-child(13) .md-tabs__link{transition-delay:.24s}.md-tabs__item:nth-child(14) .md-tabs__link{transition-delay:.26s}.md-tabs__item:nth-child(15) .md-tabs__link{transition-delay:.28s}.md-tabs__item:nth-child(16) .md-tabs__link{transition-delay:.3s}.md-tabs[hidden] .md-tabs__link{opacity:0;transform:translateY(50%);transition:transform 0ms .1s,opacity .1s}:root{--md-tag-icon:url('data:image/svg+xml;charset=utf-8,')}.md-typeset .md-tags{margin-bottom:.75em;margin-top:-.125em}[dir=ltr] .md-typeset .md-tag{margin-right:.5em}[dir=rtl] .md-typeset .md-tag{margin-left:.5em}.md-typeset .md-tag{background:var(--md-default-fg-color--lightest);border-radius:2.4rem;display:inline-block;font-size:.64rem;font-weight:700;letter-spacing:normal;line-height:1.6;margin-bottom:.5em;padding:.3125em .9375em;vertical-align:middle}.md-typeset .md-tag[href]{-webkit-tap-highlight-color:transparent;color:inherit;outline:none;transition:color 125ms,background-color 125ms}.md-typeset .md-tag[href]:focus,.md-typeset .md-tag[href]:hover{background-color:var(--md-accent-fg-color);color:var(--md-accent-bg-color)}[id]>.md-typeset .md-tag{vertical-align:text-top}.md-typeset .md-tag-icon:before{background-color:var(--md-default-fg-color--lighter);content:"";display:inline-block;height:1.2em;margin-right:.4em;-webkit-mask-image:var(--md-tag-icon);mask-image:var(--md-tag-icon);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;transition:background-color 125ms;vertical-align:text-bottom;width:1.2em}.md-typeset .md-tag-icon:-webkit-any(a:focus,a:hover):before{background-color:var(--md-accent-bg-color)}.md-typeset .md-tag-icon:-moz-any(a:focus,a:hover):before{background-color:var(--md-accent-bg-color)}.md-typeset .md-tag-icon:is(a:focus,a:hover):before{background-color:var(--md-accent-bg-color)}@keyframes pulse{0%{box-shadow:0 0 0 0 var(--md-default-fg-color--lightest);transform:scale(.95)}75%{box-shadow:0 0 0 .625em transparent;transform:scale(1)}to{box-shadow:0 0 0 0 transparent;transform:scale(.95)}}:root{--md-tooltip-width:20rem}.md-tooltip{-webkit-backface-visibility:hidden;backface-visibility:hidden;background-color:var(--md-default-bg-color);border-radius:.1rem;box-shadow:var(--md-shadow-z2);color:var(--md-default-fg-color);font-family:var(--md-text-font-family);left:clamp(var(--md-tooltip-0,0rem) + .8rem,var(--md-tooltip-x),100vw + var(--md-tooltip-0,0rem) + .8rem - var(--md-tooltip-width) - 2 * .8rem);max-width:calc(100vw - 1.6rem);opacity:0;position:absolute;top:var(--md-tooltip-y);transform:translateY(-.4rem);transition:transform 0ms .25s,opacity .25s,z-index .25s;width:var(--md-tooltip-width);z-index:0}.md-tooltip--active{opacity:1;transform:translateY(0);transition:transform .25s cubic-bezier(.1,.7,.1,1),opacity .25s,z-index 0ms;z-index:2}:-webkit-any(.focus-visible>.md-tooltip,.md-tooltip:target){outline:var(--md-accent-fg-color) auto}:-moz-any(.focus-visible>.md-tooltip,.md-tooltip:target){outline:var(--md-accent-fg-color) auto}:is(.focus-visible>.md-tooltip,.md-tooltip:target){outline:var(--md-accent-fg-color) auto}.md-tooltip__inner{font-size:.64rem;padding:.8rem}.md-tooltip__inner.md-typeset>:first-child{margin-top:0}.md-tooltip__inner.md-typeset>:last-child{margin-bottom:0}.md-annotation{font-weight:400;outline:none;white-space:normal}[dir=rtl] .md-annotation{direction:rtl}.md-annotation:not([hidden]){display:inline-block;line-height:1.325}.md-annotation__index{cursor:pointer;font-family:var(--md-code-font-family);font-size:.85em;margin:0 1ch;outline:none;position:relative;-webkit-user-select:none;-moz-user-select:none;user-select:none;z-index:0}.md-annotation .md-annotation__index{color:#fff;transition:z-index .25s}.md-annotation .md-annotation__index:-webkit-any(:focus,:hover){color:#fff}.md-annotation .md-annotation__index:-moz-any(:focus,:hover){color:#fff}.md-annotation .md-annotation__index:is(:focus,:hover){color:#fff}.md-annotation__index:after{background-color:var(--md-default-fg-color--lighter);border-radius:2ch;content:"";height:2.2ch;left:-.125em;margin:0 -.4ch;padding:0 .4ch;position:absolute;top:0;transition:color .25s,background-color .25s;width:calc(100% + 1.2ch);width:max(2.2ch,100% + 1.2ch);z-index:-1}@media not all and (prefers-reduced-motion){[data-md-visible]>.md-annotation__index:after{animation:pulse 2s infinite}}.md-tooltip--active+.md-annotation__index:after{animation:none;transition:color .25s,background-color .25s}code .md-annotation__index{font-family:var(--md-code-font-family);font-size:inherit}:-webkit-any(.md-tooltip--active+.md-annotation__index,:hover>.md-annotation__index){color:var(--md-accent-bg-color)}:-moz-any(.md-tooltip--active+.md-annotation__index,:hover>.md-annotation__index){color:var(--md-accent-bg-color)}:is(.md-tooltip--active+.md-annotation__index,:hover>.md-annotation__index){color:var(--md-accent-bg-color)}:-webkit-any(.md-tooltip--active+.md-annotation__index,:hover>.md-annotation__index):after{background-color:var(--md-accent-fg-color)}:-moz-any(.md-tooltip--active+.md-annotation__index,:hover>.md-annotation__index):after{background-color:var(--md-accent-fg-color)}:is(.md-tooltip--active+.md-annotation__index,:hover>.md-annotation__index):after{background-color:var(--md-accent-fg-color)}.md-tooltip--active+.md-annotation__index{animation:none;transition:none;z-index:2}.md-annotation__index [data-md-annotation-id]{display:inline-block;line-height:90%}.md-annotation__index [data-md-annotation-id]:before{content:attr(data-md-annotation-id);display:inline-block;padding-bottom:.1em;transform:scale(1.15);transition:transform .4s cubic-bezier(.1,.7,.1,1);vertical-align:.065em}@media not print{.md-annotation__index [data-md-annotation-id]:before{content:"+"}:focus-within>.md-annotation__index [data-md-annotation-id]:before{transform:scale(1.25) rotate(45deg)}}[dir=ltr] .md-top{margin-left:50%}[dir=rtl] .md-top{margin-right:50%}.md-top{background-color:var(--md-default-bg-color);border-radius:1.6rem;box-shadow:var(--md-shadow-z2);color:var(--md-default-fg-color--light);display:block;font-size:.7rem;outline:none;padding:.4rem .8rem;position:fixed;top:3.2rem;transform:translate(-50%);transition:color 125ms,background-color 125ms,transform 125ms cubic-bezier(.4,0,.2,1),opacity 125ms;z-index:2}@media print{.md-top{display:none}}[dir=rtl] .md-top{transform:translate(50%)}.md-top[hidden]{opacity:0;pointer-events:none;transform:translate(-50%,.2rem);transition-duration:0ms}[dir=rtl] .md-top[hidden]{transform:translate(50%,.2rem)}.md-top:-webkit-any(:focus,:hover){background-color:var(--md-accent-fg-color);color:var(--md-accent-bg-color)}.md-top:-moz-any(:focus,:hover){background-color:var(--md-accent-fg-color);color:var(--md-accent-bg-color)}.md-top:is(:focus,:hover){background-color:var(--md-accent-fg-color);color:var(--md-accent-bg-color)}.md-top svg{display:inline-block;vertical-align:-.5em}@keyframes hoverfix{0%{pointer-events:none}}:root{--md-version-icon:url('data:image/svg+xml;charset=utf-8,')}.md-version{flex-shrink:0;font-size:.8rem;height:2.4rem}[dir=ltr] .md-version__current{margin-left:1.4rem;margin-right:.4rem}[dir=rtl] .md-version__current{margin-left:.4rem;margin-right:1.4rem}.md-version__current{color:inherit;cursor:pointer;outline:none;position:relative;top:.05rem}[dir=ltr] .md-version__current:after{margin-left:.4rem}[dir=rtl] .md-version__current:after{margin-right:.4rem}.md-version__current:after{background-color:currentcolor;content:"";display:inline-block;height:.6rem;-webkit-mask-image:var(--md-version-icon);mask-image:var(--md-version-icon);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:.4rem}.md-version__list{background-color:var(--md-default-bg-color);border-radius:.1rem;box-shadow:var(--md-shadow-z2);color:var(--md-default-fg-color);list-style-type:none;margin:.2rem .8rem;max-height:0;opacity:0;overflow:auto;padding:0;position:absolute;scroll-snap-type:y mandatory;top:.15rem;transition:max-height 0ms .5s,opacity .25s .25s;z-index:3}.md-version:-webkit-any(:focus-within,:hover) .md-version__list{max-height:10rem;opacity:1;-webkit-transition:max-height 0ms,opacity .25s;transition:max-height 0ms,opacity .25s}.md-version:-moz-any(:focus-within,:hover) .md-version__list{max-height:10rem;opacity:1;-moz-transition:max-height 0ms,opacity .25s;transition:max-height 0ms,opacity .25s}.md-version:is(:focus-within,:hover) .md-version__list{max-height:10rem;opacity:1;transition:max-height 0ms,opacity .25s}@media (pointer:coarse){.md-version:hover .md-version__list{animation:hoverfix .25s forwards}.md-version:focus-within .md-version__list{animation:none}}.md-version__item{line-height:1.8rem}[dir=ltr] .md-version__link{padding-left:.6rem;padding-right:1.2rem}[dir=rtl] .md-version__link{padding-left:1.2rem;padding-right:.6rem}.md-version__link{cursor:pointer;display:block;outline:none;scroll-snap-align:start;transition:color .25s,background-color .25s;white-space:nowrap;width:100%}.md-version__link:-webkit-any(:focus,:hover){color:var(--md-accent-fg-color)}.md-version__link:-moz-any(:focus,:hover){color:var(--md-accent-fg-color)}.md-version__link:is(:focus,:hover){color:var(--md-accent-fg-color)}.md-version__link:focus{background-color:var(--md-default-fg-color--lightest)}:root{--md-admonition-icon--note:url('data:image/svg+xml;charset=utf-8,');--md-admonition-icon--abstract:url('data:image/svg+xml;charset=utf-8,');--md-admonition-icon--info:url('data:image/svg+xml;charset=utf-8,');--md-admonition-icon--tip:url('data:image/svg+xml;charset=utf-8,');--md-admonition-icon--success:url('data:image/svg+xml;charset=utf-8,');--md-admonition-icon--question:url('data:image/svg+xml;charset=utf-8,');--md-admonition-icon--warning:url('data:image/svg+xml;charset=utf-8,');--md-admonition-icon--failure:url('data:image/svg+xml;charset=utf-8,');--md-admonition-icon--danger:url('data:image/svg+xml;charset=utf-8,');--md-admonition-icon--bug:url('data:image/svg+xml;charset=utf-8,');--md-admonition-icon--example:url('data:image/svg+xml;charset=utf-8,');--md-admonition-icon--quote:url('data:image/svg+xml;charset=utf-8,')}.md-typeset .admonition,.md-typeset details{background-color:var(--md-admonition-bg-color);border:.05rem solid #448aff;border-radius:.2rem;box-shadow:var(--md-shadow-z1);color:var(--md-admonition-fg-color);display:flow-root;font-size:.64rem;margin:1.5625em 0;padding:0 .6rem;page-break-inside:avoid}@media print{.md-typeset .admonition,.md-typeset details{box-shadow:none}}.md-typeset .admonition>*,.md-typeset details>*{box-sizing:border-box}.md-typeset .admonition :-webkit-any(.admonition,details),.md-typeset details :-webkit-any(.admonition,details){margin-bottom:1em;margin-top:1em}.md-typeset .admonition :-moz-any(.admonition,details),.md-typeset details :-moz-any(.admonition,details){margin-bottom:1em;margin-top:1em}.md-typeset .admonition :is(.admonition,details),.md-typeset details :is(.admonition,details){margin-bottom:1em;margin-top:1em}.md-typeset .admonition .md-typeset__scrollwrap,.md-typeset details .md-typeset__scrollwrap{margin:1em -.6rem}.md-typeset .admonition .md-typeset__table,.md-typeset details .md-typeset__table{padding:0 .6rem}.md-typeset .admonition>.tabbed-set:only-child,.md-typeset details>.tabbed-set:only-child{margin-top:0}html .md-typeset .admonition>:last-child,html .md-typeset details>:last-child{margin-bottom:.6rem}[dir=ltr] .md-typeset .admonition-title,[dir=ltr] .md-typeset summary{padding-left:2rem;padding-right:.6rem}[dir=rtl] .md-typeset .admonition-title,[dir=rtl] .md-typeset summary{padding-left:.6rem;padding-right:2rem}[dir=ltr] .md-typeset .admonition-title,[dir=ltr] .md-typeset summary{border-left-width:.2rem}[dir=rtl] .md-typeset .admonition-title,[dir=rtl] .md-typeset summary{border-right-width:.2rem}[dir=ltr] .md-typeset .admonition-title,[dir=ltr] .md-typeset summary{border-top-left-radius:.1rem}[dir=ltr] .md-typeset .admonition-title,[dir=ltr] .md-typeset summary,[dir=rtl] .md-typeset .admonition-title,[dir=rtl] .md-typeset summary{border-top-right-radius:.1rem}[dir=rtl] .md-typeset .admonition-title,[dir=rtl] .md-typeset summary{border-top-left-radius:.1rem}.md-typeset .admonition-title,.md-typeset summary{background-color:rgba(68,138,255,.1);border:none;font-weight:700;margin:0 -.6rem;padding-bottom:.4rem;padding-top:.4rem;position:relative}html .md-typeset .admonition-title:last-child,html .md-typeset summary:last-child{margin-bottom:0}[dir=ltr] .md-typeset .admonition-title:before,[dir=ltr] .md-typeset summary:before{left:.6rem}[dir=rtl] .md-typeset .admonition-title:before,[dir=rtl] .md-typeset summary:before{right:.6rem}.md-typeset .admonition-title:before,.md-typeset summary:before{background-color:#448aff;content:"";height:1rem;-webkit-mask-image:var(--md-admonition-icon--note);mask-image:var(--md-admonition-icon--note);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;position:absolute;top:.625em;width:1rem}.md-typeset .admonition-title code,.md-typeset summary code{box-shadow:0 0 0 .05rem var(--md-default-fg-color--lightest)}.md-typeset :-webkit-any(.admonition,details):-webkit-any(.note){border-color:#448aff}.md-typeset :-moz-any(.admonition,details):-moz-any(.note){border-color:#448aff}.md-typeset :is(.admonition,details):is(.note){border-color:#448aff}.md-typeset :-webkit-any(.note)>:-webkit-any(.admonition-title,summary){background-color:rgba(68,138,255,.1)}.md-typeset :-moz-any(.note)>:-moz-any(.admonition-title,summary){background-color:rgba(68,138,255,.1)}.md-typeset :is(.note)>:is(.admonition-title,summary){background-color:rgba(68,138,255,.1)}.md-typeset :-webkit-any(.note)>:-webkit-any(.admonition-title,summary):before{background-color:#448aff;-webkit-mask-image:var(--md-admonition-icon--note);mask-image:var(--md-admonition-icon--note)}.md-typeset :-moz-any(.note)>:-moz-any(.admonition-title,summary):before{background-color:#448aff;mask-image:var(--md-admonition-icon--note)}.md-typeset :is(.note)>:is(.admonition-title,summary):before{background-color:#448aff;-webkit-mask-image:var(--md-admonition-icon--note);mask-image:var(--md-admonition-icon--note)}.md-typeset :-webkit-any(.note)>:-webkit-any(.admonition-title,summary):after{color:#448aff}.md-typeset :-moz-any(.note)>:-moz-any(.admonition-title,summary):after{color:#448aff}.md-typeset :is(.note)>:is(.admonition-title,summary):after{color:#448aff}.md-typeset :-webkit-any(.admonition,details):-webkit-any(.abstract,.summary,.tldr){border-color:#00b0ff}.md-typeset :-moz-any(.admonition,details):-moz-any(.abstract,.summary,.tldr){border-color:#00b0ff}.md-typeset :is(.admonition,details):is(.abstract,.summary,.tldr){border-color:#00b0ff}.md-typeset :-webkit-any(.abstract,.summary,.tldr)>:-webkit-any(.admonition-title,summary){background-color:rgba(0,176,255,.1)}.md-typeset :-moz-any(.abstract,.summary,.tldr)>:-moz-any(.admonition-title,summary){background-color:rgba(0,176,255,.1)}.md-typeset :is(.abstract,.summary,.tldr)>:is(.admonition-title,summary){background-color:rgba(0,176,255,.1)}.md-typeset :-webkit-any(.abstract,.summary,.tldr)>:-webkit-any(.admonition-title,summary):before{background-color:#00b0ff;-webkit-mask-image:var(--md-admonition-icon--abstract);mask-image:var(--md-admonition-icon--abstract)}.md-typeset :-moz-any(.abstract,.summary,.tldr)>:-moz-any(.admonition-title,summary):before{background-color:#00b0ff;mask-image:var(--md-admonition-icon--abstract)}.md-typeset :is(.abstract,.summary,.tldr)>:is(.admonition-title,summary):before{background-color:#00b0ff;-webkit-mask-image:var(--md-admonition-icon--abstract);mask-image:var(--md-admonition-icon--abstract)}.md-typeset :-webkit-any(.abstract,.summary,.tldr)>:-webkit-any(.admonition-title,summary):after{color:#00b0ff}.md-typeset :-moz-any(.abstract,.summary,.tldr)>:-moz-any(.admonition-title,summary):after{color:#00b0ff}.md-typeset :is(.abstract,.summary,.tldr)>:is(.admonition-title,summary):after{color:#00b0ff}.md-typeset :-webkit-any(.admonition,details):-webkit-any(.info,.todo){border-color:#00b8d4}.md-typeset :-moz-any(.admonition,details):-moz-any(.info,.todo){border-color:#00b8d4}.md-typeset :is(.admonition,details):is(.info,.todo){border-color:#00b8d4}.md-typeset :-webkit-any(.info,.todo)>:-webkit-any(.admonition-title,summary){background-color:rgba(0,184,212,.1)}.md-typeset :-moz-any(.info,.todo)>:-moz-any(.admonition-title,summary){background-color:rgba(0,184,212,.1)}.md-typeset :is(.info,.todo)>:is(.admonition-title,summary){background-color:rgba(0,184,212,.1)}.md-typeset :-webkit-any(.info,.todo)>:-webkit-any(.admonition-title,summary):before{background-color:#00b8d4;-webkit-mask-image:var(--md-admonition-icon--info);mask-image:var(--md-admonition-icon--info)}.md-typeset :-moz-any(.info,.todo)>:-moz-any(.admonition-title,summary):before{background-color:#00b8d4;mask-image:var(--md-admonition-icon--info)}.md-typeset :is(.info,.todo)>:is(.admonition-title,summary):before{background-color:#00b8d4;-webkit-mask-image:var(--md-admonition-icon--info);mask-image:var(--md-admonition-icon--info)}.md-typeset :-webkit-any(.info,.todo)>:-webkit-any(.admonition-title,summary):after{color:#00b8d4}.md-typeset :-moz-any(.info,.todo)>:-moz-any(.admonition-title,summary):after{color:#00b8d4}.md-typeset :is(.info,.todo)>:is(.admonition-title,summary):after{color:#00b8d4}.md-typeset :-webkit-any(.admonition,details):-webkit-any(.tip,.hint,.important){border-color:#00bfa5}.md-typeset :-moz-any(.admonition,details):-moz-any(.tip,.hint,.important){border-color:#00bfa5}.md-typeset :is(.admonition,details):is(.tip,.hint,.important){border-color:#00bfa5}.md-typeset :-webkit-any(.tip,.hint,.important)>:-webkit-any(.admonition-title,summary){background-color:rgba(0,191,165,.1)}.md-typeset :-moz-any(.tip,.hint,.important)>:-moz-any(.admonition-title,summary){background-color:rgba(0,191,165,.1)}.md-typeset :is(.tip,.hint,.important)>:is(.admonition-title,summary){background-color:rgba(0,191,165,.1)}.md-typeset :-webkit-any(.tip,.hint,.important)>:-webkit-any(.admonition-title,summary):before{background-color:#00bfa5;-webkit-mask-image:var(--md-admonition-icon--tip);mask-image:var(--md-admonition-icon--tip)}.md-typeset :-moz-any(.tip,.hint,.important)>:-moz-any(.admonition-title,summary):before{background-color:#00bfa5;mask-image:var(--md-admonition-icon--tip)}.md-typeset :is(.tip,.hint,.important)>:is(.admonition-title,summary):before{background-color:#00bfa5;-webkit-mask-image:var(--md-admonition-icon--tip);mask-image:var(--md-admonition-icon--tip)}.md-typeset :-webkit-any(.tip,.hint,.important)>:-webkit-any(.admonition-title,summary):after{color:#00bfa5}.md-typeset :-moz-any(.tip,.hint,.important)>:-moz-any(.admonition-title,summary):after{color:#00bfa5}.md-typeset :is(.tip,.hint,.important)>:is(.admonition-title,summary):after{color:#00bfa5}.md-typeset :-webkit-any(.admonition,details):-webkit-any(.success,.check,.done){border-color:#00c853}.md-typeset :-moz-any(.admonition,details):-moz-any(.success,.check,.done){border-color:#00c853}.md-typeset :is(.admonition,details):is(.success,.check,.done){border-color:#00c853}.md-typeset :-webkit-any(.success,.check,.done)>:-webkit-any(.admonition-title,summary){background-color:rgba(0,200,83,.1)}.md-typeset :-moz-any(.success,.check,.done)>:-moz-any(.admonition-title,summary){background-color:rgba(0,200,83,.1)}.md-typeset :is(.success,.check,.done)>:is(.admonition-title,summary){background-color:rgba(0,200,83,.1)}.md-typeset :-webkit-any(.success,.check,.done)>:-webkit-any(.admonition-title,summary):before{background-color:#00c853;-webkit-mask-image:var(--md-admonition-icon--success);mask-image:var(--md-admonition-icon--success)}.md-typeset :-moz-any(.success,.check,.done)>:-moz-any(.admonition-title,summary):before{background-color:#00c853;mask-image:var(--md-admonition-icon--success)}.md-typeset :is(.success,.check,.done)>:is(.admonition-title,summary):before{background-color:#00c853;-webkit-mask-image:var(--md-admonition-icon--success);mask-image:var(--md-admonition-icon--success)}.md-typeset :-webkit-any(.success,.check,.done)>:-webkit-any(.admonition-title,summary):after{color:#00c853}.md-typeset :-moz-any(.success,.check,.done)>:-moz-any(.admonition-title,summary):after{color:#00c853}.md-typeset :is(.success,.check,.done)>:is(.admonition-title,summary):after{color:#00c853}.md-typeset :-webkit-any(.admonition,details):-webkit-any(.question,.help,.faq){border-color:#64dd17}.md-typeset :-moz-any(.admonition,details):-moz-any(.question,.help,.faq){border-color:#64dd17}.md-typeset :is(.admonition,details):is(.question,.help,.faq){border-color:#64dd17}.md-typeset :-webkit-any(.question,.help,.faq)>:-webkit-any(.admonition-title,summary){background-color:rgba(100,221,23,.1)}.md-typeset :-moz-any(.question,.help,.faq)>:-moz-any(.admonition-title,summary){background-color:rgba(100,221,23,.1)}.md-typeset :is(.question,.help,.faq)>:is(.admonition-title,summary){background-color:rgba(100,221,23,.1)}.md-typeset :-webkit-any(.question,.help,.faq)>:-webkit-any(.admonition-title,summary):before{background-color:#64dd17;-webkit-mask-image:var(--md-admonition-icon--question);mask-image:var(--md-admonition-icon--question)}.md-typeset :-moz-any(.question,.help,.faq)>:-moz-any(.admonition-title,summary):before{background-color:#64dd17;mask-image:var(--md-admonition-icon--question)}.md-typeset :is(.question,.help,.faq)>:is(.admonition-title,summary):before{background-color:#64dd17;-webkit-mask-image:var(--md-admonition-icon--question);mask-image:var(--md-admonition-icon--question)}.md-typeset :-webkit-any(.question,.help,.faq)>:-webkit-any(.admonition-title,summary):after{color:#64dd17}.md-typeset :-moz-any(.question,.help,.faq)>:-moz-any(.admonition-title,summary):after{color:#64dd17}.md-typeset :is(.question,.help,.faq)>:is(.admonition-title,summary):after{color:#64dd17}.md-typeset :-webkit-any(.admonition,details):-webkit-any(.warning,.caution,.attention){border-color:#ff9100}.md-typeset :-moz-any(.admonition,details):-moz-any(.warning,.caution,.attention){border-color:#ff9100}.md-typeset :is(.admonition,details):is(.warning,.caution,.attention){border-color:#ff9100}.md-typeset :-webkit-any(.warning,.caution,.attention)>:-webkit-any(.admonition-title,summary){background-color:rgba(255,145,0,.1)}.md-typeset :-moz-any(.warning,.caution,.attention)>:-moz-any(.admonition-title,summary){background-color:rgba(255,145,0,.1)}.md-typeset :is(.warning,.caution,.attention)>:is(.admonition-title,summary){background-color:rgba(255,145,0,.1)}.md-typeset :-webkit-any(.warning,.caution,.attention)>:-webkit-any(.admonition-title,summary):before{background-color:#ff9100;-webkit-mask-image:var(--md-admonition-icon--warning);mask-image:var(--md-admonition-icon--warning)}.md-typeset :-moz-any(.warning,.caution,.attention)>:-moz-any(.admonition-title,summary):before{background-color:#ff9100;mask-image:var(--md-admonition-icon--warning)}.md-typeset :is(.warning,.caution,.attention)>:is(.admonition-title,summary):before{background-color:#ff9100;-webkit-mask-image:var(--md-admonition-icon--warning);mask-image:var(--md-admonition-icon--warning)}.md-typeset :-webkit-any(.warning,.caution,.attention)>:-webkit-any(.admonition-title,summary):after{color:#ff9100}.md-typeset :-moz-any(.warning,.caution,.attention)>:-moz-any(.admonition-title,summary):after{color:#ff9100}.md-typeset :is(.warning,.caution,.attention)>:is(.admonition-title,summary):after{color:#ff9100}.md-typeset :-webkit-any(.admonition,details):-webkit-any(.failure,.fail,.missing){border-color:#ff5252}.md-typeset :-moz-any(.admonition,details):-moz-any(.failure,.fail,.missing){border-color:#ff5252}.md-typeset :is(.admonition,details):is(.failure,.fail,.missing){border-color:#ff5252}.md-typeset :-webkit-any(.failure,.fail,.missing)>:-webkit-any(.admonition-title,summary){background-color:rgba(255,82,82,.1)}.md-typeset :-moz-any(.failure,.fail,.missing)>:-moz-any(.admonition-title,summary){background-color:rgba(255,82,82,.1)}.md-typeset :is(.failure,.fail,.missing)>:is(.admonition-title,summary){background-color:rgba(255,82,82,.1)}.md-typeset :-webkit-any(.failure,.fail,.missing)>:-webkit-any(.admonition-title,summary):before{background-color:#ff5252;-webkit-mask-image:var(--md-admonition-icon--failure);mask-image:var(--md-admonition-icon--failure)}.md-typeset :-moz-any(.failure,.fail,.missing)>:-moz-any(.admonition-title,summary):before{background-color:#ff5252;mask-image:var(--md-admonition-icon--failure)}.md-typeset :is(.failure,.fail,.missing)>:is(.admonition-title,summary):before{background-color:#ff5252;-webkit-mask-image:var(--md-admonition-icon--failure);mask-image:var(--md-admonition-icon--failure)}.md-typeset :-webkit-any(.failure,.fail,.missing)>:-webkit-any(.admonition-title,summary):after{color:#ff5252}.md-typeset :-moz-any(.failure,.fail,.missing)>:-moz-any(.admonition-title,summary):after{color:#ff5252}.md-typeset :is(.failure,.fail,.missing)>:is(.admonition-title,summary):after{color:#ff5252}.md-typeset :-webkit-any(.admonition,details):-webkit-any(.danger,.error){border-color:#ff1744}.md-typeset :-moz-any(.admonition,details):-moz-any(.danger,.error){border-color:#ff1744}.md-typeset :is(.admonition,details):is(.danger,.error){border-color:#ff1744}.md-typeset :-webkit-any(.danger,.error)>:-webkit-any(.admonition-title,summary){background-color:rgba(255,23,68,.1)}.md-typeset :-moz-any(.danger,.error)>:-moz-any(.admonition-title,summary){background-color:rgba(255,23,68,.1)}.md-typeset :is(.danger,.error)>:is(.admonition-title,summary){background-color:rgba(255,23,68,.1)}.md-typeset :-webkit-any(.danger,.error)>:-webkit-any(.admonition-title,summary):before{background-color:#ff1744;-webkit-mask-image:var(--md-admonition-icon--danger);mask-image:var(--md-admonition-icon--danger)}.md-typeset :-moz-any(.danger,.error)>:-moz-any(.admonition-title,summary):before{background-color:#ff1744;mask-image:var(--md-admonition-icon--danger)}.md-typeset :is(.danger,.error)>:is(.admonition-title,summary):before{background-color:#ff1744;-webkit-mask-image:var(--md-admonition-icon--danger);mask-image:var(--md-admonition-icon--danger)}.md-typeset :-webkit-any(.danger,.error)>:-webkit-any(.admonition-title,summary):after{color:#ff1744}.md-typeset :-moz-any(.danger,.error)>:-moz-any(.admonition-title,summary):after{color:#ff1744}.md-typeset :is(.danger,.error)>:is(.admonition-title,summary):after{color:#ff1744}.md-typeset :-webkit-any(.admonition,details):-webkit-any(.bug){border-color:#f50057}.md-typeset :-moz-any(.admonition,details):-moz-any(.bug){border-color:#f50057}.md-typeset :is(.admonition,details):is(.bug){border-color:#f50057}.md-typeset :-webkit-any(.bug)>:-webkit-any(.admonition-title,summary){background-color:rgba(245,0,87,.1)}.md-typeset :-moz-any(.bug)>:-moz-any(.admonition-title,summary){background-color:rgba(245,0,87,.1)}.md-typeset :is(.bug)>:is(.admonition-title,summary){background-color:rgba(245,0,87,.1)}.md-typeset :-webkit-any(.bug)>:-webkit-any(.admonition-title,summary):before{background-color:#f50057;-webkit-mask-image:var(--md-admonition-icon--bug);mask-image:var(--md-admonition-icon--bug)}.md-typeset :-moz-any(.bug)>:-moz-any(.admonition-title,summary):before{background-color:#f50057;mask-image:var(--md-admonition-icon--bug)}.md-typeset :is(.bug)>:is(.admonition-title,summary):before{background-color:#f50057;-webkit-mask-image:var(--md-admonition-icon--bug);mask-image:var(--md-admonition-icon--bug)}.md-typeset :-webkit-any(.bug)>:-webkit-any(.admonition-title,summary):after{color:#f50057}.md-typeset :-moz-any(.bug)>:-moz-any(.admonition-title,summary):after{color:#f50057}.md-typeset :is(.bug)>:is(.admonition-title,summary):after{color:#f50057}.md-typeset :-webkit-any(.admonition,details):-webkit-any(.example){border-color:#7c4dff}.md-typeset :-moz-any(.admonition,details):-moz-any(.example){border-color:#7c4dff}.md-typeset :is(.admonition,details):is(.example){border-color:#7c4dff}.md-typeset :-webkit-any(.example)>:-webkit-any(.admonition-title,summary){background-color:rgba(124,77,255,.1)}.md-typeset :-moz-any(.example)>:-moz-any(.admonition-title,summary){background-color:rgba(124,77,255,.1)}.md-typeset :is(.example)>:is(.admonition-title,summary){background-color:rgba(124,77,255,.1)}.md-typeset :-webkit-any(.example)>:-webkit-any(.admonition-title,summary):before{background-color:#7c4dff;-webkit-mask-image:var(--md-admonition-icon--example);mask-image:var(--md-admonition-icon--example)}.md-typeset :-moz-any(.example)>:-moz-any(.admonition-title,summary):before{background-color:#7c4dff;mask-image:var(--md-admonition-icon--example)}.md-typeset :is(.example)>:is(.admonition-title,summary):before{background-color:#7c4dff;-webkit-mask-image:var(--md-admonition-icon--example);mask-image:var(--md-admonition-icon--example)}.md-typeset :-webkit-any(.example)>:-webkit-any(.admonition-title,summary):after{color:#7c4dff}.md-typeset :-moz-any(.example)>:-moz-any(.admonition-title,summary):after{color:#7c4dff}.md-typeset :is(.example)>:is(.admonition-title,summary):after{color:#7c4dff}.md-typeset :-webkit-any(.admonition,details):-webkit-any(.quote,.cite){border-color:#9e9e9e}.md-typeset :-moz-any(.admonition,details):-moz-any(.quote,.cite){border-color:#9e9e9e}.md-typeset :is(.admonition,details):is(.quote,.cite){border-color:#9e9e9e}.md-typeset :-webkit-any(.quote,.cite)>:-webkit-any(.admonition-title,summary){background-color:hsla(0,0%,62%,.1)}.md-typeset :-moz-any(.quote,.cite)>:-moz-any(.admonition-title,summary){background-color:hsla(0,0%,62%,.1)}.md-typeset :is(.quote,.cite)>:is(.admonition-title,summary){background-color:hsla(0,0%,62%,.1)}.md-typeset :-webkit-any(.quote,.cite)>:-webkit-any(.admonition-title,summary):before{background-color:#9e9e9e;-webkit-mask-image:var(--md-admonition-icon--quote);mask-image:var(--md-admonition-icon--quote)}.md-typeset :-moz-any(.quote,.cite)>:-moz-any(.admonition-title,summary):before{background-color:#9e9e9e;mask-image:var(--md-admonition-icon--quote)}.md-typeset :is(.quote,.cite)>:is(.admonition-title,summary):before{background-color:#9e9e9e;-webkit-mask-image:var(--md-admonition-icon--quote);mask-image:var(--md-admonition-icon--quote)}.md-typeset :-webkit-any(.quote,.cite)>:-webkit-any(.admonition-title,summary):after{color:#9e9e9e}.md-typeset :-moz-any(.quote,.cite)>:-moz-any(.admonition-title,summary):after{color:#9e9e9e}.md-typeset :is(.quote,.cite)>:is(.admonition-title,summary):after{color:#9e9e9e}:root{--md-footnotes-icon:url('data:image/svg+xml;charset=utf-8,')}.md-typeset .footnote{color:var(--md-default-fg-color--light);font-size:.64rem}[dir=ltr] .md-typeset .footnote>ol{margin-left:0}[dir=rtl] .md-typeset .footnote>ol{margin-right:0}.md-typeset .footnote>ol>li{transition:color 125ms}.md-typeset .footnote>ol>li:target{color:var(--md-default-fg-color)}.md-typeset .footnote>ol>li:focus-within .footnote-backref{opacity:1;transform:translateX(0);transition:none}.md-typeset .footnote>ol>li:-webkit-any(:hover,:target) .footnote-backref{opacity:1;transform:translateX(0)}.md-typeset .footnote>ol>li:-moz-any(:hover,:target) .footnote-backref{opacity:1;transform:translateX(0)}.md-typeset .footnote>ol>li:is(:hover,:target) .footnote-backref{opacity:1;transform:translateX(0)}.md-typeset .footnote>ol>li>:first-child{margin-top:0}.md-typeset .footnote-ref{font-size:.75em;font-weight:700}html .md-typeset .footnote-ref{outline-offset:.1rem}.md-typeset [id^="fnref:"]:target>.footnote-ref{outline:auto}.md-typeset .footnote-backref{color:var(--md-typeset-a-color);display:inline-block;font-size:0;opacity:0;transform:translateX(.25rem);transition:color .25s,transform .25s .25s,opacity 125ms .25s;vertical-align:text-bottom}@media print{.md-typeset .footnote-backref{color:var(--md-typeset-a-color);opacity:1;transform:translateX(0)}}[dir=rtl] .md-typeset .footnote-backref{transform:translateX(-.25rem)}.md-typeset .footnote-backref:hover{color:var(--md-accent-fg-color)}.md-typeset .footnote-backref:before{background-color:currentcolor;content:"";display:inline-block;height:.8rem;-webkit-mask-image:var(--md-footnotes-icon);mask-image:var(--md-footnotes-icon);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:.8rem}[dir=rtl] .md-typeset .footnote-backref:before svg{transform:scaleX(-1)}[dir=ltr] .md-typeset .headerlink{margin-left:.5rem}[dir=rtl] .md-typeset .headerlink{margin-right:.5rem}.md-typeset .headerlink{color:var(--md-default-fg-color--lighter);display:inline-block;opacity:0;transition:color .25s,opacity 125ms}@media print{.md-typeset .headerlink{display:none}}.md-typeset .headerlink:focus,.md-typeset :-webkit-any(:hover,:target)>.headerlink{opacity:1;-webkit-transition:color .25s,opacity 125ms;transition:color .25s,opacity 125ms}.md-typeset .headerlink:focus,.md-typeset :-moz-any(:hover,:target)>.headerlink{opacity:1;-moz-transition:color .25s,opacity 125ms;transition:color .25s,opacity 125ms}.md-typeset .headerlink:focus,.md-typeset :is(:hover,:target)>.headerlink{opacity:1;transition:color .25s,opacity 125ms}.md-typeset .headerlink:-webkit-any(:focus,:hover),.md-typeset :target>.headerlink{color:var(--md-accent-fg-color)}.md-typeset .headerlink:-moz-any(:focus,:hover),.md-typeset :target>.headerlink{color:var(--md-accent-fg-color)}.md-typeset .headerlink:is(:focus,:hover),.md-typeset :target>.headerlink{color:var(--md-accent-fg-color)}.md-typeset :target{--md-scroll-margin:3.6rem;--md-scroll-offset:0rem;scroll-margin-top:calc(var(--md-scroll-margin) - var(--md-scroll-offset))}@media screen and (min-width:76.25em){.md-header--lifted~.md-container .md-typeset :target{--md-scroll-margin:6rem}}.md-typeset :-webkit-any(h1,h2,h3):target{--md-scroll-offset:0.2rem}.md-typeset :-moz-any(h1,h2,h3):target{--md-scroll-offset:0.2rem}.md-typeset :is(h1,h2,h3):target{--md-scroll-offset:0.2rem}.md-typeset h4:target{--md-scroll-offset:0.15rem}.md-typeset div.arithmatex{overflow:auto}@media screen and (max-width:44.9375em){.md-typeset div.arithmatex{margin:0 -.8rem}}.md-typeset div.arithmatex>*{margin-left:auto!important;margin-right:auto!important;padding:0 .8rem;touch-action:auto;width:-moz-min-content;width:min-content}.md-typeset div.arithmatex>* mjx-container{margin:0!important}.md-typeset :-webkit-any(del,ins,.comment).critic{-webkit-box-decoration-break:clone;box-decoration-break:clone}.md-typeset :-moz-any(del,ins,.comment).critic{box-decoration-break:clone}.md-typeset :is(del,ins,.comment).critic{-webkit-box-decoration-break:clone;box-decoration-break:clone}.md-typeset del.critic{background-color:var(--md-typeset-del-color)}.md-typeset ins.critic{background-color:var(--md-typeset-ins-color)}.md-typeset .critic.comment{color:var(--md-code-hl-comment-color)}.md-typeset .critic.comment:before{content:"/* "}.md-typeset .critic.comment:after{content:" */"}.md-typeset .critic.block{box-shadow:none;display:block;margin:1em 0;overflow:auto;padding-left:.8rem;padding-right:.8rem}.md-typeset .critic.block>:first-child{margin-top:.5em}.md-typeset .critic.block>:last-child{margin-bottom:.5em}:root{--md-details-icon:url('data:image/svg+xml;charset=utf-8,')}.md-typeset details{display:flow-root;overflow:visible;padding-top:0}.md-typeset details[open]>summary:after{transform:rotate(90deg)}.md-typeset details:not([open]){box-shadow:none;padding-bottom:0}.md-typeset details:not([open])>summary{border-radius:.1rem}[dir=ltr] .md-typeset summary{padding-right:1.8rem}[dir=rtl] .md-typeset summary{padding-left:1.8rem}[dir=ltr] .md-typeset summary{border-top-left-radius:.1rem}[dir=ltr] .md-typeset summary,[dir=rtl] .md-typeset summary{border-top-right-radius:.1rem}[dir=rtl] .md-typeset summary{border-top-left-radius:.1rem}.md-typeset summary{cursor:pointer;display:block;min-height:1rem}.md-typeset summary.focus-visible{outline-color:var(--md-accent-fg-color);outline-offset:.2rem}.md-typeset summary:not(.focus-visible){-webkit-tap-highlight-color:transparent;outline:none}[dir=ltr] .md-typeset summary:after{right:.4rem}[dir=rtl] .md-typeset summary:after{left:.4rem}.md-typeset summary:after{background-color:currentcolor;content:"";height:1rem;-webkit-mask-image:var(--md-details-icon);mask-image:var(--md-details-icon);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;position:absolute;top:.625em;transform:rotate(0deg);transition:transform .25s;width:1rem}[dir=rtl] .md-typeset summary:after{transform:rotate(180deg)}.md-typeset summary::marker{display:none}.md-typeset summary::-webkit-details-marker{display:none}.md-typeset :-webkit-any(.emojione,.twemoji,.gemoji){display:inline-flex;height:1.125em;vertical-align:text-top}.md-typeset :-moz-any(.emojione,.twemoji,.gemoji){display:inline-flex;height:1.125em;vertical-align:text-top}.md-typeset :is(.emojione,.twemoji,.gemoji){display:inline-flex;height:1.125em;vertical-align:text-top}.md-typeset :-webkit-any(.emojione,.twemoji,.gemoji) svg{fill:currentcolor;max-height:100%;width:1.125em}.md-typeset :-moz-any(.emojione,.twemoji,.gemoji) svg{fill:currentcolor;max-height:100%;width:1.125em}.md-typeset :is(.emojione,.twemoji,.gemoji) svg{fill:currentcolor;max-height:100%;width:1.125em}.highlight :-webkit-any(.o,.ow){color:var(--md-code-hl-operator-color)}.highlight :-moz-any(.o,.ow){color:var(--md-code-hl-operator-color)}.highlight :is(.o,.ow){color:var(--md-code-hl-operator-color)}.highlight .p{color:var(--md-code-hl-punctuation-color)}.highlight :-webkit-any(.cpf,.l,.s,.sb,.sc,.s2,.si,.s1,.ss){color:var(--md-code-hl-string-color)}.highlight :-moz-any(.cpf,.l,.s,.sb,.sc,.s2,.si,.s1,.ss){color:var(--md-code-hl-string-color)}.highlight :is(.cpf,.l,.s,.sb,.sc,.s2,.si,.s1,.ss){color:var(--md-code-hl-string-color)}.highlight :-webkit-any(.cp,.se,.sh,.sr,.sx){color:var(--md-code-hl-special-color)}.highlight :-moz-any(.cp,.se,.sh,.sr,.sx){color:var(--md-code-hl-special-color)}.highlight :is(.cp,.se,.sh,.sr,.sx){color:var(--md-code-hl-special-color)}.highlight :-webkit-any(.m,.mb,.mf,.mh,.mi,.il,.mo){color:var(--md-code-hl-number-color)}.highlight :-moz-any(.m,.mb,.mf,.mh,.mi,.il,.mo){color:var(--md-code-hl-number-color)}.highlight :is(.m,.mb,.mf,.mh,.mi,.il,.mo){color:var(--md-code-hl-number-color)}.highlight :-webkit-any(.k,.kd,.kn,.kp,.kr,.kt){color:var(--md-code-hl-keyword-color)}.highlight :-moz-any(.k,.kd,.kn,.kp,.kr,.kt){color:var(--md-code-hl-keyword-color)}.highlight :is(.k,.kd,.kn,.kp,.kr,.kt){color:var(--md-code-hl-keyword-color)}.highlight :-webkit-any(.n){color:var(--md-code-hl-name-color)}.highlight :-moz-any(.n){color:var(--md-code-hl-name-color)}.highlight :is(.n){color:var(--md-code-hl-name-color)}.highlight :-webkit-any(.kc,.no,.nb,.bp){color:var(--md-code-hl-constant-color)}.highlight :-moz-any(.kc,.no,.nb,.bp){color:var(--md-code-hl-constant-color)}.highlight :is(.kc,.no,.nb,.bp){color:var(--md-code-hl-constant-color)}.highlight :-webkit-any(.nc,.ne,.nf,.nn){color:var(--md-code-hl-function-color)}.highlight :-moz-any(.nc,.ne,.nf,.nn){color:var(--md-code-hl-function-color)}.highlight :is(.nc,.ne,.nf,.nn){color:var(--md-code-hl-function-color)}.highlight :-webkit-any(.nd,.ni,.nl,.nt){color:var(--md-code-hl-keyword-color)}.highlight :-moz-any(.nd,.ni,.nl,.nt){color:var(--md-code-hl-keyword-color)}.highlight :is(.nd,.ni,.nl,.nt){color:var(--md-code-hl-keyword-color)}.highlight :-webkit-any(.c,.cm,.c1,.ch,.cs,.sd){color:var(--md-code-hl-comment-color)}.highlight :-moz-any(.c,.cm,.c1,.ch,.cs,.sd){color:var(--md-code-hl-comment-color)}.highlight :is(.c,.cm,.c1,.ch,.cs,.sd){color:var(--md-code-hl-comment-color)}.highlight :-webkit-any(.na,.nv,.vc,.vg,.vi){color:var(--md-code-hl-variable-color)}.highlight :-moz-any(.na,.nv,.vc,.vg,.vi){color:var(--md-code-hl-variable-color)}.highlight :is(.na,.nv,.vc,.vg,.vi){color:var(--md-code-hl-variable-color)}.highlight :-webkit-any(.ge,.gr,.gh,.go,.gp,.gs,.gu,.gt){color:var(--md-code-hl-generic-color)}.highlight :-moz-any(.ge,.gr,.gh,.go,.gp,.gs,.gu,.gt){color:var(--md-code-hl-generic-color)}.highlight :is(.ge,.gr,.gh,.go,.gp,.gs,.gu,.gt){color:var(--md-code-hl-generic-color)}.highlight :-webkit-any(.gd,.gi){border-radius:.1rem;margin:0 -.125em;padding:0 .125em}.highlight :-moz-any(.gd,.gi){border-radius:.1rem;margin:0 -.125em;padding:0 .125em}.highlight :is(.gd,.gi){border-radius:.1rem;margin:0 -.125em;padding:0 .125em}.highlight .gd{background-color:var(--md-typeset-del-color)}.highlight .gi{background-color:var(--md-typeset-ins-color)}.highlight .hll{background-color:var(--md-code-hl-color);display:block;margin:0 -1.1764705882em;padding:0 1.1764705882em}.highlight span.filename{background-color:var(--md-code-bg-color);border-bottom:.05rem solid var(--md-default-fg-color--lightest);border-top-left-radius:.1rem;border-top-right-radius:.1rem;display:flow-root;font-size:.85em;font-weight:700;margin-top:1em;padding:.6617647059em 1.1764705882em;position:relative}.highlight span.filename+pre{margin-top:0}.highlight span.filename+pre>code{border-top-left-radius:0;border-top-right-radius:0}.highlight [data-linenos]:before{background-color:var(--md-code-bg-color);box-shadow:-.05rem 0 var(--md-default-fg-color--lightest) inset;color:var(--md-default-fg-color--light);content:attr(data-linenos);float:left;left:-1.1764705882em;margin-left:-1.1764705882em;margin-right:1.1764705882em;padding-left:1.1764705882em;position:sticky;-webkit-user-select:none;-moz-user-select:none;user-select:none;z-index:3}.highlight code a[id]{position:absolute;visibility:hidden}.highlight code[data-md-copying] .hll{display:contents}.highlight code[data-md-copying] .md-annotation{display:none}.highlighttable{display:flow-root}.highlighttable :-webkit-any(tbody,td){display:block;padding:0}.highlighttable :-moz-any(tbody,td){display:block;padding:0}.highlighttable :is(tbody,td){display:block;padding:0}.highlighttable tr{display:flex}.highlighttable pre{margin:0}.highlighttable th.filename{flex-grow:1;padding:0;text-align:left}.highlighttable th.filename span.filename{margin-top:0}.highlighttable .linenos{background-color:var(--md-code-bg-color);border-bottom-left-radius:.1rem;border-top-left-radius:.1rem;font-size:.85em;padding:.7720588235em 0 .7720588235em 1.1764705882em;-webkit-user-select:none;-moz-user-select:none;user-select:none}.highlighttable .linenodiv{box-shadow:-.05rem 0 var(--md-default-fg-color--lightest) inset;padding-right:.5882352941em}.highlighttable .linenodiv pre{color:var(--md-default-fg-color--light);text-align:right}.highlighttable .code{flex:1;min-width:0}.linenodiv a{color:inherit}.md-typeset .highlighttable{direction:ltr;margin:1em 0}.md-typeset .highlighttable>tbody>tr>.code>div>pre>code{border-bottom-left-radius:0;border-top-left-radius:0}.md-typeset :-webkit-any(.highlight,.highlighttable,.literal-block-wrapper,div[class^=highlight-],.results-prefix)+.result{border:.05rem solid var(--md-code-bg-color);border-bottom-left-radius:.1rem;border-bottom-right-radius:.1rem;border-top-width:.1rem;margin-top:-1.125em;overflow:visible;padding:0 1em}.md-typeset :-moz-any(.highlight,.highlighttable,.literal-block-wrapper,div[class^=highlight-],.results-prefix)+.result{border:.05rem solid var(--md-code-bg-color);border-bottom-left-radius:.1rem;border-bottom-right-radius:.1rem;border-top-width:.1rem;margin-top:-1.125em;overflow:visible;padding:0 1em}.md-typeset :is(.highlight,.highlighttable,.literal-block-wrapper,div[class^=highlight-],.results-prefix)+.result{border:.05rem solid var(--md-code-bg-color);border-bottom-left-radius:.1rem;border-bottom-right-radius:.1rem;border-top-width:.1rem;margin-top:-1.125em;overflow:visible;padding:0 1em}.md-typeset :-webkit-any(.highlight,.highlighttable,.literal-block-wrapper,div[class^=highlight-],.results-prefix)+.result:after{clear:both;content:"";display:block}.md-typeset :-moz-any(.highlight,.highlighttable,.literal-block-wrapper,div[class^=highlight-],.results-prefix)+.result:after{clear:both;content:"";display:block}.md-typeset :is(.highlight,.highlighttable,.literal-block-wrapper,div[class^=highlight-],.results-prefix)+.result:after{clear:both;content:"";display:block}.md-typeset .results .results-prefix+.result{margin-top:0}.md-typeset .results .results-prefix{background-color:var(--md-code-bg-color);font-size:.85em;font-weight:700;margin-top:-1em;padding:.6617647059em 1.1764705882em}@media screen and (max-width:44.9375em){.md-content__inner>.highlight{margin:1em -.8rem}.md-content__inner>.highlight>.filename,.md-content__inner>.highlight>.highlighttable>tbody>tr>.code>div>pre>code,.md-content__inner>.highlight>.highlighttable>tbody>tr>.filename span.filename,.md-content__inner>.highlight>.highlighttable>tbody>tr>.linenos,.md-content__inner>.highlight>pre>code{border-radius:0}.md-content__inner>.highlight+.result{border-left-width:0;border-radius:0;border-right-width:0;margin-left:-.8rem;margin-right:-.8rem}}.md-typeset .keys kbd:-webkit-any(:before,:after){-moz-osx-font-smoothing:initial;-webkit-font-smoothing:initial;color:inherit;margin:0;position:relative}.md-typeset .keys kbd:-moz-any(:before,:after){-moz-osx-font-smoothing:initial;-webkit-font-smoothing:initial;color:inherit;margin:0;position:relative}.md-typeset .keys kbd:is(:before,:after){-moz-osx-font-smoothing:initial;-webkit-font-smoothing:initial;color:inherit;margin:0;position:relative}.md-typeset .keys span{color:var(--md-default-fg-color--light);padding:0 .2em}.md-typeset .keys .key-alt:before,.md-typeset .keys .key-left-alt:before,.md-typeset .keys .key-right-alt:before{content:"⎇";padding-right:.4em}.md-typeset .keys .key-command:before,.md-typeset .keys .key-left-command:before,.md-typeset .keys .key-right-command:before{content:"⌘";padding-right:.4em}.md-typeset .keys .key-control:before,.md-typeset .keys .key-left-control:before,.md-typeset .keys .key-right-control:before{content:"⌃";padding-right:.4em}.md-typeset .keys .key-left-meta:before,.md-typeset .keys .key-meta:before,.md-typeset .keys .key-right-meta:before{content:"◆";padding-right:.4em}.md-typeset .keys .key-left-option:before,.md-typeset .keys .key-option:before,.md-typeset .keys .key-right-option:before{content:"⌥";padding-right:.4em}.md-typeset .keys .key-left-shift:before,.md-typeset .keys .key-right-shift:before,.md-typeset .keys .key-shift:before{content:"⇧";padding-right:.4em}.md-typeset .keys .key-left-super:before,.md-typeset .keys .key-right-super:before,.md-typeset .keys .key-super:before{content:"❖";padding-right:.4em}.md-typeset .keys .key-left-windows:before,.md-typeset .keys .key-right-windows:before,.md-typeset .keys .key-windows:before{content:"⊞";padding-right:.4em}.md-typeset .keys .key-arrow-down:before{content:"↓";padding-right:.4em}.md-typeset .keys .key-arrow-left:before{content:"←";padding-right:.4em}.md-typeset .keys .key-arrow-right:before{content:"→";padding-right:.4em}.md-typeset .keys .key-arrow-up:before{content:"↑";padding-right:.4em}.md-typeset .keys .key-backspace:before{content:"⌫";padding-right:.4em}.md-typeset .keys .key-backtab:before{content:"⇤";padding-right:.4em}.md-typeset .keys .key-caps-lock:before{content:"⇪";padding-right:.4em}.md-typeset .keys .key-clear:before{content:"⌧";padding-right:.4em}.md-typeset .keys .key-context-menu:before{content:"☰";padding-right:.4em}.md-typeset .keys .key-delete:before{content:"⌦";padding-right:.4em}.md-typeset .keys .key-eject:before{content:"⏏";padding-right:.4em}.md-typeset .keys .key-end:before{content:"⤓";padding-right:.4em}.md-typeset .keys .key-escape:before{content:"⎋";padding-right:.4em}.md-typeset .keys .key-home:before{content:"⤒";padding-right:.4em}.md-typeset .keys .key-insert:before{content:"⎀";padding-right:.4em}.md-typeset .keys .key-page-down:before{content:"⇟";padding-right:.4em}.md-typeset .keys .key-page-up:before{content:"⇞";padding-right:.4em}.md-typeset .keys .key-print-screen:before{content:"⎙";padding-right:.4em}.md-typeset .keys .key-tab:after{content:"⇥";padding-left:.4em}.md-typeset .keys .key-num-enter:after{content:"⌤";padding-left:.4em}.md-typeset .keys .key-enter:after{content:"⏎";padding-left:.4em}:root{--md-tabbed-icon--prev:url('data:image/svg+xml;charset=utf-8,');--md-tabbed-icon--next:url('data:image/svg+xml;charset=utf-8,')}.md-typeset .tabbed-set{border-radius:.1rem;display:flex;flex-flow:column wrap;margin:1em 0;position:relative}.md-typeset .tabbed-set>input{height:0;opacity:0;position:absolute;width:0}.md-typeset .tabbed-set>input:target{--md-scroll-offset:0.625em}.md-typeset .tabbed-labels{-ms-overflow-style:none;box-shadow:0 -.05rem var(--md-default-fg-color--lightest) inset;display:flex;max-width:100%;overflow:auto;scrollbar-width:none}@media print{.md-typeset .tabbed-labels{display:contents}}@media screen{.js .md-typeset .tabbed-labels{position:relative}.js .md-typeset .tabbed-labels:before{background:var(--md-accent-fg-color);bottom:0;content:"";display:block;height:2px;left:0;position:absolute;transform:translateX(var(--md-indicator-x));transition:width 225ms,transform .25s;transition-timing-function:cubic-bezier(.4,0,.2,1);width:var(--md-indicator-width)}}.md-typeset .tabbed-labels::-webkit-scrollbar{display:none}.md-typeset .tabbed-labels>label{border-bottom:.1rem solid transparent;border-radius:.1rem .1rem 0 0;color:var(--md-default-fg-color--light);cursor:pointer;flex-shrink:0;font-size:.64rem;font-weight:700;padding:.78125em 1.25em .625em;scroll-margin-inline-start:1rem;transition:background-color .25s,color .25s;white-space:nowrap;width:auto}@media print{.md-typeset .tabbed-labels>label:first-child{order:1}.md-typeset .tabbed-labels>label:nth-child(2){order:2}.md-typeset .tabbed-labels>label:nth-child(3){order:3}.md-typeset .tabbed-labels>label:nth-child(4){order:4}.md-typeset .tabbed-labels>label:nth-child(5){order:5}.md-typeset .tabbed-labels>label:nth-child(6){order:6}.md-typeset .tabbed-labels>label:nth-child(7){order:7}.md-typeset .tabbed-labels>label:nth-child(8){order:8}.md-typeset .tabbed-labels>label:nth-child(9){order:9}.md-typeset .tabbed-labels>label:nth-child(10){order:10}.md-typeset .tabbed-labels>label:nth-child(11){order:11}.md-typeset .tabbed-labels>label:nth-child(12){order:12}.md-typeset .tabbed-labels>label:nth-child(13){order:13}.md-typeset .tabbed-labels>label:nth-child(14){order:14}.md-typeset .tabbed-labels>label:nth-child(15){order:15}.md-typeset .tabbed-labels>label:nth-child(16){order:16}.md-typeset .tabbed-labels>label:nth-child(17){order:17}.md-typeset .tabbed-labels>label:nth-child(18){order:18}.md-typeset .tabbed-labels>label:nth-child(19){order:19}.md-typeset .tabbed-labels>label:nth-child(20){order:20}}.md-typeset .tabbed-labels>label:hover{color:var(--md-accent-fg-color)}.md-typeset .tabbed-content{width:100%}@media print{.md-typeset .tabbed-content{display:contents}}.md-typeset .tabbed-block{display:none}@media print{.md-typeset .tabbed-block{display:block}.md-typeset .tabbed-block:first-child{order:1}.md-typeset .tabbed-block:nth-child(2){order:2}.md-typeset .tabbed-block:nth-child(3){order:3}.md-typeset .tabbed-block:nth-child(4){order:4}.md-typeset .tabbed-block:nth-child(5){order:5}.md-typeset .tabbed-block:nth-child(6){order:6}.md-typeset .tabbed-block:nth-child(7){order:7}.md-typeset .tabbed-block:nth-child(8){order:8}.md-typeset .tabbed-block:nth-child(9){order:9}.md-typeset .tabbed-block:nth-child(10){order:10}.md-typeset .tabbed-block:nth-child(11){order:11}.md-typeset .tabbed-block:nth-child(12){order:12}.md-typeset .tabbed-block:nth-child(13){order:13}.md-typeset .tabbed-block:nth-child(14){order:14}.md-typeset .tabbed-block:nth-child(15){order:15}.md-typeset .tabbed-block:nth-child(16){order:16}.md-typeset .tabbed-block:nth-child(17){order:17}.md-typeset .tabbed-block:nth-child(18){order:18}.md-typeset .tabbed-block:nth-child(19){order:19}.md-typeset .tabbed-block:nth-child(20){order:20}}.md-typeset .tabbed-block>.highlight:first-child>pre,.md-typeset .tabbed-block>pre:first-child{margin:0}.md-typeset .tabbed-block>.highlight:first-child>pre>code,.md-typeset .tabbed-block>pre:first-child>code{border-top-left-radius:0;border-top-right-radius:0}.md-typeset .tabbed-block>.highlight:first-child>.filename{border-top-left-radius:0;border-top-right-radius:0;margin:0}.md-typeset .tabbed-block>.highlight:first-child>.highlighttable{margin:0}.md-typeset .tabbed-block>.highlight:first-child>.highlighttable>tbody>tr>.filename span.filename,.md-typeset .tabbed-block>.highlight:first-child>.highlighttable>tbody>tr>.linenos{border-top-left-radius:0;border-top-right-radius:0;margin:0}.md-typeset .tabbed-block>.highlight:first-child>.highlighttable>tbody>tr>.code>div>pre>code{border-top-left-radius:0;border-top-right-radius:0}.md-typeset .tabbed-block>.highlight:first-child+.result{margin-top:-.125em}.md-typeset .tabbed-block>.tabbed-set{margin:0}.md-typeset .tabbed-button{align-self:center;border-radius:100%;color:var(--md-default-fg-color--light);cursor:pointer;display:block;height:.9rem;margin-top:.1rem;pointer-events:auto;transition:background-color .25s;width:.9rem}.md-typeset .tabbed-button:hover{background-color:var(--md-accent-fg-color--transparent);color:var(--md-accent-fg-color)}.md-typeset .tabbed-button:after{background-color:currentcolor;content:"";display:block;height:100%;-webkit-mask-image:var(--md-tabbed-icon--prev);mask-image:var(--md-tabbed-icon--prev);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;transition:background-color .25s,transform .25s;width:100%}.md-typeset .tabbed-control{background:linear-gradient(to right,var(--md-default-bg-color) 60%,transparent);display:flex;height:1.9rem;justify-content:start;pointer-events:none;position:absolute;transition:opacity 125ms;width:1.2rem}[dir=rtl] .md-typeset .tabbed-control{transform:rotate(180deg)}.md-typeset .tabbed-control[hidden]{opacity:0}.md-typeset .tabbed-control--next{background:linear-gradient(to left,var(--md-default-bg-color) 60%,transparent);justify-content:end;right:0}.md-typeset .tabbed-control--next .tabbed-button:after{-webkit-mask-image:var(--md-tabbed-icon--next);mask-image:var(--md-tabbed-icon--next)}@media screen and (max-width:44.9375em){[dir=ltr] .md-content__inner>.tabbed-set .tabbed-labels{padding-left:.8rem}[dir=rtl] .md-content__inner>.tabbed-set .tabbed-labels{padding-right:.8rem}.md-content__inner>.tabbed-set .tabbed-labels{margin:0 -.8rem;max-width:100vw;scroll-padding-inline-start:.8rem}[dir=ltr] .md-content__inner>.tabbed-set .tabbed-labels:after{padding-right:.8rem}[dir=rtl] .md-content__inner>.tabbed-set .tabbed-labels:after{padding-left:.8rem}.md-content__inner>.tabbed-set .tabbed-labels:after{content:""}[dir=ltr] .md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--prev{margin-left:-.8rem}[dir=rtl] .md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--prev{margin-right:-.8rem}[dir=ltr] .md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--prev{padding-left:.8rem}[dir=rtl] .md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--prev{padding-right:.8rem}.md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--prev{width:2rem}[dir=ltr] .md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--next{margin-right:-.8rem}[dir=rtl] .md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--next{margin-left:-.8rem}[dir=ltr] .md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--next{padding-right:.8rem}[dir=rtl] .md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--next{padding-left:.8rem}.md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--next{width:2rem}}@media screen{.md-typeset .tabbed-set>input:first-child:checked~.tabbed-labels>:first-child,.md-typeset .tabbed-set>input:nth-child(10):checked~.tabbed-labels>:nth-child(10),.md-typeset .tabbed-set>input:nth-child(11):checked~.tabbed-labels>:nth-child(11),.md-typeset .tabbed-set>input:nth-child(12):checked~.tabbed-labels>:nth-child(12),.md-typeset .tabbed-set>input:nth-child(13):checked~.tabbed-labels>:nth-child(13),.md-typeset .tabbed-set>input:nth-child(14):checked~.tabbed-labels>:nth-child(14),.md-typeset .tabbed-set>input:nth-child(15):checked~.tabbed-labels>:nth-child(15),.md-typeset .tabbed-set>input:nth-child(16):checked~.tabbed-labels>:nth-child(16),.md-typeset .tabbed-set>input:nth-child(17):checked~.tabbed-labels>:nth-child(17),.md-typeset .tabbed-set>input:nth-child(18):checked~.tabbed-labels>:nth-child(18),.md-typeset .tabbed-set>input:nth-child(19):checked~.tabbed-labels>:nth-child(19),.md-typeset .tabbed-set>input:nth-child(2):checked~.tabbed-labels>:nth-child(2),.md-typeset .tabbed-set>input:nth-child(20):checked~.tabbed-labels>:nth-child(20),.md-typeset .tabbed-set>input:nth-child(3):checked~.tabbed-labels>:nth-child(3),.md-typeset .tabbed-set>input:nth-child(4):checked~.tabbed-labels>:nth-child(4),.md-typeset .tabbed-set>input:nth-child(5):checked~.tabbed-labels>:nth-child(5),.md-typeset .tabbed-set>input:nth-child(6):checked~.tabbed-labels>:nth-child(6),.md-typeset .tabbed-set>input:nth-child(7):checked~.tabbed-labels>:nth-child(7),.md-typeset .tabbed-set>input:nth-child(8):checked~.tabbed-labels>:nth-child(8),.md-typeset .tabbed-set>input:nth-child(9):checked~.tabbed-labels>:nth-child(9){color:var(--md-accent-fg-color)}.md-typeset .no-js .tabbed-set>input:first-child:checked~.tabbed-labels>:first-child,.md-typeset .no-js .tabbed-set>input:nth-child(10):checked~.tabbed-labels>:nth-child(10),.md-typeset .no-js .tabbed-set>input:nth-child(11):checked~.tabbed-labels>:nth-child(11),.md-typeset .no-js .tabbed-set>input:nth-child(12):checked~.tabbed-labels>:nth-child(12),.md-typeset .no-js .tabbed-set>input:nth-child(13):checked~.tabbed-labels>:nth-child(13),.md-typeset .no-js .tabbed-set>input:nth-child(14):checked~.tabbed-labels>:nth-child(14),.md-typeset .no-js .tabbed-set>input:nth-child(15):checked~.tabbed-labels>:nth-child(15),.md-typeset .no-js .tabbed-set>input:nth-child(16):checked~.tabbed-labels>:nth-child(16),.md-typeset .no-js .tabbed-set>input:nth-child(17):checked~.tabbed-labels>:nth-child(17),.md-typeset .no-js .tabbed-set>input:nth-child(18):checked~.tabbed-labels>:nth-child(18),.md-typeset .no-js .tabbed-set>input:nth-child(19):checked~.tabbed-labels>:nth-child(19),.md-typeset .no-js .tabbed-set>input:nth-child(2):checked~.tabbed-labels>:nth-child(2),.md-typeset .no-js .tabbed-set>input:nth-child(20):checked~.tabbed-labels>:nth-child(20),.md-typeset .no-js .tabbed-set>input:nth-child(3):checked~.tabbed-labels>:nth-child(3),.md-typeset .no-js .tabbed-set>input:nth-child(4):checked~.tabbed-labels>:nth-child(4),.md-typeset .no-js .tabbed-set>input:nth-child(5):checked~.tabbed-labels>:nth-child(5),.md-typeset .no-js .tabbed-set>input:nth-child(6):checked~.tabbed-labels>:nth-child(6),.md-typeset .no-js .tabbed-set>input:nth-child(7):checked~.tabbed-labels>:nth-child(7),.md-typeset .no-js .tabbed-set>input:nth-child(8):checked~.tabbed-labels>:nth-child(8),.md-typeset .no-js .tabbed-set>input:nth-child(9):checked~.tabbed-labels>:nth-child(9),.no-js .md-typeset .tabbed-set>input:first-child:checked~.tabbed-labels>:first-child,.no-js .md-typeset .tabbed-set>input:nth-child(10):checked~.tabbed-labels>:nth-child(10),.no-js .md-typeset .tabbed-set>input:nth-child(11):checked~.tabbed-labels>:nth-child(11),.no-js .md-typeset .tabbed-set>input:nth-child(12):checked~.tabbed-labels>:nth-child(12),.no-js .md-typeset .tabbed-set>input:nth-child(13):checked~.tabbed-labels>:nth-child(13),.no-js .md-typeset .tabbed-set>input:nth-child(14):checked~.tabbed-labels>:nth-child(14),.no-js .md-typeset .tabbed-set>input:nth-child(15):checked~.tabbed-labels>:nth-child(15),.no-js .md-typeset .tabbed-set>input:nth-child(16):checked~.tabbed-labels>:nth-child(16),.no-js .md-typeset .tabbed-set>input:nth-child(17):checked~.tabbed-labels>:nth-child(17),.no-js .md-typeset .tabbed-set>input:nth-child(18):checked~.tabbed-labels>:nth-child(18),.no-js .md-typeset .tabbed-set>input:nth-child(19):checked~.tabbed-labels>:nth-child(19),.no-js .md-typeset .tabbed-set>input:nth-child(2):checked~.tabbed-labels>:nth-child(2),.no-js .md-typeset .tabbed-set>input:nth-child(20):checked~.tabbed-labels>:nth-child(20),.no-js .md-typeset .tabbed-set>input:nth-child(3):checked~.tabbed-labels>:nth-child(3),.no-js .md-typeset .tabbed-set>input:nth-child(4):checked~.tabbed-labels>:nth-child(4),.no-js .md-typeset .tabbed-set>input:nth-child(5):checked~.tabbed-labels>:nth-child(5),.no-js .md-typeset .tabbed-set>input:nth-child(6):checked~.tabbed-labels>:nth-child(6),.no-js .md-typeset .tabbed-set>input:nth-child(7):checked~.tabbed-labels>:nth-child(7),.no-js .md-typeset .tabbed-set>input:nth-child(8):checked~.tabbed-labels>:nth-child(8),.no-js .md-typeset .tabbed-set>input:nth-child(9):checked~.tabbed-labels>:nth-child(9){border-color:var(--md-accent-fg-color)}}.md-typeset .tabbed-set>input:first-child.focus-visible~.tabbed-labels>:first-child,.md-typeset .tabbed-set>input:nth-child(10).focus-visible~.tabbed-labels>:nth-child(10),.md-typeset .tabbed-set>input:nth-child(11).focus-visible~.tabbed-labels>:nth-child(11),.md-typeset .tabbed-set>input:nth-child(12).focus-visible~.tabbed-labels>:nth-child(12),.md-typeset .tabbed-set>input:nth-child(13).focus-visible~.tabbed-labels>:nth-child(13),.md-typeset .tabbed-set>input:nth-child(14).focus-visible~.tabbed-labels>:nth-child(14),.md-typeset .tabbed-set>input:nth-child(15).focus-visible~.tabbed-labels>:nth-child(15),.md-typeset .tabbed-set>input:nth-child(16).focus-visible~.tabbed-labels>:nth-child(16),.md-typeset .tabbed-set>input:nth-child(17).focus-visible~.tabbed-labels>:nth-child(17),.md-typeset .tabbed-set>input:nth-child(18).focus-visible~.tabbed-labels>:nth-child(18),.md-typeset .tabbed-set>input:nth-child(19).focus-visible~.tabbed-labels>:nth-child(19),.md-typeset .tabbed-set>input:nth-child(2).focus-visible~.tabbed-labels>:nth-child(2),.md-typeset .tabbed-set>input:nth-child(20).focus-visible~.tabbed-labels>:nth-child(20),.md-typeset .tabbed-set>input:nth-child(3).focus-visible~.tabbed-labels>:nth-child(3),.md-typeset .tabbed-set>input:nth-child(4).focus-visible~.tabbed-labels>:nth-child(4),.md-typeset .tabbed-set>input:nth-child(5).focus-visible~.tabbed-labels>:nth-child(5),.md-typeset .tabbed-set>input:nth-child(6).focus-visible~.tabbed-labels>:nth-child(6),.md-typeset .tabbed-set>input:nth-child(7).focus-visible~.tabbed-labels>:nth-child(7),.md-typeset .tabbed-set>input:nth-child(8).focus-visible~.tabbed-labels>:nth-child(8),.md-typeset .tabbed-set>input:nth-child(9).focus-visible~.tabbed-labels>:nth-child(9){background-color:var(--md-accent-fg-color--transparent)}.md-typeset .tabbed-set>input:first-child:checked~.tabbed-content>:first-child,.md-typeset .tabbed-set>input:nth-child(10):checked~.tabbed-content>:nth-child(10),.md-typeset .tabbed-set>input:nth-child(11):checked~.tabbed-content>:nth-child(11),.md-typeset .tabbed-set>input:nth-child(12):checked~.tabbed-content>:nth-child(12),.md-typeset .tabbed-set>input:nth-child(13):checked~.tabbed-content>:nth-child(13),.md-typeset .tabbed-set>input:nth-child(14):checked~.tabbed-content>:nth-child(14),.md-typeset .tabbed-set>input:nth-child(15):checked~.tabbed-content>:nth-child(15),.md-typeset .tabbed-set>input:nth-child(16):checked~.tabbed-content>:nth-child(16),.md-typeset .tabbed-set>input:nth-child(17):checked~.tabbed-content>:nth-child(17),.md-typeset .tabbed-set>input:nth-child(18):checked~.tabbed-content>:nth-child(18),.md-typeset .tabbed-set>input:nth-child(19):checked~.tabbed-content>:nth-child(19),.md-typeset .tabbed-set>input:nth-child(2):checked~.tabbed-content>:nth-child(2),.md-typeset .tabbed-set>input:nth-child(20):checked~.tabbed-content>:nth-child(20),.md-typeset .tabbed-set>input:nth-child(3):checked~.tabbed-content>:nth-child(3),.md-typeset .tabbed-set>input:nth-child(4):checked~.tabbed-content>:nth-child(4),.md-typeset .tabbed-set>input:nth-child(5):checked~.tabbed-content>:nth-child(5),.md-typeset .tabbed-set>input:nth-child(6):checked~.tabbed-content>:nth-child(6),.md-typeset .tabbed-set>input:nth-child(7):checked~.tabbed-content>:nth-child(7),.md-typeset .tabbed-set>input:nth-child(8):checked~.tabbed-content>:nth-child(8),.md-typeset .tabbed-set>input:nth-child(9):checked~.tabbed-content>:nth-child(9){display:block}:root{--md-tasklist-icon:url('data:image/svg+xml;charset=utf-8,');--md-tasklist-icon--checked:url('data:image/svg+xml;charset=utf-8,')}.md-typeset .task-list-item{list-style-type:none;position:relative}[dir=ltr] .md-typeset .task-list-item [type=checkbox]{left:-2em}[dir=rtl] .md-typeset .task-list-item [type=checkbox]{right:-2em}.md-typeset .task-list-item [type=checkbox]{position:absolute;top:.45em}.md-typeset .task-list-control [type=checkbox]{opacity:0;z-index:-1}[dir=ltr] .md-typeset .task-list-indicator:before{left:-1.5em}[dir=rtl] .md-typeset .task-list-indicator:before{right:-1.5em}.md-typeset .task-list-indicator:before{background-color:var(--md-default-fg-color--lightest);content:"";height:1.25em;-webkit-mask-image:var(--md-tasklist-icon);mask-image:var(--md-tasklist-icon);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;position:absolute;top:.15em;width:1.25em}.md-typeset [type=checkbox]:checked+.task-list-indicator:before{background-color:#00e676;-webkit-mask-image:var(--md-tasklist-icon--checked);mask-image:var(--md-tasklist-icon--checked)}.rst-versions{font-family:var(--md-text-font-family)}.rst-versions.rst-badge{bottom:inherit!important;font-size:.85rem;height:auto;top:50px}:root>*{--md-mermaid-font-family:var(--md-text-font-family),sans-serif;--md-mermaid-edge-color:var(--md-code-fg-color);--md-mermaid-node-bg-color:var(--md-accent-fg-color--transparent);--md-mermaid-node-fg-color:var(--md-accent-fg-color);--md-mermaid-label-bg-color:var(--md-default-bg-color);--md-mermaid-label-fg-color:var(--md-code-fg-color)}.mermaid{line-height:normal;margin:1em 0}:root>*{--md-graphviz-edge-color:var(--md-default-fg-color);--md-graphviz-node-bg-color:var(--md-accent-fg-color--transparent);--md-graphviz-node-fg-color:var(--md-accent-fg-color);--md-graphviz-label-bg-color:var(--md-default-bg-color);--md-graphviz-label-fg-color:var(--md-code-fg-color);--md-graphviz-a-hover-color:var(--md-primary-fg-color)}.graphviz{margin:1em 0}.graphviz a:hover>text{fill:var(--md-graphviz-hover-color)!important}@media screen and (min-width:45em){[dir=ltr] .md-typeset .inline{float:left}[dir=rtl] .md-typeset .inline{float:right}[dir=ltr] .md-typeset .inline{margin-right:.8rem}[dir=rtl] .md-typeset .inline{margin-left:.8rem}.md-typeset .inline{margin-bottom:.8rem;margin-top:0;width:11.7rem}[dir=ltr] .md-typeset .inline.end{float:right}[dir=rtl] .md-typeset .inline.end{float:left}[dir=ltr] .md-typeset .inline.end{margin-left:.8rem;margin-right:0}[dir=rtl] .md-typeset .inline.end{margin-left:0;margin-right:.8rem}}.md-typeset .align-left{text-align:left}.md-typeset .align-right{text-align:right}.md-typeset .align-center{clear:both;text-align:center}.md-typeset .align-top{vertical-align:top}.md-typeset .align-middle{vertical-align:middle}.md-typeset .align-bottom{vertical-align:bottom}.md-typeset .figure.align-left,.md-typeset figure.align-left,.md-typeset img.align-left,.md-typeset object.align-left,.md-typeset table.align-left{margin-right:auto}.md-typeset .figure.align-center,.md-typeset figure.align-center,.md-typeset img.align-center,.md-typeset object.align-center,.md-typeset table.align-center{margin-left:auto;margin-right:auto}.md-typeset .figure.align-right,.md-typeset figure.align-right,.md-typeset img.align-right,.md-typeset object.align-right,.md-typeset table.align-right{margin-left:auto}.md-typeset .figure.align-center,.md-typeset .figure.align-right,.md-typeset figure.align-center,.md-typeset figure.align-right,.md-typeset img.align-center,.md-typeset img.align-right,.md-typeset object.align-center,.md-typeset object.align-right{display:block}.md-typeset .figure.align-left,.md-typeset .figure.align-right,.md-typeset figure.align-left,.md-typeset figure.align-right,.md-typeset table.align-center,.md-typeset table.align-left,.md-typeset table.align-right{text-align:inherit}.md-typeset .rubric{font-weight:700}.md-typeset .viewcode-block .viewcode-back{float:right}.md-typeset .versionmodified{font-style:italic}.md-typeset div.line-block{display:block}.md-typeset div.line-block div.line-block{margin-left:1.5em}.md-typeset :-webkit-any(dl.objdesc,dl.api-field)>dt{background:var(--md-code-bg-color);font-family:var(--md-code-font-family)}.md-typeset :-moz-any(dl.objdesc,dl.api-field)>dt{background:var(--md-code-bg-color);font-family:var(--md-code-font-family)}.md-typeset :is(dl.objdesc,dl.api-field)>dt{background:var(--md-code-bg-color);font-family:var(--md-code-font-family)}.md-typeset :-webkit-any(dl.objdesc,dl.api-field)>dt code{border-radius:0;padding:0}.md-typeset :-moz-any(dl.objdesc,dl.api-field)>dt code{border-radius:0;padding:0}.md-typeset :is(dl.objdesc,dl.api-field)>dt code{border-radius:0;padding:0}.md-typeset :-webkit-any(dl.objdesc,dl.api-field)>dt .sig-name:not(.sig-name-nonprimary){color:var(--md-code-hl-name-color);font-weight:700;padding:0}.md-typeset :-moz-any(dl.objdesc,dl.api-field)>dt .sig-name:not(.sig-name-nonprimary){color:var(--md-code-hl-name-color);font-weight:700;padding:0}.md-typeset :is(dl.objdesc,dl.api-field)>dt .sig-name:not(.sig-name-nonprimary){color:var(--md-code-hl-name-color);font-weight:700;padding:0}.md-typeset :-webkit-any(dl.objdesc,dl.api-field)>dt .sig-param{font-style:normal}.md-typeset :-moz-any(dl.objdesc,dl.api-field)>dt .sig-param{font-style:normal}.md-typeset :is(dl.objdesc,dl.api-field)>dt .sig-param{font-style:normal}.md-typeset :-webkit-any(dl.objdesc,dl.api-field)>dt .sig-param .n:not(.desctype){color:var(--md-default-fg-color--light)}.md-typeset :-moz-any(dl.objdesc,dl.api-field)>dt .sig-param .n:not(.desctype){color:var(--md-default-fg-color--light)}.md-typeset :is(dl.objdesc,dl.api-field)>dt .sig-param .n:not(.desctype){color:var(--md-default-fg-color--light)}.md-typeset :-webkit-any(dl.objdesc,dl.api-field)>dt .sig-param a.reference .n:not(.desctype):hover{color:var(--md-accent-fg-color)}.md-typeset :-moz-any(dl.objdesc,dl.api-field)>dt .sig-param a.reference .n:not(.desctype):hover{color:var(--md-accent-fg-color)}.md-typeset :is(dl.objdesc,dl.api-field)>dt .sig-param a.reference .n:not(.desctype):hover{color:var(--md-accent-fg-color)}.md-typeset :-webkit-any(dl.objdesc,dl.api-field)>dt.sig-wrap .sig-param-decl:before{content:"\a     ";white-space:pre}.md-typeset :-moz-any(dl.objdesc,dl.api-field)>dt.sig-wrap .sig-param-decl:before{content:"\a     ";white-space:pre}.md-typeset :is(dl.objdesc,dl.api-field)>dt.sig-wrap .sig-param-decl:before{content:"\a     ";white-space:pre}.md-typeset :-webkit-any(dl.objdesc,dl.api-field)>dt.sig-wrap .sig-paren~.sig-paren:before{content:"\a";white-space:pre}.md-typeset :-moz-any(dl.objdesc,dl.api-field)>dt.sig-wrap .sig-paren~.sig-paren:before{content:"\a";white-space:pre}.md-typeset :is(dl.objdesc,dl.api-field)>dt.sig-wrap .sig-paren~.sig-paren:before{content:"\a";white-space:pre}.md-typeset dl.objdesc>dd>dl.field-list>dt>.colon{display:none}.md-typeset .sig-inline a.reference.sig-name,.md-typeset .sig-inline a.reference:not(.desctype)>.n,.md-typeset .sig-inline a.reference>.sig-name,.md-typeset :-webkit-any(dl.objdesc,dl.api-field)>dt a.reference.sig-name,.md-typeset :-webkit-any(dl.objdesc,dl.api-field)>dt a.reference:not(.desctype)>.n,.md-typeset :-webkit-any(dl.objdesc,dl.api-field)>dt a.reference>.sig-name{color:var(--md-typeset-a-color)}.md-typeset .sig-inline a.reference.sig-name,.md-typeset .sig-inline a.reference:not(.desctype)>.n,.md-typeset .sig-inline a.reference>.sig-name,.md-typeset :-moz-any(dl.objdesc,dl.api-field)>dt a.reference.sig-name,.md-typeset :-moz-any(dl.objdesc,dl.api-field)>dt a.reference:not(.desctype)>.n,.md-typeset :-moz-any(dl.objdesc,dl.api-field)>dt a.reference>.sig-name{color:var(--md-typeset-a-color)}.md-typeset .sig-inline a.reference.sig-name,.md-typeset .sig-inline a.reference:not(.desctype)>.n,.md-typeset .sig-inline a.reference>.sig-name,.md-typeset :is(dl.objdesc,dl.api-field)>dt a.reference.sig-name,.md-typeset :is(dl.objdesc,dl.api-field)>dt a.reference:not(.desctype)>.n,.md-typeset :is(dl.objdesc,dl.api-field)>dt a.reference>.sig-name{color:var(--md-typeset-a-color)}.md-typeset .sig-inline a.reference.sig-name:hover,.md-typeset .sig-inline a.reference:not(.desctype)>.n:hover,.md-typeset .sig-inline a.reference>.sig-name:hover,.md-typeset :-webkit-any(dl.objdesc,dl.api-field)>dt a.reference.sig-name:hover,.md-typeset :-webkit-any(dl.objdesc,dl.api-field)>dt a.reference:not(.desctype)>.n:hover,.md-typeset :-webkit-any(dl.objdesc,dl.api-field)>dt a.reference>.sig-name:hover{color:var(--md-accent-fg-color)}.md-typeset .sig-inline a.reference.sig-name:hover,.md-typeset .sig-inline a.reference:not(.desctype)>.n:hover,.md-typeset .sig-inline a.reference>.sig-name:hover,.md-typeset :-moz-any(dl.objdesc,dl.api-field)>dt a.reference.sig-name:hover,.md-typeset :-moz-any(dl.objdesc,dl.api-field)>dt a.reference:not(.desctype)>.n:hover,.md-typeset :-moz-any(dl.objdesc,dl.api-field)>dt a.reference>.sig-name:hover{color:var(--md-accent-fg-color)}.md-typeset .sig-inline a.reference.sig-name:hover,.md-typeset .sig-inline a.reference:not(.desctype)>.n:hover,.md-typeset .sig-inline a.reference>.sig-name:hover,.md-typeset :is(dl.objdesc,dl.api-field)>dt a.reference.sig-name:hover,.md-typeset :is(dl.objdesc,dl.api-field)>dt a.reference:not(.desctype)>.n:hover,.md-typeset :is(dl.objdesc,dl.api-field)>dt a.reference>.sig-name:hover{color:var(--md-accent-fg-color)}.md-typeset .sig-inline .desctype,.md-typeset .sig-inline .desctype>a.reference,.md-typeset :-webkit-any(dl.objdesc,dl.api-field)>dt .desctype,.md-typeset :-webkit-any(dl.objdesc,dl.api-field)>dt .desctype>a.reference{color:var(--md-code-hl-special-color)}.md-typeset .sig-inline .desctype,.md-typeset .sig-inline .desctype>a.reference,.md-typeset :-moz-any(dl.objdesc,dl.api-field)>dt .desctype,.md-typeset :-moz-any(dl.objdesc,dl.api-field)>dt .desctype>a.reference{color:var(--md-code-hl-special-color)}.md-typeset .sig-inline .desctype,.md-typeset .sig-inline .desctype>a.reference,.md-typeset :is(dl.objdesc,dl.api-field)>dt .desctype,.md-typeset :is(dl.objdesc,dl.api-field)>dt .desctype>a.reference{color:var(--md-code-hl-special-color)}.md-typeset .sig-inline .desctype .n,.md-typeset .sig-inline .desctype>a.reference .n,.md-typeset :-webkit-any(dl.objdesc,dl.api-field)>dt .desctype .n,.md-typeset :-webkit-any(dl.objdesc,dl.api-field)>dt .desctype>a.reference .n{color:inherit}.md-typeset .sig-inline .desctype .n,.md-typeset .sig-inline .desctype>a.reference .n,.md-typeset :-moz-any(dl.objdesc,dl.api-field)>dt .desctype .n,.md-typeset :-moz-any(dl.objdesc,dl.api-field)>dt .desctype>a.reference .n{color:inherit}.md-typeset .sig-inline .desctype .n,.md-typeset .sig-inline .desctype>a.reference .n,.md-typeset :is(dl.objdesc,dl.api-field)>dt .desctype .n,.md-typeset :is(dl.objdesc,dl.api-field)>dt .desctype>a.reference .n{color:inherit}.md-typeset .sig-inline .desctype:-webkit-any(a.reference):hover,.md-typeset .sig-inline .desctype>a.reference:hover,.md-typeset :-webkit-any(dl.objdesc,dl.api-field)>dt .desctype:-webkit-any(a.reference):hover,.md-typeset :-webkit-any(dl.objdesc,dl.api-field)>dt .desctype>a.reference:hover{color:var(--md-accent-fg-color)}.md-typeset .sig-inline .desctype:-moz-any(a.reference):hover,.md-typeset .sig-inline .desctype>a.reference:hover,.md-typeset :-moz-any(dl.objdesc,dl.api-field)>dt .desctype:-moz-any(a.reference):hover,.md-typeset :-moz-any(dl.objdesc,dl.api-field)>dt .desctype>a.reference:hover{color:var(--md-accent-fg-color)}.md-typeset .sig-inline .desctype:is(a.reference):hover,.md-typeset .sig-inline .desctype>a.reference:hover,.md-typeset :is(dl.objdesc,dl.api-field)>dt .desctype:is(a.reference):hover,.md-typeset :is(dl.objdesc,dl.api-field)>dt .desctype>a.reference:hover{color:var(--md-accent-fg-color)}.md-typeset dl.objdesc>dt{background:var(--md-code-bg-color);font-family:var(--md-code-font-family);padding-left:.5em;padding-right:.5em;padding-top:.5em}.md-typeset dl.objdesc>dt,.md-typeset dl.objdesc>dt code{font-size:.75rem}.md-typeset dl.objdesc>dt .property{color:var(--md-code-hl-keyword-color);font-style:normal;font-weight:700}.md-typeset dl.objdesc>dt .sig-prename{color:var(--md-code-hl-name-color);padding:0}.md-typeset dl.objdesc>dt .viewcode-back,.md-typeset dl.objdesc>dt .viewcode-link{float:right;text-align:right}.md-typeset dl.objdesc>dt.api-include-path,.md-typeset dl.objdesc>dt.api-include-path code{font-size:.65rem}.md-typeset dl.objdesc>dt:first-child{padding-top:.5em}.md-typeset dl.objdesc>dt:last-of-type{padding-bottom:.5em}.md-typeset dl.objdesc>dd dl.field-list>dt{font-size:1em;font-weight:700;margin-bottom:1em}.md-typeset dl.objdesc>dd dd.noindent{margin-left:0}.md-typeset dl.api-field>dt{display:table}.md-typeset dl.api-field>dt a.headerlink{left:.5em;margin-left:0;position:relative;width:0}.md-typeset dl.api-field>dt,.md-typeset dl.api-field>dt code{font-size:.65rem}.md-typeset dl.api-field>dt.api-parameter-kind{float:right;font-family:var(--md-text-font-family)}.md-typeset dl.api-field>dt.api-parameter-kind:before{content:"["}.md-typeset dl.api-field>dt.api-parameter-kind:after{content:"]"}.md-typeset dl.objdesc.summary>dd,.md-typeset dl.objdesc.summary>dd>p:first-child{margin-top:0}.md-typeset .sig-inline:-webkit-any(.c-texpr,.cpp-texpr){background-color:unset;font-family:unset}.md-typeset .sig-inline:-moz-any(.c-texpr,.cpp-texpr){background-color:unset;font-family:unset}.md-typeset .sig-inline:is(.c-texpr,.cpp-texpr){background-color:unset;font-family:unset}.md-nav__link{white-space:nowrap}:root>*{--objinfo-icon-fg-alias:#e65100;--objinfo-icon-fg-default:#424242;--objinfo-icon-fg-data:#1565c0;--objinfo-icon-fg-procedure:#6a1b9a;--objinfo-icon-fg-sub-data:#2e7d32;--objinfo-icon-bg-default:var(--md-default-bg-color)}@media screen{[data-md-color-scheme=slate]{--objinfo-icon-fg-alias:#ffb74d;--objinfo-icon-fg-default:#e0e0e0;--objinfo-icon-fg-data:#64b5f6;--objinfo-icon-fg-procedure:#ce93d8;--objinfo-icon-fg-sub-data:#81c784}}.objinfo-icon{background-color:var(--objinfo-icon-bg-default);border:1px solid var(--objinfo-icon-fg-default);border-radius:2px;color:var(--objinfo-icon-fg-default);display:inline-table;flex-shrink:0;font-family:var(--md-text-font-family);font-weight:500;height:16px;line-height:16px;margin-right:8px;text-align:center;vertical-align:middle;width:16px}.objinfo-icon__alias{background-color:var(--objinfo-icon-fg-alias);border:1px solid var(--objinfo-icon-fg-alias);color:var(--objinfo-icon-bg-default)}.objinfo-icon__procedure{background-color:var(--objinfo-icon-fg-procedure);border:1px solid var(--objinfo-icon-fg-procedure);color:var(--objinfo-icon-bg-default)}.objinfo-icon__data{background-color:var(--objinfo-icon-fg-data);border:1px solid var(--objinfo-icon-fg-data);color:var(--objinfo-icon-bg-default)}.objinfo-icon__sub-data{background-color:var(--objinfo-icon-fg-sub-data);border:1px solid var(--objinfo-icon-fg-sub-data);color:var(--objinfo-icon-bg-default)}.search-result-objlabel{border:1px solid var(--md-default-fg-color--light);border-radius:2px;float:right;padding:2px}table.longtable.docutils.data.align-default tbody>tr>td>p>a.reference.internal>code.xref.py.py-obj.docutils.literal.notranslate>span.pre{word-break:normal}
 @media screen{[data-md-color-scheme=slate]{--md-hue:232;--md-default-fg-color:hsla(var(--md-hue),75%,95%,1);--md-default-fg-color--light:hsla(var(--md-hue),75%,90%,0.62);--md-default-fg-color--lighter:hsla(var(--md-hue),75%,90%,0.32);--md-default-fg-color--lightest:hsla(var(--md-hue),75%,90%,0.12);--md-default-bg-color:hsla(var(--md-hue),15%,21%,1);--md-default-bg-color--light:hsla(var(--md-hue),15%,21%,0.54);--md-default-bg-color--lighter:hsla(var(--md-hue),15%,21%,0.26);--md-default-bg-color--lightest:hsla(var(--md-hue),15%,21%,0.07);--md-code-fg-color:hsla(var(--md-hue),18%,86%,1);--md-code-bg-color:hsla(var(--md-hue),15%,15%,1);--md-code-hl-color:rgba(66,135,255,.15);--md-code-hl-number-color:#e6695b;--md-code-hl-special-color:#f06090;--md-code-hl-function-color:#c973d9;--md-code-hl-constant-color:#9383e2;--md-code-hl-keyword-color:#6791e0;--md-code-hl-string-color:#2fb170;--md-code-hl-name-color:var(--md-code-fg-color);--md-code-hl-operator-color:var(--md-default-fg-color--light);--md-code-hl-punctuation-color:var(--md-default-fg-color--light);--md-code-hl-comment-color:var(--md-default-fg-color--light);--md-code-hl-generic-color:var(--md-default-fg-color--light);--md-code-hl-variable-color:var(--md-default-fg-color--light);--md-typeset-color:var(--md-default-fg-color);--md-typeset-a-color:var(--md-primary-fg-color);--md-typeset-mark-color:rgba(66,135,255,.3);--md-typeset-kbd-color:hsla(var(--md-hue),15%,94%,0.12);--md-typeset-kbd-accent-color:hsla(var(--md-hue),15%,94%,0.2);--md-typeset-kbd-border-color:hsla(var(--md-hue),15%,14%,1);--md-typeset-table-color:hsla(var(--md-hue),75%,95%,0.12);--md-admonition-fg-color:var(--md-default-fg-color);--md-admonition-bg-color:var(--md-default-bg-color);--md-footer-bg-color:hsla(var(--md-hue),15%,12%,0.87);--md-footer-bg-color--dark:hsla(var(--md-hue),15%,10%,1);--md-shadow-z1:0 0.2rem 0.5rem rgba(0,0,0,.2),0 0 0.05rem rgba(0,0,0,.1);--md-shadow-z2:0 0.2rem 0.5rem rgba(0,0,0,.3),0 0 0.05rem rgba(0,0,0,.25);--md-shadow-z3:0 0.2rem 0.5rem rgba(0,0,0,.4),0 0 0.05rem rgba(0,0,0,.35)}[data-md-color-scheme=slate] img[src$="#gh-light-mode-only"],[data-md-color-scheme=slate] img[src$="#only-light"]{display:none}[data-md-color-scheme=slate] img[src$="#gh-dark-mode-only"],[data-md-color-scheme=slate] img[src$="#only-dark"]{display:initial}[data-md-color-scheme=slate][data-md-color-primary=pink]{--md-typeset-a-color:#ed5487}[data-md-color-scheme=slate][data-md-color-primary=purple]{--md-typeset-a-color:#bd78c9}[data-md-color-scheme=slate][data-md-color-primary=deep-purple]{--md-typeset-a-color:#a682e3}[data-md-color-scheme=slate][data-md-color-primary=indigo]{--md-typeset-a-color:#6c91d5}[data-md-color-scheme=slate][data-md-color-primary=teal]{--md-typeset-a-color:#00ccb8}[data-md-color-scheme=slate][data-md-color-primary=green]{--md-typeset-a-color:#71c174}[data-md-color-scheme=slate][data-md-color-primary=deep-orange]{--md-typeset-a-color:#ff9575}[data-md-color-scheme=slate][data-md-color-primary=brown]{--md-typeset-a-color:#c7846b}[data-md-color-scheme=slate][data-md-color-primary=black],[data-md-color-scheme=slate][data-md-color-primary=blue-grey],[data-md-color-scheme=slate][data-md-color-primary=grey],[data-md-color-scheme=slate][data-md-color-primary=white]{--md-typeset-a-color:#6c91d5}[data-md-color-switching] *,[data-md-color-switching] :after,[data-md-color-switching] :before{transition-duration:0ms!important}}[data-md-color-accent=red]{--md-accent-fg-color:#ff1947;--md-accent-fg-color--transparent:rgba(255,25,71,.1);--md-accent-bg-color:#fff;--md-accent-bg-color--light:hsla(0,0%,100%,.7)}[data-md-color-accent=pink]{--md-accent-fg-color:#f50056;--md-accent-fg-color--transparent:rgba(245,0,86,.1);--md-accent-bg-color:#fff;--md-accent-bg-color--light:hsla(0,0%,100%,.7)}[data-md-color-accent=purple]{--md-accent-fg-color:#df41fb;--md-accent-fg-color--transparent:rgba(223,65,251,.1);--md-accent-bg-color:#fff;--md-accent-bg-color--light:hsla(0,0%,100%,.7)}[data-md-color-accent=deep-purple]{--md-accent-fg-color:#7c4dff;--md-accent-fg-color--transparent:rgba(124,77,255,.1);--md-accent-bg-color:#fff;--md-accent-bg-color--light:hsla(0,0%,100%,.7)}[data-md-color-accent=indigo]{--md-accent-fg-color:#526cfe;--md-accent-fg-color--transparent:rgba(82,108,254,.1);--md-accent-bg-color:#fff;--md-accent-bg-color--light:hsla(0,0%,100%,.7)}[data-md-color-accent=blue]{--md-accent-fg-color:#4287ff;--md-accent-fg-color--transparent:rgba(66,135,255,.1);--md-accent-bg-color:#fff;--md-accent-bg-color--light:hsla(0,0%,100%,.7)}[data-md-color-accent=light-blue]{--md-accent-fg-color:#0091eb;--md-accent-fg-color--transparent:rgba(0,145,235,.1);--md-accent-bg-color:#fff;--md-accent-bg-color--light:hsla(0,0%,100%,.7)}[data-md-color-accent=cyan]{--md-accent-fg-color:#00bad6;--md-accent-fg-color--transparent:rgba(0,186,214,.1);--md-accent-bg-color:#fff;--md-accent-bg-color--light:hsla(0,0%,100%,.7)}[data-md-color-accent=teal]{--md-accent-fg-color:#00bda4;--md-accent-fg-color--transparent:rgba(0,189,164,.1);--md-accent-bg-color:#fff;--md-accent-bg-color--light:hsla(0,0%,100%,.7)}[data-md-color-accent=green]{--md-accent-fg-color:#00c753;--md-accent-fg-color--transparent:rgba(0,199,83,.1);--md-accent-bg-color:#fff;--md-accent-bg-color--light:hsla(0,0%,100%,.7)}[data-md-color-accent=light-green]{--md-accent-fg-color:#63de17;--md-accent-fg-color--transparent:rgba(99,222,23,.1);--md-accent-bg-color:#fff;--md-accent-bg-color--light:hsla(0,0%,100%,.7)}[data-md-color-accent=lime]{--md-accent-fg-color:#b0eb00;--md-accent-fg-color--transparent:rgba(176,235,0,.1);--md-accent-bg-color:rgba(0,0,0,.87);--md-accent-bg-color--light:rgba(0,0,0,.54)}[data-md-color-accent=yellow]{--md-accent-fg-color:#ffd500;--md-accent-fg-color--transparent:rgba(255,213,0,.1);--md-accent-bg-color:rgba(0,0,0,.87);--md-accent-bg-color--light:rgba(0,0,0,.54)}[data-md-color-accent=amber]{--md-accent-fg-color:#fa0;--md-accent-fg-color--transparent:rgba(255,170,0,.1);--md-accent-bg-color:rgba(0,0,0,.87);--md-accent-bg-color--light:rgba(0,0,0,.54)}[data-md-color-accent=orange]{--md-accent-fg-color:#ff9100;--md-accent-fg-color--transparent:rgba(255,145,0,.1);--md-accent-bg-color:rgba(0,0,0,.87);--md-accent-bg-color--light:rgba(0,0,0,.54)}[data-md-color-accent=deep-orange]{--md-accent-fg-color:#ff6e42;--md-accent-fg-color--transparent:rgba(255,110,66,.1);--md-accent-bg-color:#fff;--md-accent-bg-color--light:hsla(0,0%,100%,.7)}[data-md-color-primary=red]{--md-primary-fg-color:#ef5552;--md-primary-fg-color--light:#e57171;--md-primary-fg-color--dark:#e53734;--md-primary-bg-color:#fff;--md-primary-bg-color--light:hsla(0,0%,100%,.7)}[data-md-color-primary=pink]{--md-primary-fg-color:#e92063;--md-primary-fg-color--light:#ec417a;--md-primary-fg-color--dark:#c3185d;--md-primary-bg-color:#fff;--md-primary-bg-color--light:hsla(0,0%,100%,.7)}[data-md-color-primary=purple]{--md-primary-fg-color:#ab47bd;--md-primary-fg-color--light:#bb69c9;--md-primary-fg-color--dark:#8c24a8;--md-primary-bg-color:#fff;--md-primary-bg-color--light:hsla(0,0%,100%,.7)}[data-md-color-primary=deep-purple]{--md-primary-fg-color:#7e56c2;--md-primary-fg-color--light:#9574cd;--md-primary-fg-color--dark:#673ab6;--md-primary-bg-color:#fff;--md-primary-bg-color--light:hsla(0,0%,100%,.7)}[data-md-color-primary=indigo]{--md-primary-fg-color:#4051b5;--md-primary-fg-color--light:#5d6cc0;--md-primary-fg-color--dark:#303fa1;--md-primary-bg-color:#fff;--md-primary-bg-color--light:hsla(0,0%,100%,.7)}[data-md-color-primary=blue]{--md-primary-fg-color:#2094f3;--md-primary-fg-color--light:#42a5f5;--md-primary-fg-color--dark:#1975d2;--md-primary-bg-color:#fff;--md-primary-bg-color--light:hsla(0,0%,100%,.7)}[data-md-color-primary=light-blue]{--md-primary-fg-color:#02a6f2;--md-primary-fg-color--light:#28b5f6;--md-primary-fg-color--dark:#0287cf;--md-primary-bg-color:#fff;--md-primary-bg-color--light:hsla(0,0%,100%,.7)}[data-md-color-primary=cyan]{--md-primary-fg-color:#00bdd6;--md-primary-fg-color--light:#25c5da;--md-primary-fg-color--dark:#0097a8;--md-primary-bg-color:#fff;--md-primary-bg-color--light:hsla(0,0%,100%,.7)}[data-md-color-primary=teal]{--md-primary-fg-color:#009485;--md-primary-fg-color--light:#26a699;--md-primary-fg-color--dark:#007a6c;--md-primary-bg-color:#fff;--md-primary-bg-color--light:hsla(0,0%,100%,.7)}[data-md-color-primary=green]{--md-primary-fg-color:#4cae4f;--md-primary-fg-color--light:#68bb6c;--md-primary-fg-color--dark:#398e3d;--md-primary-bg-color:#fff;--md-primary-bg-color--light:hsla(0,0%,100%,.7)}[data-md-color-primary=light-green]{--md-primary-fg-color:#8bc34b;--md-primary-fg-color--light:#9ccc66;--md-primary-fg-color--dark:#689f38;--md-primary-bg-color:#fff;--md-primary-bg-color--light:hsla(0,0%,100%,.7)}[data-md-color-primary=lime]{--md-primary-fg-color:#cbdc38;--md-primary-fg-color--light:#d3e156;--md-primary-fg-color--dark:#b0b52c;--md-primary-bg-color:rgba(0,0,0,.87);--md-primary-bg-color--light:rgba(0,0,0,.54)}[data-md-color-primary=yellow]{--md-primary-fg-color:#ffec3d;--md-primary-fg-color--light:#ffee57;--md-primary-fg-color--dark:#fbc02d;--md-primary-bg-color:rgba(0,0,0,.87);--md-primary-bg-color--light:rgba(0,0,0,.54)}[data-md-color-primary=amber]{--md-primary-fg-color:#ffc105;--md-primary-fg-color--light:#ffc929;--md-primary-fg-color--dark:#ffa200;--md-primary-bg-color:rgba(0,0,0,.87);--md-primary-bg-color--light:rgba(0,0,0,.54)}[data-md-color-primary=orange]{--md-primary-fg-color:#ffa724;--md-primary-fg-color--light:#ffa724;--md-primary-fg-color--dark:#fa8900;--md-primary-bg-color:rgba(0,0,0,.87);--md-primary-bg-color--light:rgba(0,0,0,.54)}[data-md-color-primary=deep-orange]{--md-primary-fg-color:#ff6e42;--md-primary-fg-color--light:#ff8a66;--md-primary-fg-color--dark:#f4511f;--md-primary-bg-color:#fff;--md-primary-bg-color--light:hsla(0,0%,100%,.7)}[data-md-color-primary=brown]{--md-primary-fg-color:#795649;--md-primary-fg-color--light:#8d6e62;--md-primary-fg-color--dark:#5d4037;--md-primary-bg-color:#fff;--md-primary-bg-color--light:hsla(0,0%,100%,.7)}[data-md-color-primary=grey]{--md-primary-fg-color:#757575;--md-primary-fg-color--light:#9e9e9e;--md-primary-fg-color--dark:#616161;--md-primary-bg-color:#fff;--md-primary-bg-color--light:hsla(0,0%,100%,.7);--md-typeset-a-color:#4051b5}[data-md-color-primary=blue-grey]{--md-primary-fg-color:#546d78;--md-primary-fg-color--light:#607c8a;--md-primary-fg-color--dark:#455a63;--md-primary-bg-color:#fff;--md-primary-bg-color--light:hsla(0,0%,100%,.7);--md-typeset-a-color:#4051b5}[data-md-color-primary=light-green]:not([data-md-color-scheme=slate]){--md-typeset-a-color:#72ad2e}[data-md-color-primary=lime]:not([data-md-color-scheme=slate]){--md-typeset-a-color:#8b990a}[data-md-color-primary=yellow]:not([data-md-color-scheme=slate]){--md-typeset-a-color:#b8a500}[data-md-color-primary=amber]:not([data-md-color-scheme=slate]){--md-typeset-a-color:#d19d00}[data-md-color-primary=orange]:not([data-md-color-scheme=slate]){--md-typeset-a-color:#e68a00}[data-md-color-primary=white]{--md-primary-fg-color:#fff;--md-primary-fg-color--light:hsla(0,0%,100%,.7);--md-primary-fg-color--dark:rgba(0,0,0,.07);--md-primary-bg-color:rgba(0,0,0,.87);--md-primary-bg-color--light:rgba(0,0,0,.54);--md-typeset-a-color:#4051b5}[data-md-color-primary=white] .md-hero--expand{border-bottom:.05rem solid rgba(0,0,0,.07)}@media screen and (max-width:76.1875em){[data-md-color-primary=white] .md-hero{border-bottom:.05rem solid rgba(0,0,0,.07)}}@media screen and (min-width:60em){[data-md-color-primary=white] .md-search__form{background-color:rgba(0,0,0,.07)}[data-md-color-primary=white] .md-search__form:hover{background-color:rgba(0,0,0,.32)}[data-md-color-primary=white] .md-search__input+.md-search__icon{color:rgba(0,0,0,.87)}}@media screen and (min-width:76.25em){[data-md-color-primary=white] .md-tabs{border-bottom:.05rem solid rgba(0,0,0,.07)}}[data-md-color-primary=black]{--md-primary-fg-color:#000;--md-primary-fg-color--light:rgba(0,0,0,.54);--md-primary-fg-color--dark:#000;--md-primary-bg-color:#fff;--md-primary-bg-color--light:hsla(0,0%,100%,.7);--md-typeset-a-color:#4051b5}[data-md-color-primary=black] .md-header,[data-md-color-primary=black] .md-hero{background-color:#000}@media screen and (max-width:59.9375em){[data-md-color-primary=black] .md-nav__source{background-color:rgba(0,0,0,.87)}}@media screen and (min-width:60em){[data-md-color-primary=black] .md-search__form{background-color:hsla(0,0%,100%,.12)}[data-md-color-primary=black] .md-search__form:hover{background-color:hsla(0,0%,100%,.3)}}@media screen and (max-width:76.1875em){html [data-md-color-primary=black] .md-nav--primary .md-nav__title[for=__drawer]{background-color:#000}}@media screen and (min-width:76.25em){[data-md-color-primary=black] .md-tabs{background-color:#000}}
 @font-face {font-family: 'Roboto';font-style: normal;font-weight: 100;src: url(fonts/2aadfad5aee7ceeaf4eb0924efabe5b4.ttf) format('truetype');}@font-face {font-family: 'Roboto';font-style: normal;font-weight: 100;src: url(fonts/8e48cf20cf9f9e5feb7197c79028132b.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: 'Roboto';font-style: normal;font-weight: 100;src: url(fonts/638764dc2513deb09c55fc025f6dd36c.woff2) format('woff2');unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;}@font-face {font-family: 'Roboto';font-style: normal;font-weight: 100;src: url(fonts/8007dfe835cfb201b8caaa9651098588.woff2) format('woff2');unicode-range: U+1F00-1FFF;}@font-face {font-family: 'Roboto';font-style: normal;font-weight: 100;src: url(fonts/8c3798e37724f71bc0c63c44a5307413.woff2) format('woff2');unicode-range: U+0370-03FF;}@font-face {font-family: 'Roboto';font-style: normal;font-weight: 100;src: url(fonts/ca7eea0cf248d6e8442c01074765bd33.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: 'Roboto';font-style: normal;font-weight: 100;src: url(fonts/10b31f4cad9ea78d43449886bfbb88ac.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-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;}@font-face {font-family: 'Roboto';font-style: normal;font-weight: 100;src: url(fonts/0f303f31706d39866cced9dcc17b61fb.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: 'Roboto';font-style: italic;font-weight: 100;src: url(fonts/6de03a64aa8100032abc6e836b3ed803.ttf) format('truetype');}@font-face {font-family: 'Roboto';font-style: italic;font-weight: 100;src: url(fonts/0ec3cc19652785204ea2e322330f0f1b.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: 'Roboto';font-style: italic;font-weight: 100;src: url(fonts/b57a5ada789f195d5d42f4073a6cf313.woff2) format('woff2');unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;}@font-face {font-family: 'Roboto';font-style: italic;font-weight: 100;src: url(fonts/4f17f22fc6bff4f3333ccf7ed7126e6d.woff2) format('woff2');unicode-range: U+1F00-1FFF;}@font-face {font-family: 'Roboto';font-style: italic;font-weight: 100;src: url(fonts/daf12b5f1889502004bba85ad71f9fa4.woff2) format('woff2');unicode-range: U+0370-03FF;}@font-face {font-family: 'Roboto';font-style: italic;font-weight: 100;src: url(fonts/7b63598dcc2a26583b82594bd0e36d5b.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: 'Roboto';font-style: italic;font-weight: 100;src: url(fonts/64a6b4e954cf84685cbf8de77eb47344.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-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;}@font-face {font-family: 'Roboto';font-style: italic;font-weight: 100;src: url(fonts/b19ac4e57f2a56639eebd1c35319e5a7.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: 'Roboto';font-style: normal;font-weight: 300;src: url(fonts/8c49ed8b472d38d3985ec9bbbccea601.ttf) format('truetype');}@font-face {font-family: 'Roboto';font-style: normal;font-weight: 300;src: url(fonts/435e4b7f9f250d9d9243d4754799fc96.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: 'Roboto';font-style: normal;font-weight: 300;src: url(fonts/47aa3bfad6cb9e2d63abdd58f4e6ce4f.woff2) format('woff2');unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;}@font-face {font-family: 'Roboto';font-style: normal;font-weight: 300;src: url(fonts/20dc200cc43ab904876fb0c1697ebe39.woff2) format('woff2');unicode-range: U+1F00-1FFF;}@font-face {font-family: 'Roboto';font-style: normal;font-weight: 300;src: url(fonts/455c2c1af0a2bf20047a1864d7d7c174.woff2) format('woff2');unicode-range: U+0370-03FF;}@font-face {font-family: 'Roboto';font-style: normal;font-weight: 300;src: url(fonts/51f3f41805329fb8341beb56ded833ea.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: 'Roboto';font-style: normal;font-weight: 300;src: url(fonts/b076e86301cbee8c5c9aef51863a9c0a.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-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;}@font-face {font-family: 'Roboto';font-style: normal;font-weight: 300;src: url(fonts/f75911313e1c7802c23345ab57e754d8.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: 'Roboto';font-style: italic;font-weight: 300;src: url(fonts/28e6b81b1bc1964707edd4179e4268f5.ttf) format('truetype');}@font-face {font-family: 'Roboto';font-style: italic;font-weight: 300;src: url(fonts/e704ef18719c08839bc99a32437ef0f8.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: 'Roboto';font-style: italic;font-weight: 300;src: url(fonts/76945c7494c20515bb45d1dedab8f706.woff2) format('woff2');unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;}@font-face {font-family: 'Roboto';font-style: italic;font-weight: 300;src: url(fonts/b5b4146d87e5d22d0a4e0d04f3ee5626.woff2) format('woff2');unicode-range: U+1F00-1FFF;}@font-face {font-family: 'Roboto';font-style: italic;font-weight: 300;src: url(fonts/21953b998bab09c1f60c599caee56378.woff2) format('woff2');unicode-range: U+0370-03FF;}@font-face {font-family: 'Roboto';font-style: italic;font-weight: 300;src: url(fonts/e33716333704ab19fdf9989e072ad49a.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: 'Roboto';font-style: italic;font-weight: 300;src: url(fonts/f53f3b5a15d717b6d21d7885285e90ed.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-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;}@font-face {font-family: 'Roboto';font-style: italic;font-weight: 300;src: url(fonts/bb8007225d94a099cddbade7ea904667.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: 'Roboto';font-style: normal;font-weight: 400;src: url(fonts/3254c528e2ab56454a9f22191035c5fe.ttf) format('truetype');}@font-face {font-family: 'Roboto';font-style: normal;font-weight: 400;src: url(fonts/b7ef2cd1159a8cbfd271ff2abe07f237.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: 'Roboto';font-style: normal;font-weight: 400;src: url(fonts/495d38d4b9741e8aa4204002414069e2.woff2) format('woff2');unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;}@font-face {font-family: 'Roboto';font-style: normal;font-weight: 400;src: url(fonts/d368cf5bed7856dbafa2af36b51acb9c.woff2) format('woff2');unicode-range: U+1F00-1FFF;}@font-face {font-family: 'Roboto';font-style: normal;font-weight: 400;src: url(fonts/daf51ab540602b2d0b87646621637bac.woff2) format('woff2');unicode-range: U+0370-03FF;}@font-face {font-family: 'Roboto';font-style: normal;font-weight: 400;src: url(fonts/77b24796a3d4ab521f66765651875338.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: 'Roboto';font-style: normal;font-weight: 400;src: url(fonts/3c23eb02de6b34e30f18cfb7167abd81.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-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;}@font-face {font-family: 'Roboto';font-style: normal;font-weight: 400;src: url(fonts/f6734f8177112c0839b961f96d813fcb.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: 'Roboto';font-style: italic;font-weight: 400;src: url(fonts/0e326670106c8eb6a11a8c30734ecfc8.ttf) format('truetype');}@font-face {font-family: 'Roboto';font-style: italic;font-weight: 400;src: url(fonts/a6caf7b9888eb0c382948c1ca5e8bebb.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: 'Roboto';font-style: italic;font-weight: 400;src: url(fonts/a6933e678530b263486fa7b185a449ca.woff2) format('woff2');unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;}@font-face {font-family: 'Roboto';font-style: italic;font-weight: 400;src: url(fonts/144860ed1e48e186f08997e6388a9c3f.woff2) format('woff2');unicode-range: U+1F00-1FFF;}@font-face {font-family: 'Roboto';font-style: italic;font-weight: 400;src: url(fonts/2ea7a97b7c976b121112a088eb398561.woff2) format('woff2');unicode-range: U+0370-03FF;}@font-face {font-family: 'Roboto';font-style: italic;font-weight: 400;src: url(fonts/0b68e8634c96265eb32a0c769416b5b0.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: 'Roboto';font-style: italic;font-weight: 400;src: url(fonts/9582ced8a675bf267cc7ac392a86413e.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-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;}@font-face {font-family: 'Roboto';font-style: italic;font-weight: 400;src: url(fonts/db0424fb67fb52e7e538490240cc7fb9.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: 'Roboto';font-style: normal;font-weight: 500;src: url(fonts/2096d27efc16cbdd79183bf295c8ebde.ttf) format('truetype');}@font-face {font-family: 'Roboto';font-style: normal;font-weight: 500;src: url(fonts/aeed0e51b0bac7c89e5c7e6cf086d7e0.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: 'Roboto';font-style: normal;font-weight: 500;src: url(fonts/3728fbdd191d75bad5b83a838dfe2fc1.woff2) format('woff2');unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;}@font-face {font-family: 'Roboto';font-style: normal;font-weight: 500;src: url(fonts/ef8f0236a7e8b46bc9d642ecf4ab0cb7.woff2) format('woff2');unicode-range: U+1F00-1FFF;}@font-face {font-family: 'Roboto';font-style: normal;font-weight: 500;src: url(fonts/713780d8b30bda5583052ea847cdcb4f.woff2) format('woff2');unicode-range: U+0370-03FF;}@font-face {font-family: 'Roboto';font-style: normal;font-weight: 500;src: url(fonts/0948409a22b5979aa7e1ec20da9e61f1.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: 'Roboto';font-style: normal;font-weight: 500;src: url(fonts/7f1c829b0c90fd664a03bb714a74f7d3.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-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;}@font-face {font-family: 'Roboto';font-style: normal;font-weight: 500;src: url(fonts/b019538234514166ec7665359d097403.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: 'Roboto';font-style: italic;font-weight: 500;src: url(fonts/38f3ee1f96b758f95672c632d8759594.ttf) format('truetype');}@font-face {font-family: 'Roboto';font-style: italic;font-weight: 500;src: url(fonts/4c815fdc869f885520f7c8eae6730edf.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: 'Roboto';font-style: italic;font-weight: 500;src: url(fonts/6deb20301c65a96db17c433ad0cf8158.woff2) format('woff2');unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;}@font-face {font-family: 'Roboto';font-style: italic;font-weight: 500;src: url(fonts/63111d307c01b52ffccf7b0319cb7917.woff2) format('woff2');unicode-range: U+1F00-1FFF;}@font-face {font-family: 'Roboto';font-style: italic;font-weight: 500;src: url(fonts/e56cc9fb5272752b78f144b4be43175d.woff2) format('woff2');unicode-range: U+0370-03FF;}@font-face {font-family: 'Roboto';font-style: italic;font-weight: 500;src: url(fonts/2e10480d4154762bc7c8fbb40877e104.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: 'Roboto';font-style: italic;font-weight: 500;src: url(fonts/7af61b2367eba2b1852e837c46a75696.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-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;}@font-face {font-family: 'Roboto';font-style: italic;font-weight: 500;src: url(fonts/661d4b208656c006e7aab58acf778485.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: 'Roboto';font-style: normal;font-weight: 700;src: url(fonts/ac848474638236e67a64bc654fb18de0.ttf) format('truetype');}@font-face {font-family: 'Roboto';font-style: normal;font-weight: 700;src: url(fonts/3c505383d37d2078648e37868bbd1fad.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: 'Roboto';font-style: normal;font-weight: 700;src: url(fonts/6a84eeee6a25e7c9a8a03191007a6720.woff2) format('woff2');unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;}@font-face {font-family: 'Roboto';font-style: normal;font-weight: 700;src: url(fonts/5b6377da4c959db6d4b22738a27f1bee.woff2) format('woff2');unicode-range: U+1F00-1FFF;}@font-face {font-family: 'Roboto';font-style: normal;font-weight: 700;src: url(fonts/1c9cc76fd52238330f0aabac35acd2ca.woff2) format('woff2');unicode-range: U+0370-03FF;}@font-face {font-family: 'Roboto';font-style: normal;font-weight: 700;src: url(fonts/4ec57f2a80b91090971b83970230ca09.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: 'Roboto';font-style: normal;font-weight: 700;src: url(fonts/fc66f942651a9fe1a598770d3d896529.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-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;}@font-face {font-family: 'Roboto';font-style: normal;font-weight: 700;src: url(fonts/f5aebdfea35d1e7656ef4acc5db1f243.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: 'Roboto';font-style: italic;font-weight: 700;src: url(fonts/8aa562790559d61dd5178a88a296d70f.ttf) format('truetype');}@font-face {font-family: 'Roboto';font-style: italic;font-weight: 700;src: url(fonts/ccdebed88064e470c15f37c432922e57.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: 'Roboto';font-style: italic;font-weight: 700;src: url(fonts/c8a9fd4eab4e83382cc66fde70911b41.woff2) format('woff2');unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;}@font-face {font-family: 'Roboto';font-style: italic;font-weight: 700;src: url(fonts/5d7ff31ac7bf945e8d61878f8a941239.woff2) format('woff2');unicode-range: U+1F00-1FFF;}@font-face {font-family: 'Roboto';font-style: italic;font-weight: 700;src: url(fonts/2a8c422bef4a7099e99dbf0e61ed5e49.woff2) format('woff2');unicode-range: U+0370-03FF;}@font-face {font-family: 'Roboto';font-style: italic;font-weight: 700;src: url(fonts/bdbb6b52604c2451fdcba9cdfd44f4e1.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: 'Roboto';font-style: italic;font-weight: 700;src: url(fonts/acaac043ca238f0e56e61864456777fa.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-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;}@font-face {font-family: 'Roboto';font-style: italic;font-weight: 700;src: url(fonts/6be97ca17228a69c406231d89c003194.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: 'Roboto';font-style: normal;font-weight: 900;src: url(fonts/84e959dd07f302392f0ffd86f87db888.ttf) format('truetype');}@font-face {font-family: 'Roboto';font-style: normal;font-weight: 900;src: url(fonts/f265cee675c0e5b2d6ab263d0edcc754.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: 'Roboto';font-style: normal;font-weight: 900;src: url(fonts/9fdb12ceee3a402d3a54afe354552459.woff2) format('woff2');unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;}@font-face {font-family: 'Roboto';font-style: normal;font-weight: 900;src: url(fonts/76da333ab59c6d625cabfb0768f82b4a.woff2) format('woff2');unicode-range: U+1F00-1FFF;}@font-face {font-family: 'Roboto';font-style: normal;font-weight: 900;src: url(fonts/2550c2e2d8495c3ed2d4d52f824374f1.woff2) format('woff2');unicode-range: U+0370-03FF;}@font-face {font-family: 'Roboto';font-style: normal;font-weight: 900;src: url(fonts/3a38c967413f7bce36d3baefc321aade.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: 'Roboto';font-style: normal;font-weight: 900;src: url(fonts/2781e9e7c3f369b8fc7965e679b17b60.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-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;}@font-face {font-family: 'Roboto';font-style: normal;font-weight: 900;src: url(fonts/7e262106f82cc52663e403f5b73795bb.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: 'Roboto';font-style: italic;font-weight: 900;src: url(fonts/2f5c32f094829c0278bce28fe2bbe074.ttf) format('truetype');}@font-face {font-family: 'Roboto';font-style: italic;font-weight: 900;src: url(fonts/0d1b73eee266eabb2cff35dfa4ce25a3.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: 'Roboto';font-style: italic;font-weight: 900;src: url(fonts/da6cd48e6dad1888fccc91735e7522f7.woff2) format('woff2');unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;}@font-face {font-family: 'Roboto';font-style: italic;font-weight: 900;src: url(fonts/50aacf068f685be0dd903a91d5bab7d8.woff2) format('woff2');unicode-range: U+1F00-1FFF;}@font-face {font-family: 'Roboto';font-style: italic;font-weight: 900;src: url(fonts/1383417807f7965daaf94e7c497dcddb.woff2) format('woff2');unicode-range: U+0370-03FF;}@font-face {font-family: 'Roboto';font-style: italic;font-weight: 900;src: url(fonts/3f1918538864f9681d47a4538d48289c.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: 'Roboto';font-style: italic;font-weight: 900;src: url(fonts/bfd1a0c9c783e84595589f33e1828a57.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-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;}@font-face {font-family: 'Roboto';font-style: italic;font-weight: 900;src: url(fonts/3cf78ad3bcd1324e10a4acdc34bfc4a1.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: 'Roboto Mono';font-style: normal;font-weight: 100;src: url(fonts/c6dc61b627bbc5af9130518297bd4f17.ttf) format('truetype');}@font-face {font-family: 'Roboto Mono';font-style: normal;font-weight: 100;src: url(fonts/78a9265759e7b861a1639a36f4c01d04.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: 'Roboto Mono';font-style: normal;font-weight: 100;src: url(fonts/2f7c3c315334a99574ee4ceb21af654d.woff2) format('woff2');unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;}@font-face {font-family: 'Roboto Mono';font-style: normal;font-weight: 100;src: url(fonts/870e5928dd14fcfe0ce9386107666774.woff2) format('woff2');unicode-range: U+0370-03FF;}@font-face {font-family: 'Roboto Mono';font-style: normal;font-weight: 100;src: url(fonts/36e39c6463ae1c71c71e69c05e593e1b.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: 'Roboto Mono';font-style: normal;font-weight: 100;src: url(fonts/cbfd26d5bcf084ee407a0b2b7599e84b.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-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;}@font-face {font-family: 'Roboto Mono';font-style: normal;font-weight: 100;src: url(fonts/cce2217cc8323fe49789adefb3596291.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: 'Roboto Mono';font-style: normal;font-weight: 200;src: url(fonts/7fa86b886bee5d6ab420a8e89b9f3052.ttf) format('truetype');}@font-face {font-family: 'Roboto Mono';font-style: normal;font-weight: 200;src: url(fonts/4f93c2808e3b69e525c118074e5de31f.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: 'Roboto Mono';font-style: normal;font-weight: 200;src: url(fonts/99be4d68845d66c27c7f7d3a48687b66.woff2) format('woff2');unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;}@font-face {font-family: 'Roboto Mono';font-style: normal;font-weight: 200;src: url(fonts/029e176ad602329b4434892101db9cf3.woff2) format('woff2');unicode-range: U+0370-03FF;}@font-face {font-family: 'Roboto Mono';font-style: normal;font-weight: 200;src: url(fonts/9095d663e4d450059bcc2260bb75cd62.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: 'Roboto Mono';font-style: normal;font-weight: 200;src: url(fonts/1181a8e619707033241139715eca64c6.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-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;}@font-face {font-family: 'Roboto Mono';font-style: normal;font-weight: 200;src: url(fonts/22aadc77cafa07b2db9ed560d0320616.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: 'Roboto Mono';font-style: normal;font-weight: 300;src: url(fonts/6ad3f6bbe6220cc476a0d3c731d3fb04.ttf) format('truetype');}@font-face {font-family: 'Roboto Mono';font-style: normal;font-weight: 300;src: url(fonts/5dc0e4b14e903ba7f45c581df7402b3f.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: 'Roboto Mono';font-style: normal;font-weight: 300;src: url(fonts/63f4b74ebf127dbeb033126ea988f54e.woff2) format('woff2');unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;}@font-face {font-family: 'Roboto Mono';font-style: normal;font-weight: 300;src: url(fonts/f5f971e9640a9eb86ef553a7e7e999c7.woff2) format('woff2');unicode-range: U+0370-03FF;}@font-face {font-family: 'Roboto Mono';font-style: normal;font-weight: 300;src: url(fonts/0053ba6958e79f26751eabb555bd73d0.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: 'Roboto Mono';font-style: normal;font-weight: 300;src: url(fonts/4207cbc8cb7bc2cbd0bcce565298cbbc.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-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;}@font-face {font-family: 'Roboto Mono';font-style: normal;font-weight: 300;src: url(fonts/90ebb29b5cffa197b184773983ba7e91.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: 'Roboto Mono';font-style: normal;font-weight: 400;src: url(fonts/6ac1ee292434fac2313c42b0dfb7897c.ttf) format('truetype');}@font-face {font-family: 'Roboto Mono';font-style: normal;font-weight: 400;src: url(fonts/aa28d99c7db60ad23f96a5c317615c42.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: 'Roboto Mono';font-style: normal;font-weight: 400;src: url(fonts/52f28cb4d065b4adfa78df4f9559c639.woff2) format('woff2');unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;}@font-face {font-family: 'Roboto Mono';font-style: normal;font-weight: 400;src: url(fonts/122802d03aed4bf8cd6a03997a97aca4.woff2) format('woff2');unicode-range: U+0370-03FF;}@font-face {font-family: 'Roboto Mono';font-style: normal;font-weight: 400;src: url(fonts/4039566f251699c4b421ed1a38a59b24.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: 'Roboto Mono';font-style: normal;font-weight: 400;src: url(fonts/93b6c99d936df38895a0d95e3ffea2fd.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-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;}@font-face {font-family: 'Roboto Mono';font-style: normal;font-weight: 400;src: url(fonts/32c8a74ac0816253d69a7cc68a60986d.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: 'Roboto Mono';font-style: normal;font-weight: 500;src: url(fonts/1512b579343c6b61c7523cdd838d8328.ttf) format('truetype');}@font-face {font-family: 'Roboto Mono';font-style: normal;font-weight: 500;src: url(fonts/d6f9cdf1a40893111566fcdee3bbe5a9.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: 'Roboto Mono';font-style: normal;font-weight: 500;src: url(fonts/25c52b9af13f0d1b10719f5289e8c803.woff2) format('woff2');unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;}@font-face {font-family: 'Roboto Mono';font-style: normal;font-weight: 500;src: url(fonts/b4e42731e8d667ae87c3450c345754ae.woff2) format('woff2');unicode-range: U+0370-03FF;}@font-face {font-family: 'Roboto Mono';font-style: normal;font-weight: 500;src: url(fonts/214adfc289a2f2af8b0008c59ed0c7f2.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: 'Roboto Mono';font-style: normal;font-weight: 500;src: url(fonts/f55dac651a40fce74a5cf5728d9f8ffc.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-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;}@font-face {font-family: 'Roboto Mono';font-style: normal;font-weight: 500;src: url(fonts/0e1f73c6737cdf273efb4b79504e4c0a.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: 'Roboto Mono';font-style: normal;font-weight: 600;src: url(fonts/bf2ad3287f13eb7076cccb516ec2986f.ttf) format('truetype');}@font-face {font-family: 'Roboto Mono';font-style: normal;font-weight: 600;src: url(fonts/aab05142e0e2dadf7df633e061e612ad.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: 'Roboto Mono';font-style: normal;font-weight: 600;src: url(fonts/8a8dca39f24b52e89e6fd6dcd8b6dd32.woff2) format('woff2');unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;}@font-face {font-family: 'Roboto Mono';font-style: normal;font-weight: 600;src: url(fonts/7b8c2179b6b778308d2ff39bdb82e926.woff2) format('woff2');unicode-range: U+0370-03FF;}@font-face {font-family: 'Roboto Mono';font-style: normal;font-weight: 600;src: url(fonts/77ff81100e5a1db3d925f713660700ad.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: 'Roboto Mono';font-style: normal;font-weight: 600;src: url(fonts/101522bafe9c61c68698ecc784607772.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-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;}@font-face {font-family: 'Roboto Mono';font-style: normal;font-weight: 600;src: url(fonts/c28a41f656599f6694528b5463c6a445.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: 'Roboto Mono';font-style: normal;font-weight: 700;src: url(fonts/89b4f174a5a728d2d8c85b87990c9ab4.ttf) format('truetype');}@font-face {font-family: 'Roboto Mono';font-style: normal;font-weight: 700;src: url(fonts/bcd47c2f3649cfcaa86a08fb741255d6.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: 'Roboto Mono';font-style: normal;font-weight: 700;src: url(fonts/770518db51bed1e082feecc532cfcbf8.woff2) format('woff2');unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;}@font-face {font-family: 'Roboto Mono';font-style: normal;font-weight: 700;src: url(fonts/85a41b80c5fdc14e3dc48636a30d87dd.woff2) format('woff2');unicode-range: U+0370-03FF;}@font-face {font-family: 'Roboto Mono';font-style: normal;font-weight: 700;src: url(fonts/fb17f56622e45dd4ecee00bb5c63cd2b.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: 'Roboto Mono';font-style: normal;font-weight: 700;src: url(fonts/cd3d1f17e048e2116f438bd7157baccf.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-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;}@font-face {font-family: 'Roboto Mono';font-style: normal;font-weight: 700;src: url(fonts/6f8d857c5a8545e67de6b60aa0fe5c33.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: 'Roboto Mono';font-style: italic;font-weight: 100;src: url(fonts/302b0425bf5ea66f37a822a61d723adc.ttf) format('truetype');}@font-face {font-family: 'Roboto Mono';font-style: italic;font-weight: 100;src: url(fonts/c22066c14662d6c80415ae04c5dd9d51.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: 'Roboto Mono';font-style: italic;font-weight: 100;src: url(fonts/de018865c95896bb57265fc97c48ebd7.woff2) format('woff2');unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;}@font-face {font-family: 'Roboto Mono';font-style: italic;font-weight: 100;src: url(fonts/3177dacffeac1eb4102852811ae4a2c7.woff2) format('woff2');unicode-range: U+0370-03FF;}@font-face {font-family: 'Roboto Mono';font-style: italic;font-weight: 100;src: url(fonts/5989ef3a21d7f252337ab3326f78bde7.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: 'Roboto Mono';font-style: italic;font-weight: 100;src: url(fonts/dd719f1662079ce6a61260f9af972379.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-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;}@font-face {font-family: 'Roboto Mono';font-style: italic;font-weight: 100;src: url(fonts/07ff82964967feebb9c96288e0e0df05.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: 'Roboto Mono';font-style: italic;font-weight: 200;src: url(fonts/765bd4a97597a4d7781193793477a6cd.ttf) format('truetype');}@font-face {font-family: 'Roboto Mono';font-style: italic;font-weight: 200;src: url(fonts/bd0efe13f0d9d591b337ddc7f289f494.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: 'Roboto Mono';font-style: italic;font-weight: 200;src: url(fonts/ab03beb9091fa15ce4e783199e076bc6.woff2) format('woff2');unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;}@font-face {font-family: 'Roboto Mono';font-style: italic;font-weight: 200;src: url(fonts/a70ff2592da5e3453943f727633aff54.woff2) format('woff2');unicode-range: U+0370-03FF;}@font-face {font-family: 'Roboto Mono';font-style: italic;font-weight: 200;src: url(fonts/0a0ad0eae50e549ecd713b9ad417f1a1.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: 'Roboto Mono';font-style: italic;font-weight: 200;src: url(fonts/d07f561ba87d93460742b060727d9e0d.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-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;}@font-face {font-family: 'Roboto Mono';font-style: italic;font-weight: 200;src: url(fonts/43358c04243de546caddd0898dbf0757.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: 'Roboto Mono';font-style: italic;font-weight: 300;src: url(fonts/71e06579279fba7436d58a1c49288909.ttf) format('truetype');}@font-face {font-family: 'Roboto Mono';font-style: italic;font-weight: 300;src: url(fonts/fb1aaa90783b8cb9375265abeb91b153.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: 'Roboto Mono';font-style: italic;font-weight: 300;src: url(fonts/2325b97b584755067ea4f7f56ee05430.woff2) format('woff2');unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;}@font-face {font-family: 'Roboto Mono';font-style: italic;font-weight: 300;src: url(fonts/f534242dea2255c25b9d05c2371986e3.woff2) format('woff2');unicode-range: U+0370-03FF;}@font-face {font-family: 'Roboto Mono';font-style: italic;font-weight: 300;src: url(fonts/9c9be791a58af8a04c611ca1d13f51c6.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: 'Roboto Mono';font-style: italic;font-weight: 300;src: url(fonts/f2f69e8cd15fdd15a4244c95ec8a8514.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-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;}@font-face {font-family: 'Roboto Mono';font-style: italic;font-weight: 300;src: url(fonts/555ceea3a65ffbbecf8b7e6d04966c7f.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: 'Roboto Mono';font-style: italic;font-weight: 400;src: url(fonts/d98f35e926c11f3d5c0c8e3205d43907.ttf) format('truetype');}@font-face {font-family: 'Roboto Mono';font-style: italic;font-weight: 400;src: url(fonts/b93199bb6f964f190f4da04ecdbaf5a4.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: 'Roboto Mono';font-style: italic;font-weight: 400;src: url(fonts/99cf36e763be9cce7b4c59b91841af58.woff2) format('woff2');unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;}@font-face {font-family: 'Roboto Mono';font-style: italic;font-weight: 400;src: url(fonts/1488146d8b2e9859d6c90e6c2b48f7ef.woff2) format('woff2');unicode-range: U+0370-03FF;}@font-face {font-family: 'Roboto Mono';font-style: italic;font-weight: 400;src: url(fonts/255cf41e0317d95e3992683a76ef28a8.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: 'Roboto Mono';font-style: italic;font-weight: 400;src: url(fonts/f154d62b4879af7a22895af7a4ef03f0.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-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;}@font-face {font-family: 'Roboto Mono';font-style: italic;font-weight: 400;src: url(fonts/dc25cbf4baaf778bd8ae78fbc0e79479.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: 'Roboto Mono';font-style: italic;font-weight: 500;src: url(fonts/bc67bba106323289ea3eda0826de1912.ttf) format('truetype');}@font-face {font-family: 'Roboto Mono';font-style: italic;font-weight: 500;src: url(fonts/33c5d27ca0eaeb12ebe728ae2fc7106d.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: 'Roboto Mono';font-style: italic;font-weight: 500;src: url(fonts/c13b34dd5b6a35b309944b61c91b2ace.woff2) format('woff2');unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;}@font-face {font-family: 'Roboto Mono';font-style: italic;font-weight: 500;src: url(fonts/392ff374142585f7b886ee1fe66e686e.woff2) format('woff2');unicode-range: U+0370-03FF;}@font-face {font-family: 'Roboto Mono';font-style: italic;font-weight: 500;src: url(fonts/1f1481679a64a39f3427547aa1b13f0f.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: 'Roboto Mono';font-style: italic;font-weight: 500;src: url(fonts/f17ee050ada0453f3bd07bc466c2dde2.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-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;}@font-face {font-family: 'Roboto Mono';font-style: italic;font-weight: 500;src: url(fonts/6725a7e91680edd1cdc9ed5c26ac05fd.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: 'Roboto Mono';font-style: italic;font-weight: 600;src: url(fonts/cadfb311297a9362b07fab73934b432a.ttf) format('truetype');}@font-face {font-family: 'Roboto Mono';font-style: italic;font-weight: 600;src: url(fonts/e99627cd27de169d23ece4573006af2a.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: 'Roboto Mono';font-style: italic;font-weight: 600;src: url(fonts/bd51fb0ca67e64c809ffcf7e1370f969.woff2) format('woff2');unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;}@font-face {font-family: 'Roboto Mono';font-style: italic;font-weight: 600;src: url(fonts/437939342255944b82a49f916404c5fc.woff2) format('woff2');unicode-range: U+0370-03FF;}@font-face {font-family: 'Roboto Mono';font-style: italic;font-weight: 600;src: url(fonts/83614c36460a4a9734968789cb535de7.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: 'Roboto Mono';font-style: italic;font-weight: 600;src: url(fonts/d9e6a498dac7e9e91f6e0b4f8930eba0.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-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;}@font-face {font-family: 'Roboto Mono';font-style: italic;font-weight: 600;src: url(fonts/b4d3c40a77fd9e35a881a79077957055.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: 'Roboto Mono';font-style: italic;font-weight: 700;src: url(fonts/d422317033deb87342a5e56c7be67458.ttf) format('truetype');}@font-face {font-family: 'Roboto Mono';font-style: italic;font-weight: 700;src: url(fonts/2c0f74be498d2da814c0a84dd6833f70.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: 'Roboto Mono';font-style: italic;font-weight: 700;src: url(fonts/9bcbc88b33b2efc2aee821b831499f1c.woff2) format('woff2');unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;}@font-face {font-family: 'Roboto Mono';font-style: italic;font-weight: 700;src: url(fonts/8898c4b754d5d96c1a5e1b1d54100554.woff2) format('woff2');unicode-range: U+0370-03FF;}@font-face {font-family: 'Roboto Mono';font-style: italic;font-weight: 700;src: url(fonts/9a9bf2d91ebbb1b96eab8eb0b0514bcc.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: 'Roboto Mono';font-style: italic;font-weight: 700;src: url(fonts/60eb682678bbea5e8ad71f66f2f65536.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-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;}@font-face {font-family: 'Roboto Mono';font-style: italic;font-weight: 700;src: url(fonts/5ce47d5195e59af38114d0b70217baf2.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;}
 :root{--si-icon--material_alert-circle:url('data:image/svg+xml;charset=utf-8,');--si-icon--material_delete:url('data:image/svg+xml;charset=utf-8,');}.md-typeset .si-icon-inline.material_alert-circle::before{-webkit-mask-image:var(--si-icon--material_alert-circle);mask-image:var(--si-icon--material_alert-circle);}.md-typeset .si-icon-inline.material_delete::before{-webkit-mask-image:var(--si-icon--material_delete);mask-image:var(--si-icon--material_delete);}.md-typeset .admonition.versionadded{border-color:rgb(72,138,87);}.md-typeset .versionadded>.admonition-title{background-color:rgba(72,138,87,0.1);border-color:rgb(72,138,87);}.md-typeset .versionadded>.admonition-title::before{background-color:rgb(72,138,87);-webkit-mask-image:var(--si-icon--material_alert-circle);mask-image:var(--si-icon--material_alert-circle);}.md-typeset .admonition.versionchanged{border-color:rgb(238,144,64);}.md-typeset .versionchanged>.admonition-title{background-color:rgba(238,144,64,0.1);border-color:rgb(238,144,64);}.md-typeset .versionchanged>.admonition-title::before{background-color:rgb(238,144,64);-webkit-mask-image:var(--si-icon--material_alert-circle);mask-image:var(--si-icon--material_alert-circle);}.md-typeset .admonition.deprecated{border-color:rgb(203,70,83);}.md-typeset .deprecated>.admonition-title{background-color:rgba(203,70,83,0.1);border-color:rgb(203,70,83);}.md-typeset .deprecated>.admonition-title::before{background-color:rgb(203,70,83);-webkit-mask-image:var(--si-icon--material_delete);mask-image:var(--si-icon--material_delete);}
-/*# sourceMappingURL=sphinx_immaterial_theme.79d3faa9841bcddc6.min.css.map */
+/*# sourceMappingURL=sphinx_immaterial_theme.af531f03affe68837.min.css.map */
diff --git a/_static/sphinx_immaterial_theme.79d3faa9841bcddc6.min.css.map b/_static/sphinx_immaterial_theme.af531f03affe68837.min.css.map
similarity index 99%
rename from _static/sphinx_immaterial_theme.79d3faa9841bcddc6.min.css.map
rename to _static/sphinx_immaterial_theme.af531f03affe68837.min.css.map
index 0aafaf9..81c8888 100644
--- a/_static/sphinx_immaterial_theme.79d3faa9841bcddc6.min.css.map
+++ b/_static/sphinx_immaterial_theme.af531f03affe68837.min.css.map
@@ -1 +1 @@
-{"version": 3, "sections": [{"offset": {"line": 0, "column": 0}, "map": {"version": 3, "sources": ["src/assets/stylesheets/main/extensions/pymdownx/_keys.scss", "../../../src/assets/stylesheets/main.scss", "src/assets/stylesheets/main/_resets.scss", "src/assets/stylesheets/main/_colors.scss", "src/assets/stylesheets/main/_icons.scss", "src/assets/stylesheets/main/_typeset.scss", "src/assets/stylesheets/utilities/_break.scss", "src/assets/stylesheets/main/layout/_banner.scss", "src/assets/stylesheets/main/layout/_base.scss", "src/assets/stylesheets/main/layout/_clipboard.scss", "src/assets/stylesheets/main/layout/_consent.scss", "src/assets/stylesheets/main/layout/_content.scss", "src/assets/stylesheets/main/layout/_dialog.scss", "src/assets/stylesheets/main/layout/_feedback.scss", "src/assets/stylesheets/main/layout/_footer.scss", "src/assets/stylesheets/main/layout/_form.scss", "src/assets/stylesheets/main/layout/_header.scss", "src/assets/stylesheets/main/layout/_hero.scss", "src/assets/stylesheets/main/layout/_nav.scss", "src/assets/stylesheets/main/layout/_search.scss", "src/assets/stylesheets/main/layout/_select.scss", "src/assets/stylesheets/main/layout/_sidebar.scss", "src/assets/stylesheets/main/layout/_source.scss", "src/assets/stylesheets/main/layout/_tabs.scss", "src/assets/stylesheets/main/layout/_tag.scss", "src/assets/stylesheets/main/layout/_tooltip.scss", "src/assets/stylesheets/main/layout/_top.scss", "src/assets/stylesheets/main/layout/_version.scss", "src/assets/stylesheets/main/extensions/markdown/_admonition.scss", "node_modules/material-design-color/material-color.scss", "src/assets/stylesheets/main/extensions/markdown/_footnotes.scss", "src/assets/stylesheets/main/extensions/markdown/_toc.scss", "src/assets/stylesheets/main/extensions/pymdownx/_arithmatex.scss", "src/assets/stylesheets/main/extensions/pymdownx/_critic.scss", "src/assets/stylesheets/main/extensions/pymdownx/_details.scss", "src/assets/stylesheets/main/extensions/pymdownx/_emoji.scss", "src/assets/stylesheets/main/extensions/pymdownx/_highlight.scss", "src/assets/stylesheets/main/extensions/pymdownx/_tabbed.scss", "src/assets/stylesheets/main/extensions/pymdownx/_tasklist.scss", "src/assets/stylesheets/main/extensions/readthedocs/_readthedocs.scss", "src/assets/stylesheets/main/integrations/_mermaid.scss", "src/assets/stylesheets/main/integrations/_graphviz.scss", "src/assets/stylesheets/main/_modifiers.scss", "src/assets/stylesheets/main/_sphinx.scss", "src/assets/stylesheets/main/_api.scss"], "names": [], "mappings": "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C2B/3FE,wEACE,oC3Bk4FJ,C2Bn4FE,kEACE,oC3Bk4FJ,C2Bn4FE,sDACE,oC3Bk4FJ,C2B/3FI,+EACE,wBAnBG,CAoBH,kDAAA,CAAA,0C3Bi4FN,C2Bn4FI,yEACE,wBAnBG,CAoBH,0C3Bi4FN,C2Bn4FI,6DACE,wBAnBG,CAoBH,kDAAA,CAAA,0C3Bi4FN,C2B73FI,8EACE,a3B+3FN,C2Bh4FI,wEACE,a3B+3FN,C2Bh4FI,4DACE,a3B+3FN,C2B/4FE,oFACE,oB3Bk5FJ,C2Bn5FE,8EACE,oB3Bk5FJ,C2Bn5FE,kEACE,oB3Bk5FJ,C2B94FE,2FACE,mC3Bi5FJ,C2Bl5FE,qFACE,mC3Bi5FJ,C2Bl5FE,yEACE,mC3Bi5FJ,C2B94FI,kGACE,wBAnBG,CAoBH,sDAAA,CAAA,8C3Bg5FN,C2Bl5FI,4FACE,wBAnBG,CAoBH,8C3Bg5FN,C2Bl5FI,gFACE,wBAnBG,CAoBH,sDAAA,CAAA,8C3Bg5FN,C2B54FI,iGACE,a3B84FN,C2B/4FI,2FACE,a3B84FN,C2B/4FI,+EACE,a3B84FN,C2B95FE,uEACE,oB3Bi6FJ,C2Bl6FE,iEACE,oB3Bi6FJ,C2Bl6FE,qDACE,oB3Bi6FJ,C2B75FE,8EACE,mC3Bg6FJ,C2Bj6FE,wEACE,mC3Bg6FJ,C2Bj6FE,4DACE,mC3Bg6FJ,C2B75FI,qFACE,wBAnBG,CAoBH,kDAAA,CAAA,0C3B+5FN,C2Bj6FI,+EACE,wBAnBG,CAoBH,0C3B+5FN,C2Bj6FI,mEACE,wBAnBG,CAoBH,kDAAA,CAAA,0C3B+5FN,C2B35FI,oFACE,a3B65FN,C2B95FI,8EACE,a3B65FN,C2B95FI,kEACE,a3B65FN,C2B76FE,iFACE,oB3Bg7FJ,C2Bj7FE,2EACE,oB3Bg7FJ,C2Bj7FE,+DACE,oB3Bg7FJ,C2B56FE,wFACE,mC3B+6FJ,C2Bh7FE,kFACE,mC3B+6FJ,C2Bh7FE,sEACE,mC3B+6FJ,C2B56FI,+FACE,wBAnBG,CAoBH,iDAAA,CAAA,yC3B86FN,C2Bh7FI,yFACE,wBAnBG,CAoBH,yC3B86FN,C2Bh7FI,6EACE,wBAnBG,CAoBH,iDAAA,CAAA,yC3B86FN,C2B16FI,8FACE,a3B46FN,C2B76FI,wFACE,a3B46FN,C2B76FI,4EACE,a3B46FN,C2B57FE,iFACE,oB3B+7FJ,C2Bh8FE,2EACE,oB3B+7FJ,C2Bh8FE,+DACE,oB3B+7FJ,C2B37FE,wFACE,kC3B87FJ,C2B/7FE,kFACE,kC3B87FJ,C2B/7FE,sEACE,kC3B87FJ,C2B37FI,+FACE,wBAnBG,CAoBH,qDAAA,CAAA,6C3B67FN,C2B/7FI,yFACE,wBAnBG,CAoBH,6C3B67FN,C2B/7FI,6EACE,wBAnBG,CAoBH,qDAAA,CAAA,6C3B67FN,C2Bz7FI,8FACE,a3B27FN,C2B57FI,wFACE,a3B27FN,C2B57FI,4EACE,a3B27FN,C2B38FE,gFACE,oB3B88FJ,C2B/8FE,0EACE,oB3B88FJ,C2B/8FE,8DACE,oB3B88FJ,C2B18FE,uFACE,oC3B68FJ,C2B98FE,iFACE,oC3B68FJ,C2B98FE,qEACE,oC3B68FJ,C2B18FI,8FACE,wBAnBG,CAoBH,sDAAA,CAAA,8C3B48FN,C2B98FI,wFACE,wBAnBG,CAoBH,8C3B48FN,C2B98FI,4EACE,wBAnBG,CAoBH,sDAAA,CAAA,8C3B48FN,C2Bx8FI,6FACE,a3B08FN,C2B38FI,uFACE,a3B08FN,C2B38FI,2EACE,a3B08FN,C2B19FE,wFACE,oB3B69FJ,C2B99FE,kFACE,oB3B69FJ,C2B99FE,sEACE,oB3B69FJ,C2Bz9FE,+FACE,mC3B49FJ,C2B79FE,yFACE,mC3B49FJ,C2B79FE,6EACE,mC3B49FJ,C2Bz9FI,sGACE,wBAnBG,CAoBH,qDAAA,CAAA,6C3B29FN,C2B79FI,gGACE,wBAnBG,CAoBH,6C3B29FN,C2B79FI,oFACE,wBAnBG,CAoBH,qDAAA,CAAA,6C3B29FN,C2Bv9FI,qGACE,a3By9FN,C2B19FI,+FACE,a3By9FN,C2B19FI,mFACE,a3By9FN,C2Bz+FE,mFACE,oB3B4+FJ,C2B7+FE,6EACE,oB3B4+FJ,C2B7+FE,iEACE,oB3B4+FJ,C2Bx+FE,0FACE,mC3B2+FJ,C2B5+FE,oFACE,mC3B2+FJ,C2B5+FE,wEACE,mC3B2+FJ,C2Bx+FI,iGACE,wBAnBG,CAoBH,qDAAA,CAAA,6C3B0+FN,C2B5+FI,2FACE,wBAnBG,CAoBH,6C3B0+FN,C2B5+FI,+EACE,wBAnBG,CAoBH,qDAAA,CAAA,6C3B0+FN,C2Bt+FI,gGACE,a3Bw+FN,C2Bz+FI,0FACE,a3Bw+FN,C2Bz+FI,8EACE,a3Bw+FN,C2Bx/FE,0EACE,oB3B2/FJ,C2B5/FE,oEACE,oB3B2/FJ,C2B5/FE,wDACE,oB3B2/FJ,C2Bv/FE,iFACE,mC3B0/FJ,C2B3/FE,2EACE,mC3B0/FJ,C2B3/FE,+DACE,mC3B0/FJ,C2Bv/FI,wFACE,wBAnBG,CAoBH,oDAAA,CAAA,4C3By/FN,C2B3/FI,kFACE,wBAnBG,CAoBH,4C3By/FN,C2B3/FI,sEACE,wBAnBG,CAoBH,oDAAA,CAAA,4C3By/FN,C2Br/FI,uFACE,a3Bu/FN,C2Bx/FI,iFACE,a3Bu/FN,C2Bx/FI,qEACE,a3Bu/FN,C2BvgGE,gEACE,oB3B0gGJ,C2B3gGE,0DACE,oB3B0gGJ,C2B3gGE,8CACE,oB3B0gGJ,C2BtgGE,uEACE,kC3BygGJ,C2B1gGE,iEACE,kC3BygGJ,C2B1gGE,qDACE,kC3BygGJ,C2BtgGI,8EACE,wBAnBG,CAoBH,iDAAA,CAAA,yC3BwgGN,C2B1gGI,wEACE,wBAnBG,CAoBH,yC3BwgGN,C2B1gGI,4DACE,wBAnBG,CAoBH,iDAAA,CAAA,yC3BwgGN,C2BpgGI,6EACE,a3BsgGN,C2BvgGI,uEACE,a3BsgGN,C2BvgGI,2DACE,a3BsgGN,C2BthGE,oEACE,oB3ByhGJ,C2B1hGE,8DACE,oB3ByhGJ,C2B1hGE,kDACE,oB3ByhGJ,C2BrhGE,2EACE,oC3BwhGJ,C2BzhGE,qEACE,oC3BwhGJ,C2BzhGE,yDACE,oC3BwhGJ,C2BrhGI,kFACE,wBAnBG,CAoBH,qDAAA,CAAA,6C3BuhGN,C2BzhGI,4EACE,wBAnBG,CAoBH,6C3BuhGN,C2BzhGI,gEACE,wBAnBG,CAoBH,qDAAA,CAAA,6C3BuhGN,C2BnhGI,iFACE,a3BqhGN,C2BthGI,2EACE,a3BqhGN,C2BthGI,+DACE,a3B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AHA,MAAA,CAFA,iBAAA,CAOA,2CAAA,CACA,qCACE,CAEF,kDAAA,CAPA,+BpCqxHR,CACF,CoCxwHI,8CACE,YpC0wHN,CoCtwHI,iCAQE,qCAAA,CACA,6BAAA,CALA,uCAAA,CAMA,cAAA,CATA,aAAA,CAKA,gBAAA,CADA,eAAA,CAFA,8BAAA,CAWA,+BAAA,CAHA,2CACE,CALF,kBAAA,CALA,UpCkxHN,CoCnwHM,aAII,6CACE,OpCkwHV,CoCnwHQ,8CACE,OpCqwHV,CoCtwHQ,8CACE,OpCwwHV,CoCzwHQ,8CACE,OpC2wHV,CoC5wHQ,8CACE,OpC8wHV,CoC/wHQ,8CACE,OpCixHV,CoClxHQ,8CACE,OpCoxHV,CoCrxHQ,8CACE,OpCuxHV,CoCxxHQ,8CACE,OpC0xHV,CoC3xHQ,+CACE,QpC6xHV,CoC9xHQ,+CACE,QpCgyHV,CoCjyHQ,+CACE,QpCmyHV,CoCpyHQ,+CACE,QpCsyHV,CoCvyHQ,+CACE,QpCyyHV,CoC1yHQ,+CACE,QpC4yHV,CoC7yHQ,+CACE,QpC+yHV,CoChzHQ,+CACE,QpCkzHV,CoCnzHQ,+CACE,QpCqzHV,CoCtzHQ,+CACE,QpCwzHV,CoCzzHQ,+CACE,QpC2zHV,CACF,CoCtzHM,uCACE,+BpCwzHR,CoClzHE,4BACE,UpCozHJ,CoCjzHI,aAJF,4BAKI,gBpCozHJ,CACF,CoChzHE,0BACE,YpCkzHJ,CoC/yHI,aAJF,0BAKI,apCkzHJ,CoC9yHM,sCACE,OpCgzHR,CoCjzHM,uCACE,OpCmzHR,CoCpzHM,uCACE,OpCszHR,CoCvzHM,uCACE,OpCyzHR,CoC1zHM,uCACE,OpC4zHR,CoC7zHM,uCACE,OpC+zHR,CoCh0HM,uCACE,OpCk0HR,CoCn0HM,uCACE,OpCq0HR,CoCt0HM,uCACE,OpCw0HR,CoCz0HM,wCACE,QpC20HR,CoC50HM,wCACE,QpC80HR,CoC/0HM,wCACE,QpCi1HR,CoCl1HM,wCACE,QpCo1HR,CoCr1HM,wCACE,QpCu1HR,CoCx1HM,wCACE,QpC01HR,CoC31HM,wCACE,QpC61HR,CoC91HM,wCACE,QpCg2HR,CoCj2HM,wCACE,Q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2vIJ,C0CxvIE,uBACE,kB1C0vIJ,C0CvvIE,0BACE,qB1CyvIJ,C0CtvIE,0BACE,qB1CwvIJ,C0CpvIE,mJAKE,iB1CsvIJ,C0CnvIE,6JAME,gBAAA,CADA,iB1CsvIJ,C0ClvIE,wJAKE,gB1CovIJ,C0CjvIE,wPAQE,a1CmvIJ,C0C/uIE,sNAOE,kB1CivIJ,C0C9uIE,oBACE,e1CgvIJ,C0C7uIE,2CACE,W1C+uIJ,C0C5uIE,6BACE,iB1C8uIJ,C0C1uIE,2BACE,a1C4uIJ,C0CzuIE,0CACE,iB1C2uIJ,C2Ch0IE,qDAEE,kCAbkB,CAYlB,sC3Co0IJ,C2Cr0IE,kDAEE,kCAbkB,CAYlB,sC3Co0IJ,C2Cr0IE,4CAEE,kCAbkB,CAYlB,sC3Co0IJ,C2Ch0II,0DAEE,eAAA,CADA,S3Cm0IN,C2Cp0II,uDAEE,eAAA,CADA,S3Cm0IN,C2Cp0II,iDAEE,eAAA,CADA,S3Cm0IN,C2C/zII,yFAEE,kCArBW,CAsBX,eAAA,CAFA,S3Cm0IN,C2Cp0II,sFAEE,kCArBW,CAsBX,eAAA,CAFA,S3Cm0IN,C2Cp0II,gFAEE,kCArBW,CAsBX,eAAA,CAFA,S3Cm0IN,C2C9zII,gEACE,iB3Cg0IN,C2Cj0II,6DACE,iB3Cg0IN,C2Cj0II,uDACE,iB3Cg0IN,C2C7zII,kFACE,uC3C+zIN,C2Ch0II,+EACE,uC3C+zIN,C2Ch0II,yEACE,uC3C+zIN,C2C5zII,oGACE,+B3C8zIN,C2C/zII,iGACE,+B3C8zIN,C2C/zII,2FACE,+B3C8zIN,C2CxzIQ,qFAIE,iBAAA,CAHA,e3C2zIV,C2C5zIQ,kFAIE,iBAAA,CAHA,e3C2zIV,C2C5zIQ,4EAIE,iBAAA,CAHA,e3C2zIV,C2ChzIQ,2FAEE,YAAA,CADA,e3CmzIV,C2CpzIQ,wFAEE,YAAA,CADA,e3CmzIV,C2CpzIQ,kFAEE,YAAA,CADA,e3CmzIV,C2C3yIE,kDACE,Y3C6yIJ,C2CvyII,yXAGE,+B3C4yIN,C2C/yII,gXAGE,+B3C4yIN,C2C/yII,8VAGE,+B3C4yIN,C2C1yIM,6ZACE,+B3CizIR,C2ClzIM,oZACE,+B3CizIR,C2ClzIM,kYACE,+B3CizIR,C2C5yIM,0NAEE,qC3CgzIR,C2ClzIM,oNAEE,qC3CgzIR,C2ClzIM,wMAEE,qC3CgzIR,C2C9yIQ,sOACE,a3CmzIV,C2CpzIQ,gOACE,a3CmzIV,C2CpzIQ,oNACE,a3CmzIV,C2C/yIM,oSAEE,+B3CmzIR,C2CrzIM,wRAEE,+B3CmzIR,C2CrzIM,gQAEE,+B3CmzIR,C2C7yII,0BAKE,kCAvGgB,CAsGhB,sCAAA,CADA,iBAAA,CADA,kBAAA,CADA,gB3CmzIN,C2C7yIM,yDAEE,gB3C+yIR,C2C3yIM,oCACE,qCA/GY,CAiHZ,iBAAA,CADA,e3C8yIR,C2C1yIM,uCAEE,kCApHa,CAmHb,S3C6yIR,C2CzyIM,kFAEE,WAAA,CACA,gB3C2yIR,C2CvyIQ,2FAEE,gB3CyyIV,C2CpyII,sCACE,gB3CsyIN,C2CnyII,uCACE,mB3CqyIN,C2C/xIQ,2CAGE,aAAA,CADA,eAAA,CADA,iB3CmyIV,C2C5xIM,sCACE,a3C8xIR,C2CxxII,4BAIE,a3CuxIN,C2CpxIM,yCAEE,SAAA,CAEA,aAAA,CAHA,iBAAA,CAEA,O3CuxIR,C2CnxIM,6DAEE,gB3CqxIR,C2ClxIM,+CACE,WAAA,CACA,sC3CoxIR,C2ClxIQ,sDACE,W3CoxIV,C2CjxIQ,qDACE,W3CmxIV,C2C3wII,kFAEE,Y3C6wIN,C2CvwIE,yDAEE,sBAAA,CADA,iB3C0wIJ,C2C3wIE,sDAEE,sBAAA,CADA,iB3C0wIJ,C2C3wIE,gDAEE,sBAAA,CADA,iB3C0wIJ,C2CrwIA,cACE,kB3CwwIF,C2CpwIE,QACE,+BAAA,CACA,iCAAA,CACA,8BAAA,CACA,mCAAA,CACA,kCAAA,CACA,oD3CuwIJ,C2ClwIA,cAGE,6BACE,+BAAA,CACA,iCAAA,CACA,8BAAA,CACA,mCAAA,CACA,kC3CmwIF,CACF,C2ChwIA,cAYE,+CAAA,CACA,+CAAA,CACA,iBAAA,CARA,oCAAA,CALA,oBAAA,CACA,aAAA,CAMA,sCAAA,CADA,eAAA,CAHA,WA9OkB,CAmPlB,gBAnPkB,CA+OlB,gBAAA,CAKA,iBAAA,CACA,qBAAA,CARA,U3C6wIF,C2C/vII,qBAEE,6CAAA,CACA,6CAAA,CAFA,oC3CmwIN,C2CpwII,yBAEE,iDAAA,CACA,iDAAA,CAFA,oC3CwwIN,C2CzwII,oBAEE,4CAAA,CACA,4CAAA,CAFA,oC3C6wIN,C2C9wII,wBAEE,gDAAA,CACA,gDAAA,CAFA,oC3CkxIN,C2C3wIA,wBAGE,kDAAA,CACA,iBAAA,CAHA,WAAA,CACA,W3CgxIF,C2CtwIM,yIACE,iB3CywIR", "file": "main.css", "sourcesContent": ["////\n/// Copyright (c) 2016-2022 Martin Donath \n///\n/// Permission is hereby granted, free of charge, to any person obtaining a\n/// copy of this software and associated documentation files (the \"Software\"),\n/// to deal in the Software without restriction, including without limitation\n/// the rights to use, copy, modify, merge, publish, distribute, sublicense,\n/// and/or sell copies of the Software, and to permit persons to whom the\n/// Software is furnished to do so, subject to the following conditions:\n///\n/// The above copyright notice and this permission notice shall be included in\n/// all copies or substantial portions of the Software.\n///\n/// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n/// FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL\n/// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n/// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n/// DEALINGS\n////\n\n// ----------------------------------------------------------------------------\n// Rules\n// ----------------------------------------------------------------------------\n\n// Scoped in typesetted content to match specificity of regular content\n.md-typeset {\n\n  // Keyboard key\n  .keys {\n\n    // Keyboard key icon\n    kbd:is(::before, ::after) {\n      position: relative;\n      margin: 0;\n      color: inherit;\n      -moz-osx-font-smoothing: initial;\n      -webkit-font-smoothing: initial;\n    }\n\n    // Surrounding text\n    span {\n      padding: 0 px2em(3.2px);\n      color: var(--md-default-fg-color--light);\n    }\n\n    // Define keyboard keys with left icon\n    @each $name, $code in (\n\n      // Modifiers\n      \"alt\":           \"\\2387\",\n      \"left-alt\":      \"\\2387\",\n      \"right-alt\":     \"\\2387\",\n      \"command\":       \"\\2318\",\n      \"left-command\":  \"\\2318\",\n      \"right-command\": \"\\2318\",\n      \"control\":       \"\\2303\",\n      \"left-control\":  \"\\2303\",\n      \"right-control\": \"\\2303\",\n      \"meta\":          \"\\25C6\",\n      \"left-meta\":     \"\\25C6\",\n      \"right-meta\":    \"\\25C6\",\n      \"option\":        \"\\2325\",\n      \"left-option\":   \"\\2325\",\n      \"right-option\":  \"\\2325\",\n      \"shift\":         \"\\21E7\",\n      \"left-shift\":    \"\\21E7\",\n      \"right-shift\":   \"\\21E7\",\n      \"super\":         \"\\2756\",\n      \"left-super\":    \"\\2756\",\n      \"right-super\":   \"\\2756\",\n      \"windows\":       \"\\229E\",\n      \"left-windows\":  \"\\229E\",\n      \"right-windows\": \"\\229E\",\n\n      // Other keys\n      \"arrow-down\":    \"\\2193\",\n      \"arrow-left\":    \"\\2190\",\n      \"arrow-right\":   \"\\2192\",\n      \"arrow-up\":      \"\\2191\",\n      \"backspace\":     \"\\232B\",\n      \"backtab\":       \"\\21E4\",\n      \"caps-lock\":     \"\\21EA\",\n      \"clear\":         \"\\2327\",\n      \"context-menu\":  \"\\2630\",\n      \"delete\":        \"\\2326\",\n      \"eject\":         \"\\23CF\",\n      \"end\":           \"\\2913\",\n      \"escape\":        \"\\238B\",\n      \"home\":          \"\\2912\",\n      \"insert\":        \"\\2380\",\n      \"page-down\":     \"\\21DF\",\n      \"page-up\":       \"\\21DE\",\n      \"print-screen\":  \"\\2399\"\n    ) {\n      .key-#{$name}::before {\n        padding-right: px2em(6.4px);\n        content: $code;\n      }\n    }\n\n    // Define keyboard keys with right icon\n    @each $name, $code in (\n      \"tab\":           \"\\21E5\",\n      \"num-enter\":     \"\\2324\",\n      \"enter\":         \"\\23CE\"\n    ) {\n      .key-#{$name}::after {\n        padding-left: px2em(6.4px);\n        content: $code;\n      }\n    }\n  }\n}\n", "@charset \"UTF-8\";\nhtml {\n  box-sizing: border-box;\n  text-size-adjust: none;\n}\n\n*,\n*::before,\n*::after {\n  box-sizing: inherit;\n}\n@media (prefers-reduced-motion) {\n  *,\n*::before,\n*::after {\n    transition: none !important;\n  }\n}\n\nbody {\n  margin: 0;\n}\n\na,\nbutton,\nlabel,\ninput {\n  -webkit-tap-highlight-color: transparent;\n}\n\na {\n  color: inherit;\n  text-decoration: none;\n}\n\nhr {\n  display: block;\n  box-sizing: content-box;\n  height: 0.05rem;\n  padding: 0;\n  overflow: visible;\n  border: 0;\n}\n\nsmall {\n  font-size: 80%;\n}\n\nsub,\nsup {\n  line-height: 1em;\n}\n\nimg {\n  border-style: none;\n}\n\ntable {\n  border-collapse: separate;\n  border-spacing: 0;\n}\n\ntd,\nth {\n  font-weight: 400;\n  vertical-align: top;\n}\n\nbutton {\n  margin: 0;\n  padding: 0;\n  font-size: inherit;\n  font-family: inherit;\n  background: transparent;\n  border: 0;\n}\n\ninput {\n  border: 0;\n  outline: none;\n}\n\n:root, [data-md-color-scheme=default] {\n  --md-default-fg-color: hsla(0, 0%, 0%, 0.87);\n  --md-default-fg-color--light: hsla(0, 0%, 0%, 0.54);\n  --md-default-fg-color--lighter: hsla(0, 0%, 0%, 0.32);\n  --md-default-fg-color--lightest: hsla(0, 0%, 0%, 0.07);\n  --md-default-bg-color: hsla(0, 0%, 100%, 1);\n  --md-default-bg-color--light: hsla(0, 0%, 100%, 0.7);\n  --md-default-bg-color--lighter: hsla(0, 0%, 100%, 0.3);\n  --md-default-bg-color--lightest: hsla(0, 0%, 100%, 0.12);\n  --md-primary-fg-color: hsla(231, 48%, 48%, 1);\n  --md-primary-fg-color--light: hsla(231, 44%, 56%, 1);\n  --md-primary-fg-color--dark: hsla(232, 54%, 41%, 1);\n  --md-primary-bg-color: hsla(0, 0%, 100%, 1);\n  --md-primary-bg-color--light: hsla(0, 0%, 100%, 0.7);\n  --md-accent-fg-color: hsla(231, 99%, 66%, 1);\n  --md-accent-fg-color--transparent: hsla(231, 99%, 66%, 0.1);\n  --md-accent-bg-color: hsla(0, 0%, 100%, 1);\n  --md-accent-bg-color--light: hsla(0, 0%, 100%, 0.7);\n  --md-code-fg-color: hsla(200, 18%, 26%, 1);\n  --md-code-bg-color: hsla(0, 0%, 96%, 1);\n  --md-code-hl-color: hsla(60, 100%, 50%, 0.5);\n  --md-code-hl-number-color: hsla(0, 67%, 50%, 1);\n  --md-code-hl-special-color: hsla(340, 83%, 47%, 1);\n  --md-code-hl-function-color: hsla(291, 45%, 50%, 1);\n  --md-code-hl-constant-color: hsla(250, 63%, 60%, 1);\n  --md-code-hl-keyword-color: hsla(219, 54%, 51%, 1);\n  --md-code-hl-string-color: hsla(150, 63%, 30%, 1);\n  --md-code-hl-name-color: var(--md-code-fg-color);\n  --md-code-hl-operator-color: var(--md-default-fg-color--light);\n  --md-code-hl-punctuation-color: var(--md-default-fg-color--light);\n  --md-code-hl-comment-color: var(--md-default-fg-color--light);\n  --md-code-hl-generic-color: var(--md-default-fg-color--light);\n  --md-code-hl-variable-color: var(--md-default-fg-color--light);\n  --md-typeset-color: var(--md-default-fg-color);\n  --md-typeset-a-color: var(--md-primary-fg-color);\n  --md-typeset-mark-color: hsla(60, 100%, 50%, 0.5);\n  --md-typeset-del-color: hsla(6, 90%, 60%, 0.15);\n  --md-typeset-ins-color: hsla(150, 90%, 44%, 0.15);\n  --md-typeset-kbd-color: hsla(0, 0%, 98%, 1);\n  --md-typeset-kbd-accent-color: hsla(0, 100%, 100%, 1);\n  --md-typeset-kbd-border-color: hsla(0, 0%, 72%, 1);\n  --md-typeset-table-color: hsla(0, 0%, 0%, 0.12);\n  --md-admonition-fg-color: var(--md-default-fg-color);\n  --md-admonition-bg-color: var(--md-default-bg-color);\n  --md-footer-fg-color: hsla(0, 0%, 100%, 1);\n  --md-footer-fg-color--light: hsla(0, 0%, 100%, 0.7);\n  --md-footer-fg-color--lighter: hsla(0, 0%, 100%, 0.3);\n  --md-footer-bg-color: hsla(0, 0%, 0%, 0.87);\n  --md-footer-bg-color--dark: hsla(0, 0%, 0%, 0.32);\n  --md-shadow-z1:\n    0 0.2rem 0.5rem hsla(0, 0%, 0%, 0.05),\n    0 0 0.05rem hsla(0, 0%, 0%, 0.1);\n  --md-shadow-z2:\n    0 0.2rem 0.5rem hsla(0, 0%, 0%, 0.1),\n    0 0 0.05rem hsla(0, 0%, 0%, 0.25);\n  --md-shadow-z3:\n    0 0.2rem 0.5rem hsla(0, 0%, 0%, 0.2),\n    0 0 0.05rem hsla(0, 0%, 0%, 0.35);\n}\n\n.md-icon svg {\n  display: block;\n  width: 1.2rem;\n  height: 1.2rem;\n  fill: currentcolor;\n}\n\n.si-icon-inline::before {\n  display: inline-flex;\n  width: 1.125em;\n  height: 1.125em;\n  vertical-align: text-top;\n  background-color: var(--md-default-fg-color);\n  content: \"\";\n  mask-repeat: no-repeat;\n  mask-position: center;\n}\n\nbody {\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n  --md-text-font-family:\n    var(--md-text-font, _),\n    -apple-system, BlinkMacSystemFont, Helvetica, Arial, sans-serif;\n  --md-code-font-family:\n    var(--md-code-font, _),\n    SFMono-Regular, Consolas, Menlo, monospace;\n}\n\nbody,\ninput {\n  color: var(--md-typeset-color);\n  font-feature-settings: \"kern\", \"liga\";\n  font-family: var(--md-text-font-family);\n}\n\ncode,\npre,\nkbd {\n  color: var(--md-typeset-color);\n  font-feature-settings: \"kern\";\n  font-family: var(--md-code-font-family);\n}\n\n:root {\n  --md-typeset-table-sort-icon: svg-load(\"material/sort.svg\");\n  --md-typeset-table-sort-icon--asc: svg-load(\"material/sort-ascending.svg\");\n  --md-typeset-table-sort-icon--desc: svg-load(\"material/sort-descending.svg\");\n}\n\n.md-typeset {\n  font-size: 0.8rem;\n  line-height: 1.6;\n  color-adjust: exact;\n}\n@media print {\n  .md-typeset {\n    font-size: 0.68rem;\n  }\n}\n.md-typeset ul,\n.md-typeset ol,\n.md-typeset dl,\n.md-typeset figure,\n.md-typeset blockquote,\n.md-typeset pre {\n  margin-block: 1em;\n}\n.md-typeset h1 {\n  margin: 0 0 1.25em;\n  color: var(--md-default-fg-color--light);\n  font-weight: 300;\n  font-size: 2em;\n  line-height: 1.3;\n  letter-spacing: -0.01em;\n}\n.md-typeset h2 {\n  margin: 1.6em 0 0.64em;\n  font-weight: 300;\n  font-size: 1.5625em;\n  line-height: 1.4;\n  letter-spacing: -0.01em;\n}\n.md-typeset h3 {\n  margin: 1.6em 0 0.8em;\n  font-weight: 400;\n  font-size: 1.25em;\n  line-height: 1.5;\n  letter-spacing: -0.01em;\n}\n.md-typeset h2 + h3 {\n  margin-top: 0.8em;\n}\n.md-typeset h4 {\n  margin: 1em 0;\n  font-weight: 700;\n  letter-spacing: -0.01em;\n}\n.md-typeset h5,\n.md-typeset h6 {\n  margin: 1.25em 0;\n  color: var(--md-default-fg-color--light);\n  font-weight: 700;\n  font-size: 0.8em;\n  letter-spacing: -0.01em;\n}\n.md-typeset h5 {\n  text-transform: uppercase;\n}\n.md-typeset hr {\n  display: flow-root;\n  margin: 1.5em 0;\n  border-bottom: 0.05rem solid var(--md-default-fg-color--lightest);\n}\n.md-typeset a {\n  color: var(--md-typeset-a-color);\n  word-break: break-word;\n}\n.md-typeset a, .md-typeset a::before {\n  transition: color 125ms;\n}\n.md-typeset a:focus, .md-typeset a:hover {\n  color: var(--md-accent-fg-color);\n}\n.md-typeset a:focus code, .md-typeset a:hover code {\n  background-color: var(--md-accent-fg-color--transparent);\n}\n.md-typeset a code {\n  color: currentcolor;\n  transition: background-color 125ms;\n}\n.md-typeset a.focus-visible {\n  outline-color: var(--md-accent-fg-color);\n  outline-offset: 0.2rem;\n}\n.md-typeset code,\n.md-typeset pre,\n.md-typeset kbd {\n  color: var(--md-code-fg-color);\n  direction: ltr;\n  font-variant-ligatures: none;\n}\n@media print {\n  .md-typeset code,\n.md-typeset pre,\n.md-typeset kbd {\n    white-space: pre-wrap;\n  }\n}\n.md-typeset code {\n  padding: 0 0.2941176471em;\n  font-size: 0.85em;\n  word-break: break-word;\n  background-color: var(--md-code-bg-color);\n  border-radius: 0.1rem;\n  box-decoration-break: clone;\n}\n.md-typeset code:not(.focus-visible) {\n  outline: none;\n  -webkit-tap-highlight-color: transparent;\n}\n.md-typeset pre {\n  position: relative;\n  display: flow-root;\n  line-height: 1.4;\n}\n.md-typeset pre > code {\n  display: block;\n  margin: 0;\n  padding: 0.7720588235em 1.1764705882em;\n  overflow: auto;\n  word-break: normal;\n  outline-color: var(--md-accent-fg-color);\n  box-shadow: none;\n  box-decoration-break: slice;\n  touch-action: auto;\n  scrollbar-width: thin;\n  scrollbar-color: var(--md-default-fg-color--lighter) transparent;\n}\n.md-typeset pre > code:hover {\n  scrollbar-color: var(--md-accent-fg-color) transparent;\n}\n.md-typeset pre > code::-webkit-scrollbar {\n  width: 0.2rem;\n  height: 0.2rem;\n}\n.md-typeset pre > code::-webkit-scrollbar-thumb {\n  background-color: var(--md-default-fg-color--lighter);\n}\n.md-typeset pre > code::-webkit-scrollbar-thumb:hover {\n  background-color: var(--md-accent-fg-color);\n}\n.md-typeset .code-block-caption + .notranslate pre,\n.md-typeset .code-block-caption + .notranslate .highlighttable {\n  margin-top: 0;\n}\n.md-typeset kbd {\n  display: inline-block;\n  padding: 0 0.6666666667em;\n  color: var(--md-default-fg-color);\n  font-size: 0.75em;\n  vertical-align: text-top;\n  word-break: break-word;\n  background-color: var(--md-typeset-kbd-color);\n  border-radius: 0.1rem;\n  box-shadow: 0 0.1rem 0 0.05rem var(--md-typeset-kbd-border-color), 0 0.1rem 0 var(--md-typeset-kbd-border-color), 0 -0.1rem 0.2rem var(--md-typeset-kbd-accent-color) inset;\n}\n.md-typeset mark {\n  color: inherit;\n  word-break: break-word;\n  background-color: var(--md-typeset-mark-color);\n  box-decoration-break: clone;\n}\n.md-typeset abbr {\n  text-decoration: none;\n  border-bottom: 0.05rem dotted var(--md-default-fg-color--light);\n  cursor: help;\n}\n@media (hover: none) {\n  .md-typeset abbr {\n    position: relative;\n  }\n  .md-typeset abbr[title]:is(:focus, :hover)::after {\n    position: absolute;\n    inset-inline-start: 0;\n    display: inline-block;\n    width: auto;\n    min-width: max-content;\n    max-width: 80%;\n    margin-top: 2em;\n    padding: 0.2rem 0.3rem;\n    color: var(--md-default-bg-color);\n    font-size: 0.7rem;\n    background-color: var(--md-default-fg-color);\n    border-radius: 0.1rem;\n    box-shadow: var(--md-shadow-z3);\n    content: attr(title);\n  }\n}\n.md-typeset small {\n  opacity: 0.75;\n}\n.md-typeset sup,\n.md-typeset sub {\n  margin-inline-start: 0.078125em;\n}\n.md-typeset blockquote {\n  padding-inline-start: 0.6rem;\n  margin-inline: 0;\n  color: var(--md-default-fg-color--light);\n  border-inline-start: 0.2rem solid var(--md-default-fg-color--lighter);\n}\n.md-typeset ul {\n  list-style-type: disc;\n}\n.md-typeset ul,\n.md-typeset ol {\n  margin-inline-start: 0.625em;\n  padding: 0;\n}\n.md-typeset ul:not([hidden]),\n.md-typeset ol:not([hidden]) {\n  display: flow-root;\n}\n.md-typeset ul ol,\n.md-typeset ol ol {\n  list-style-type: lower-alpha;\n}\n.md-typeset ul ol ol,\n.md-typeset ol ol ol {\n  list-style-type: lower-roman;\n}\n.md-typeset ul li,\n.md-typeset ol li {\n  margin-bottom: 0.5em;\n  margin-inline-start: 1.25em;\n}\n.md-typeset ul li p,\n.md-typeset ul li blockquote,\n.md-typeset ol li p,\n.md-typeset ol li blockquote {\n  margin: 0.5em 0;\n}\n.md-typeset ul li:last-child,\n.md-typeset ol li:last-child {\n  margin-bottom: 0;\n}\n.md-typeset ul li :is(ul, ol),\n.md-typeset ol li :is(ul, ol) {\n  margin-block: 0.5em;\n  margin-inline-start: 0.625em;\n}\n.md-typeset dd {\n  margin-block: 1em 1.5em;\n  margin-inline-start: 1.875em;\n}\n.md-typeset img,\n.md-typeset svg,\n.md-typeset video {\n  max-width: 100%;\n  height: auto;\n}\n.md-typeset img[align=left] {\n  margin: 1em;\n  margin-left: 0;\n}\n.md-typeset img[align=right] {\n  margin: 1em;\n  margin-right: 0;\n}\n.md-typeset img[align]:only-child {\n  margin-top: 0;\n}\n.md-typeset img[src$=\"#only-dark\"], .md-typeset img[src$=\"#gh-dark-mode-only\"] {\n  display: none;\n}\n.md-typeset figure {\n  display: flow-root;\n  width: fit-content;\n  max-width: 100%;\n  margin: 1em auto;\n  text-align: center;\n}\n.md-typeset figure img {\n  display: block;\n}\n.md-typeset figcaption {\n  max-width: 24rem;\n  margin: 1em auto;\n  font-style: italic;\n}\n.md-typeset iframe {\n  max-width: 100%;\n}\n.md-typeset table.data:not(.plain) {\n  display: block;\n  width: max-content;\n  max-width: 100%;\n  overflow: auto;\n  font-size: 0.64rem;\n  background-color: var(--md-default-bg-color);\n  border: 0.05rem solid var(--md-typeset-table-color);\n  border-radius: 0.1rem;\n  touch-action: auto;\n}\n@media print {\n  .md-typeset table.data:not(.plain) {\n    display: table;\n  }\n}\n.md-typeset table.data:not(.plain) + * {\n  margin-top: 1.5em;\n}\n.md-typeset table.data:not(.plain) :is(th, td) > *:first-child {\n  margin-top: 0;\n}\n.md-typeset table.data:not(.plain) :is(th, td) > *:last-child {\n  margin-bottom: 0;\n}\n.md-typeset table.data:not(.plain) :is(th, td):not([align], .align-center, .align-left, .align-right) {\n  text-align: left;\n}\n[dir=rtl] .md-typeset table.data:not(.plain) :is(th, td):not([align], .align-center, .align-left, .align-right) {\n  text-align: right;\n}\n.md-typeset table.data:not(.plain) th {\n  min-width: 5rem;\n  padding: 0.9375em 1.25em;\n  font-weight: 700;\n  vertical-align: top;\n}\n.md-typeset table.data:not(.plain) td {\n  padding: 0.9375em 1.25em;\n  vertical-align: top;\n  border-top: 0.05rem solid var(--md-typeset-table-color);\n}\n.md-typeset table.data:not(.plain) tbody tr {\n  transition: background-color 125ms;\n}\n.md-typeset table.data:not(.plain) tbody tr:hover {\n  background-color: rgba(0, 0, 0, 0.035);\n  box-shadow: 0 0.05rem 0 var(--md-default-bg-color) inset;\n}\n.md-typeset table.data:not(.plain) a {\n  word-break: normal;\n}\n.md-typeset table th[role=columnheader] {\n  cursor: pointer;\n}\n.md-typeset table th[role=columnheader]::after {\n  display: inline-block;\n  width: 1.2em;\n  height: 1.2em;\n  margin-inline-start: 0.5em;\n  vertical-align: text-bottom;\n  mask-image: var(--md-typeset-table-sort-icon);\n  mask-repeat: no-repeat;\n  mask-size: contain;\n  transition: background-color 125ms;\n  content: \"\";\n}\n.md-typeset table th[role=columnheader]:hover::after {\n  background-color: var(--md-default-fg-color--lighter);\n}\n.md-typeset table th[role=columnheader][aria-sort=ascending]::after {\n  background-color: var(--md-default-fg-color--light);\n  mask-image: var(--md-typeset-table-sort-icon--asc);\n}\n.md-typeset table th[role=columnheader][aria-sort=descending]::after {\n  background-color: var(--md-default-fg-color--light);\n  mask-image: var(--md-typeset-table-sort-icon--desc);\n}\n.md-typeset__scrollwrap {\n  margin: 1em -0.8rem;\n  overflow-x: auto;\n  touch-action: auto;\n}\n.md-typeset__table {\n  display: inline-block;\n  margin-bottom: 0.5em;\n  padding: 0 0.8rem;\n}\n@media print {\n  .md-typeset__table {\n    display: block;\n  }\n}\nhtml .md-typeset__table table {\n  display: table;\n  width: 100%;\n  margin: 0;\n  overflow: hidden;\n}\n\n@media screen and (max-width: 44.9375em) {\n  .md-content__inner > pre {\n    margin: 1em -0.8rem;\n  }\n  .md-content__inner > pre code {\n    border-radius: 0;\n  }\n}\n.md-banner {\n  overflow: auto;\n  color: var(--md-footer-fg-color);\n  background-color: var(--md-footer-bg-color);\n}\n@media print {\n  .md-banner {\n    display: none;\n  }\n}\n.md-banner--warning {\n  color: var(--md-default-fg-color);\n  background: var(--md-typeset-mark-color);\n}\n.md-banner__inner {\n  margin: 0.6rem auto;\n  padding: 0 0.8rem;\n  font-size: 0.7rem;\n}\n.md-banner__button {\n  float: inline-end;\n  color: inherit;\n  cursor: pointer;\n  transition: opacity 250ms;\n}\n.md-banner__button:hover {\n  opacity: 0.7;\n}\n\nhtml {\n  height: 100%;\n  overflow-x: hidden;\n  font-size: 125%;\n}\n@media screen and (min-width: 100em) {\n  html {\n    font-size: 137.5%;\n  }\n}\n@media screen and (min-width: 125em) {\n  html {\n    font-size: 150%;\n  }\n}\n\nbody {\n  position: relative;\n  display: flex;\n  flex-direction: column;\n  width: 100%;\n  min-height: 100%;\n  font-size: 0.5rem;\n  background-color: var(--md-default-bg-color);\n}\n@media print {\n  body {\n    display: block;\n  }\n}\n@media screen and (max-width: 59.9375em) {\n  body[data-md-scrolllock] {\n    position: fixed;\n  }\n}\n\n.md-grid {\n  max-width: 61rem;\n  margin-inline: auto;\n}\n\n.md-container {\n  display: flex;\n  flex-direction: column;\n  flex-grow: 1;\n}\n@media print {\n  .md-container {\n    display: block;\n  }\n}\n\n.md-main {\n  flex-grow: 1;\n}\n.md-main__inner {\n  display: flex;\n  height: 100%;\n  margin-top: 1.5rem;\n}\n\n.md-ellipsis {\n  overflow: hidden;\n  white-space: nowrap;\n  text-overflow: ellipsis;\n}\n\n.md-toggle {\n  display: none;\n}\n\n.md-option {\n  position: absolute;\n  width: 0;\n  height: 0;\n  opacity: 0;\n}\n.md-option:checked + label:not([hidden]) {\n  display: block;\n}\n.md-option.focus-visible + label {\n  outline-style: auto;\n  outline-color: var(--md-accent-fg-color);\n}\n\n.md-skip {\n  position: fixed;\n  z-index: -1;\n  margin: 0.5rem;\n  padding: 0.3rem 0.5rem;\n  color: var(--md-default-bg-color);\n  font-size: 0.64rem;\n  background-color: var(--md-default-fg-color);\n  border-radius: 0.1rem;\n  outline-color: var(--md-accent-fg-color);\n  transform: translateY(0.4rem);\n  opacity: 0;\n}\n.md-skip:focus {\n  z-index: 10;\n  transform: translateY(0);\n  opacity: 1;\n  transition: transform 250ms cubic-bezier(0.4, 0, 0.2, 1), opacity 175ms 75ms;\n}\n\n@page {\n  margin: 25mm;\n}\n:root {\n  --md-clipboard-icon: svg-load(\"material/content-copy.svg\");\n}\n\n.md-clipboard {\n  position: absolute;\n  top: 0.5em;\n  right: 0.5em;\n  z-index: 1;\n  width: 1.5em;\n  height: 1.5em;\n  color: var(--md-default-fg-color--lightest);\n  border-radius: 0.1rem;\n  outline-color: var(--md-accent-fg-color);\n  outline-offset: 0.1rem;\n  cursor: pointer;\n  transition: color 250ms;\n}\n@media print {\n  .md-clipboard {\n    display: none;\n  }\n}\n.md-clipboard:not(.focus-visible) {\n  outline: none;\n  -webkit-tap-highlight-color: transparent;\n}\n:hover > .md-clipboard {\n  color: var(--md-default-fg-color--light);\n}\n.md-clipboard:is(:focus, :hover) {\n  color: var(--md-accent-fg-color);\n}\n.md-clipboard::after {\n  display: block;\n  width: 1.125em;\n  height: 1.125em;\n  margin: 0 auto;\n  background-color: currentcolor;\n  mask-image: var(--md-clipboard-icon);\n  mask-position: center;\n  mask-repeat: no-repeat;\n  mask-size: contain;\n  content: \"\";\n}\n.md-clipboard--inline {\n  cursor: pointer;\n}\n.md-clipboard--inline code {\n  transition: color 250ms, background-color 250ms;\n}\n.md-clipboard--inline:is(:focus, :hover) code {\n  color: var(--md-accent-fg-color);\n  background-color: var(--md-accent-fg-color--transparent);\n}\n\n@keyframes consent {\n  0% {\n    transform: translateY(100%);\n    opacity: 0;\n  }\n  100% {\n    transform: translateY(0);\n    opacity: 1;\n  }\n}\n@keyframes overlay {\n  0% {\n    opacity: 0;\n  }\n  100% {\n    opacity: 1;\n  }\n}\n.md-consent__overlay {\n  position: fixed;\n  top: 0;\n  z-index: 5;\n  width: 100%;\n  height: 100%;\n  background-color: hsla(0deg, 0%, 0%, 0.54);\n  opacity: 1;\n  backdrop-filter: blur(0.1rem);\n  animation: overlay 250ms both;\n}\n.md-consent__inner {\n  position: fixed;\n  bottom: 0;\n  z-index: 5;\n  width: 100%;\n  max-height: 100%;\n  padding: 0;\n  overflow: auto;\n  background-color: var(--md-default-bg-color);\n  border: 0;\n  border-radius: 0.1rem;\n  box-shadow: 0 0 0.2rem rgba(0, 0, 0, 0.1), 0 0.2rem 0.4rem rgba(0, 0, 0, 0.2);\n  animation: consent 500ms cubic-bezier(0.1, 0.7, 0.1, 1) both;\n}\n.md-consent__form {\n  padding: 0.8rem;\n}\n.md-consent__settings {\n  display: none;\n  margin: 1em 0;\n}\ninput:checked + .md-consent__settings {\n  display: block;\n}\n.md-consent__controls {\n  margin-bottom: 0.8rem;\n}\n.md-typeset .md-consent__controls .md-button {\n  display: inline;\n}\n@media screen and (max-width: 44.9375em) {\n  .md-typeset .md-consent__controls .md-button {\n    display: block;\n    width: 100%;\n    margin-top: 0.4rem;\n    text-align: center;\n  }\n}\n.md-consent label {\n  cursor: pointer;\n}\n\n.md-content {\n  flex-grow: 1;\n  min-width: 0;\n}\n.md-content__inner {\n  margin: 0 0.8rem 1.2rem;\n  padding-top: 0.6rem;\n}\n@media screen and (min-width: 76.25em) {\n  .md-sidebar--primary:not([hidden]) ~ .md-content > .md-content__inner {\n    margin-inline-start: 1.2rem;\n  }\n  .md-sidebar--secondary:not([hidden]) ~ .md-content > .md-content__inner {\n    margin-inline-end: 1.2rem;\n  }\n}\n.md-content__inner::before {\n  display: block;\n  height: 0.4rem;\n  content: \"\";\n}\n.md-content__inner > :last-child {\n  margin-bottom: 0;\n}\n.md-content__button {\n  float: inline-end;\n  margin: 0.4rem 0;\n  margin-inline-start: 0.4rem;\n  padding: 0;\n}\n@media print {\n  .md-content__button {\n    display: none;\n  }\n}\n.md-typeset .md-content__button {\n  color: var(--md-default-fg-color--lighter);\n}\n.md-content__button svg {\n  display: inline;\n  vertical-align: top;\n}\n[dir=rtl] .md-content__button svg {\n  transform: scaleX(-1);\n}\n\n.md-dialog {\n  position: fixed;\n  inset-inline-end: 0.8rem;\n  bottom: 0.8rem;\n  z-index: 4;\n  min-width: 11.1rem;\n  padding: 0.4rem 0.6rem;\n  background-color: var(--md-default-fg-color);\n  border-radius: 0.1rem;\n  box-shadow: var(--md-shadow-z3);\n  transform: translateY(100%);\n  opacity: 0;\n  transition: transform 0ms 400ms, opacity 400ms;\n  pointer-events: none;\n}\n@media print {\n  .md-dialog {\n    display: none;\n  }\n}\n.md-dialog--active {\n  transform: translateY(0);\n  opacity: 1;\n  transition: transform 400ms cubic-bezier(0.075, 0.85, 0.175, 1), opacity 400ms;\n  pointer-events: initial;\n}\n.md-dialog__inner {\n  color: var(--md-default-bg-color);\n  font-size: 0.7rem;\n}\n\n.md-feedback {\n  margin: 2em 0 1em;\n  text-align: center;\n}\n.md-feedback fieldset {\n  margin: 0;\n  padding: 0;\n  border: none;\n}\n.md-feedback__title {\n  margin: 1em auto;\n  font-weight: 700;\n}\n.md-feedback__inner {\n  position: relative;\n}\n.md-feedback__list {\n  position: relative;\n  display: flex;\n  flex-wrap: wrap;\n  align-content: baseline;\n  justify-content: center;\n}\n.md-feedback__list:hover .md-icon:not(:disabled) {\n  color: var(--md-default-fg-color--lighter);\n}\n:disabled .md-feedback__list {\n  min-height: 1.8rem;\n}\n.md-feedback__icon {\n  flex-shrink: 0;\n  margin: 0 0.1rem;\n  color: var(--md-default-fg-color--light);\n  cursor: pointer;\n  transition: color 125ms;\n}\n.md-feedback__icon:not(:disabled).md-icon:hover {\n  color: var(--md-accent-fg-color);\n}\n.md-feedback__icon:disabled {\n  color: var(--md-default-fg-color--lightest);\n  pointer-events: none;\n}\n.md-feedback__note {\n  position: relative;\n  transform: translateY(0.4rem);\n  opacity: 0;\n  transition: transform 400ms cubic-bezier(0.1, 0.7, 0.1, 1), opacity 150ms;\n}\n.md-feedback__note > * {\n  max-width: 16rem;\n  margin: 0 auto;\n}\n:disabled .md-feedback__note {\n  transform: translateY(0);\n  opacity: 1;\n}\n\n.md-footer {\n  color: var(--md-footer-fg-color);\n  background-color: var(--md-footer-bg-color);\n}\n@media print {\n  .md-footer {\n    display: none;\n  }\n}\n.md-footer__inner {\n  justify-content: space-between;\n  padding: 0.2rem;\n  overflow: auto;\n}\n.md-footer__inner:not([hidden]) {\n  display: flex;\n}\n.md-footer__link {\n  display: flex;\n  flex-grow: 0.01;\n  padding-top: 1.4rem;\n  padding-bottom: 0.4rem;\n  overflow: hidden;\n  outline-color: var(--md-accent-fg-color);\n  transition: opacity 250ms;\n}\n.md-footer__link:is(:focus, :hover) {\n  opacity: 0.7;\n}\n[dir=rtl] .md-footer__link svg {\n  transform: scaleX(-1);\n}\n@media screen and (max-width: 44.9375em) {\n  .md-footer__link--prev .md-footer__title {\n    display: none;\n  }\n}\n.md-footer__link--next {\n  margin-inline-start: auto;\n  text-align: right;\n}\n[dir=rtl] .md-footer__link--next {\n  text-align: left;\n}\n.md-footer__title {\n  position: relative;\n  flex-grow: 1;\n  max-width: calc(100% - 2.4rem);\n  padding: 0 1rem;\n  font-size: 0.9rem;\n  line-height: 2.4rem;\n  white-space: nowrap;\n}\n.md-footer__button {\n  margin: 0.2rem;\n  padding: 0.4rem;\n}\n.md-footer__direction {\n  position: absolute;\n  inset-inline: 0;\n  margin-top: -1rem;\n  padding: 0 1rem;\n  font-size: 0.64rem;\n  opacity: 0.7;\n}\n\n.md-footer-meta {\n  background-color: var(--md-footer-bg-color--dark);\n}\n.md-footer-meta__inner {\n  display: flex;\n  flex-wrap: wrap;\n  justify-content: space-between;\n  padding: 0.2rem;\n}\nhtml .md-footer-meta.md-typeset a {\n  color: var(--md-footer-fg-color--light);\n}\nhtml .md-footer-meta.md-typeset a:is(:focus, :hover) {\n  color: var(--md-footer-fg-color);\n}\n\n.md-copyright {\n  width: 100%;\n  margin: auto 0.6rem;\n  padding: 0.4rem 0;\n  color: var(--md-footer-fg-color--lighter);\n  font-size: 0.64rem;\n}\n@media screen and (min-width: 45em) {\n  .md-copyright {\n    width: auto;\n  }\n}\n.md-copyright__highlight {\n  color: var(--md-footer-fg-color--light);\n}\n\n.md-social {\n  margin: 0 0.4rem;\n  padding: 0.2rem 0 0.6rem;\n}\n@media screen and (min-width: 45em) {\n  .md-social {\n    padding: 0.6rem 0;\n  }\n}\n.md-social__link {\n  display: inline-block;\n  width: 1.6rem;\n  height: 1.6rem;\n  text-align: center;\n}\n.md-social__link::before {\n  line-height: 1.9;\n}\n.md-social__link svg {\n  max-height: 0.8rem;\n  vertical-align: -25%;\n  fill: currentcolor;\n}\n\n.md-typeset .md-button {\n  display: inline-block;\n  padding: 0.625em 2em;\n  color: var(--md-primary-fg-color);\n  font-weight: 700;\n  border: 0.1rem solid currentcolor;\n  border-radius: 0.1rem;\n  cursor: pointer;\n  transition: color 125ms, background-color 125ms, border-color 125ms;\n}\n.md-typeset .md-button--primary {\n  color: var(--md-primary-bg-color);\n  background-color: var(--md-primary-fg-color);\n  border-color: var(--md-primary-fg-color);\n}\n.md-typeset .md-button:is(:focus, :hover) {\n  color: var(--md-accent-bg-color);\n  background-color: var(--md-accent-fg-color);\n  border-color: var(--md-accent-fg-color);\n}\n.md-typeset .md-input {\n  height: 1.8rem;\n  padding: 0 0.6rem;\n  font-size: 0.8rem;\n  border-bottom: 0.1rem solid var(--md-default-fg-color--lighter);\n  border-start-start-radius: 0.1rem;\n  border-start-end-radius: 0.1rem;\n  box-shadow: var(--md-shadow-z1);\n  transition: border 250ms, box-shadow 250ms;\n}\n.md-typeset .md-input:is(:focus, :hover) {\n  border-bottom-color: var(--md-accent-fg-color);\n  box-shadow: var(--md-shadow-z2);\n}\n.md-typeset .md-input--stretch {\n  width: 100%;\n}\n\n.md-header {\n  position: sticky;\n  top: 0;\n  inset-inline: 0;\n  z-index: 4;\n  display: block;\n  color: var(--md-primary-bg-color);\n  background-color: var(--md-primary-fg-color);\n  box-shadow: 0 0 0.2rem rgba(0, 0, 0, 0), 0 0.2rem 0.4rem rgba(0, 0, 0, 0);\n}\n@media print {\n  .md-header {\n    display: none;\n  }\n}\n.md-header[hidden] {\n  transform: translateY(-100%);\n  transition: transform 250ms cubic-bezier(0.8, 0, 0.6, 1), box-shadow 250ms;\n}\n.md-header--shadow {\n  box-shadow: 0 0 0.2rem rgba(0, 0, 0, 0.1), 0 0.2rem 0.4rem rgba(0, 0, 0, 0.2);\n  transition: transform 250ms cubic-bezier(0.1, 0.7, 0.1, 1), box-shadow 250ms;\n}\n.md-header__inner {\n  display: flex;\n  align-items: center;\n  padding: 0 0.2rem;\n}\n.md-header__button {\n  position: relative;\n  z-index: 1;\n  margin: 0.2rem;\n  padding: 0.4rem;\n  color: currentcolor;\n  vertical-align: middle;\n  outline-color: var(--md-accent-fg-color);\n  cursor: pointer;\n  transition: opacity 250ms;\n}\n.md-header__button:hover {\n  opacity: 0.7;\n}\n.md-header__button:not([hidden]) {\n  display: inline-block;\n}\n.md-header__button:not(.focus-visible) {\n  outline: none;\n  -webkit-tap-highlight-color: transparent;\n}\n.md-header__button.md-logo {\n  margin: 0.2rem;\n  padding: 0.4rem;\n}\n@media screen and (max-width: 76.1875em) {\n  .md-header__button.md-logo {\n    display: none;\n  }\n}\n.md-header__button.md-logo :is(img, svg) {\n  display: block;\n  width: auto;\n  height: 1.2rem;\n  fill: currentcolor;\n}\n@media screen and (min-width: 60em) {\n  .md-header__button[for=__search] {\n    display: none;\n  }\n}\n.no-js .md-header__button[for=__search] {\n  display: none;\n}\n[dir=rtl] .md-header__button[for=__search] svg {\n  transform: scaleX(-1);\n}\n@media screen and (min-width: 76.25em) {\n  .md-header__button[for=__drawer] {\n    display: none;\n  }\n}\n.md-header__topic {\n  position: absolute;\n  display: flex;\n  max-width: 100%;\n  white-space: nowrap;\n  transition: transform 400ms cubic-bezier(0.1, 0.7, 0.1, 1), opacity 150ms;\n}\n.md-header__topic + .md-header__topic {\n  z-index: -1;\n  transform: translateX(1.25rem);\n  opacity: 0;\n  transition: transform 400ms cubic-bezier(1, 0.7, 0.1, 0.1), opacity 150ms;\n  pointer-events: none;\n}\n[dir=rtl] .md-header__topic + .md-header__topic {\n  transform: translateX(-1.25rem);\n}\n.md-header__topic:first-child {\n  font-weight: 700;\n}\n.md-header__title {\n  flex-grow: 1;\n  height: 2.4rem;\n  margin-inline-end: 0.4rem;\n  margin-inline-start: 1rem;\n  font-size: 0.9rem;\n  line-height: 2.4rem;\n}\n.md-header__title--active .md-header__topic {\n  z-index: -1;\n  transform: translateX(-1.25rem);\n  opacity: 0;\n  transition: transform 400ms cubic-bezier(1, 0.7, 0.1, 0.1), opacity 150ms;\n  pointer-events: none;\n}\n[dir=rtl] .md-header__title--active .md-header__topic {\n  transform: translateX(1.25rem);\n}\n.md-header__title--active .md-header__topic + .md-header__topic {\n  z-index: 0;\n  transform: translateX(0);\n  opacity: 1;\n  transition: transform 400ms cubic-bezier(0.1, 0.7, 0.1, 1), opacity 150ms;\n  pointer-events: initial;\n}\n.md-header__title > .md-header__ellipsis {\n  position: relative;\n  width: 100%;\n  height: 100%;\n}\n.md-header__option {\n  display: flex;\n  flex-shrink: 0;\n  max-width: 100%;\n  white-space: nowrap;\n  transition: max-width 0ms 250ms, opacity 250ms 250ms;\n}\n[data-md-toggle=search]:checked ~ .md-header .md-header__option {\n  max-width: 0;\n  opacity: 0;\n  transition: max-width 0ms, opacity 0ms;\n}\n.md-header__source {\n  display: none;\n}\n@media screen and (min-width: 60em) {\n  .md-header__source {\n    display: block;\n    width: 11.7rem;\n    max-width: 11.7rem;\n    margin-inline-start: 1rem;\n  }\n}\n@media screen and (min-width: 76.25em) {\n  .md-header__source {\n    margin-inline-start: 1.4rem;\n  }\n}\n\n.md-hero {\n  overflow: hidden;\n  color: var(--md-primary-bg-color);\n  font-size: 1rem;\n  background-color: var(--md-primary-fg-color);\n  transition: background 250ms;\n}\n.md-hero__inner {\n  margin-top: 1rem;\n  padding: 0.8rem 0.8rem 0.4rem;\n  transition: transform 400ms cubic-bezier(0.1, 0.7, 0.1, 1), opacity 250ms;\n  transition-delay: 100ms;\n}\n@media screen and (max-width: 76.1875em) {\n  .md-hero__inner {\n    margin-top: 2.4rem;\n    margin-bottom: 1.2rem;\n  }\n}\n[data-md-state=hidden] .md-hero__inner {\n  transform: translateY(0.625rem);\n  opacity: 0;\n  transition: transform 0ms 400ms, opacity 100ms 0ms;\n  pointer-events: none;\n}\n.md-hero--expand .md-hero__inner {\n  margin-bottom: 1.2rem;\n}\n\n:root {\n  --md-nav-icon--prev: svg-load(\"material/arrow-left.svg\");\n  --md-nav-icon--next: svg-load(\"material/chevron-right.svg\");\n  --md-toc-icon: svg-load(\"material/table-of-contents.svg\");\n}\n\n.md-nav {\n  font-size: 0.7rem;\n  line-height: 1.3;\n}\n.md-nav__title {\n  display: flex;\n  align-items: center;\n  padding: 0 0.6rem;\n  overflow: hidden;\n  font-weight: 700;\n  text-overflow: ellipsis;\n}\n.md-nav__title .md-nav__button {\n  display: none;\n}\n.md-nav__title .md-nav__button img {\n  width: auto;\n  height: 100%;\n}\n.md-nav__title .md-nav__button.md-logo :is(img, svg) {\n  display: block;\n  width: auto;\n  max-width: 100%;\n  height: 2.4rem;\n  object-fit: contain;\n  fill: currentcolor;\n}\n.md-nav__list {\n  margin: 0;\n  padding: 0;\n  list-style: none;\n}\n.md-nav__item {\n  padding: 0 0.6rem;\n}\n.md-nav__item .md-nav__item {\n  padding-inline-end: 0;\n}\n.md-nav__link {\n  display: flex;\n  align-items: center;\n  margin-top: 0.625em;\n  cursor: pointer;\n  transition: color 125ms;\n  scroll-snap-align: start;\n}\n.md-nav__link.md-nav__sticky {\n  box-shadow: 0 -0.625em var(--md-default-bg-color), 0 0.625em var(--md-default-bg-color);\n}\n.md-nav__link--passed {\n  color: var(--md-default-fg-color--light);\n}\n.md-nav__item .md-nav__link--active {\n  color: var(--md-typeset-a-color);\n}\n.md-nav__link--in-viewport {\n  position: relative;\n}\n.md-nav__link--in-viewport::before {\n  position: absolute;\n  top: 0;\n  right: calc(100% + 0.3rem);\n  bottom: 0;\n  width: 0.05rem;\n  height: 100%;\n  background-color: var(--md-primary-fg-color);\n  content: \"\";\n}\n.md-nav__item .md-nav__link--index [href] {\n  width: 100%;\n}\n.md-nav__link:is(:focus, :hover) {\n  color: var(--md-accent-fg-color);\n}\n.md-nav__link.focus-visible {\n  outline-color: var(--md-accent-fg-color);\n  outline-offset: 0.2rem;\n}\n.md-nav--primary .md-nav__link[for=__toc] {\n  display: none;\n}\n.md-nav--primary .md-nav__link[for=__toc] .md-icon::after {\n  display: block;\n  width: 100%;\n  height: 100%;\n  mask-image: var(--md-toc-icon);\n  background-color: currentcolor;\n}\n.md-nav--primary .md-nav__link[for=__toc] ~ .md-nav {\n  display: none;\n}\n.md-nav__link > * {\n  display: flex;\n  cursor: pointer;\n}\n.md-nav__sticky {\n  position: sticky;\n  top: var(--md-nav__header-height, 0);\n  z-index: var(--md-nav__sticky-zindex);\n  background-color: var(--md-default-bg-color);\n}\n.md-nav .md-ellipsis {\n  display: block;\n  flex-grow: 1;\n  white-space: normal;\n}\n.md-nav__icon {\n  flex-shrink: 0;\n}\n.md-nav__source {\n  display: none;\n}\n@media screen and (max-width: 76.1875em) {\n  .md-nav--primary, .md-nav--primary .md-nav {\n    position: absolute;\n    top: 0;\n    inset-inline: 0;\n    z-index: 1;\n    display: flex;\n    flex-direction: column;\n    height: 100%;\n    background-color: var(--md-default-bg-color);\n  }\n  .md-nav--primary .md-nav__sticky {\n    position: static;\n    z-index: auto;\n    background-color: transparent;\n    box-shadow: none;\n  }\n  .md-nav--primary :is(.md-nav__title, .md-nav__item) {\n    font-size: 0.8rem;\n    line-height: 1.5;\n  }\n  .md-nav--primary .md-nav__title {\n    position: relative;\n    min-height: 5.6rem;\n    padding: 3rem 0.8rem 0.2rem;\n    color: var(--md-default-fg-color--light);\n    line-height: 2.4rem;\n    white-space: nowrap;\n    background-color: var(--md-default-fg-color--lightest);\n    cursor: pointer;\n  }\n  .md-nav--primary .md-nav__title .md-nav__icon {\n    position: absolute;\n    top: 0.4rem;\n    inset-inline-start: 0.4rem;\n    display: block;\n    width: 1.2rem;\n    height: 1.2rem;\n    margin: 0.2rem;\n  }\n  .md-nav--primary .md-nav__title .md-nav__icon::after {\n    display: block;\n    width: 100%;\n    height: 100%;\n    background-color: currentcolor;\n    mask-image: var(--md-nav-icon--prev);\n    mask-position: center;\n    mask-repeat: no-repeat;\n    mask-size: contain;\n    content: \"\";\n  }\n  .md-nav--primary .md-nav__title ~ .md-nav__list {\n    overflow-y: auto;\n    background-color: var(--md-default-bg-color);\n    box-shadow: 0 0.05rem 0 var(--md-default-fg-color--lightest) inset;\n    scroll-snap-type: y mandatory;\n    touch-action: pan-y;\n  }\n  .md-nav--primary .md-nav__title ~ .md-nav__list > :first-child {\n    border-top: 0;\n  }\n  .md-nav--primary .md-nav__title[for=__drawer] {\n    color: var(--md-primary-bg-color);\n    font-weight: 700;\n    background-color: var(--md-primary-fg-color);\n  }\n  .md-nav--primary .md-nav__title .md-logo {\n    position: absolute;\n    top: 0.2rem;\n    inset-inline: 0.2rem;\n    display: block;\n    margin: 0.2rem;\n    padding: 0.4rem;\n  }\n  .md-nav--primary .md-nav__list {\n    flex: 1;\n  }\n  .md-nav--primary .md-nav__item {\n    padding: 0;\n    border-top: 0.05rem solid var(--md-default-fg-color--lightest);\n  }\n  .md-nav--primary .md-nav__item--active > .md-nav__link {\n    color: var(--md-typeset-a-color);\n  }\n  .md-nav--primary .md-nav__item--active > .md-nav__link:is(:focus, :hover) {\n    color: var(--md-accent-fg-color);\n  }\n  .md-nav--primary .md-nav__link {\n    margin-top: 0;\n    padding: 0.6rem 0.8rem;\n  }\n  .md-nav--primary .md-nav__link .md-nav__icon {\n    width: 1.2rem;\n    height: 1.2rem;\n    margin-inline-end: -0.2rem;\n    font-size: 1.2rem;\n  }\n  .md-nav--primary .md-nav__link .md-nav__icon::after {\n    display: block;\n    width: 100%;\n    height: 100%;\n    background-color: currentcolor;\n    mask-image: var(--md-nav-icon--next);\n    mask-position: center;\n    mask-repeat: no-repeat;\n    mask-size: contain;\n    content: \"\";\n  }\n  [dir=rtl] .md-nav--primary .md-nav__icon::after {\n    transform: scale(-1);\n  }\n  .md-nav--primary .md-nav--secondary .md-nav {\n    position: static;\n    background-color: transparent;\n  }\n  .md-nav--primary .md-nav--secondary .md-nav .md-nav__link {\n    padding-inline-start: 1.4rem;\n  }\n  .md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav__link {\n    padding-inline-start: 2rem;\n  }\n  .md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav .md-nav__link {\n    padding-inline-start: 2.6rem;\n  }\n  .md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav .md-nav .md-nav__link {\n    padding-inline-start: 3.2rem;\n  }\n  .md-nav--secondary {\n    background-color: transparent;\n  }\n  .md-nav__toggle ~ .md-nav {\n    display: flex;\n    transform: translateX(100%);\n    opacity: 0;\n    transition: transform 250ms cubic-bezier(0.8, 0, 0.6, 1), opacity 125ms 50ms;\n  }\n  [dir=rtl] .md-nav__toggle ~ .md-nav {\n    transform: translateX(-100%);\n  }\n  .md-nav__toggle:checked ~ .md-nav {\n    transform: translateX(0);\n    opacity: 1;\n    transition: transform 250ms cubic-bezier(0.4, 0, 0.2, 1), opacity 125ms 125ms;\n  }\n  .md-nav__toggle:checked ~ .md-nav > .md-nav__list {\n    backface-visibility: hidden;\n  }\n  .md-nav .md-nav__title .md-ellipsis {\n    white-space: nowrap;\n  }\n  .md-nav .md-nav__title .md-ellipsis wbr {\n    display: none;\n  }\n}\n@media screen and (max-width: 59.9375em) {\n  .md-nav__current-nested {\n    display: none;\n  }\n  .md-nav--primary .md-nav__link[for=__toc] {\n    display: flex;\n  }\n  .md-nav--primary .md-nav__link[for=__toc] .md-icon::after {\n    content: \"\";\n  }\n  .md-nav--primary .md-nav__link[for=__toc] + .md-nav__link {\n    display: none;\n  }\n  .md-nav--primary .md-nav__link[for=__toc] ~ .md-nav {\n    display: flex;\n  }\n  .md-nav__source {\n    display: block;\n    padding: 0 0.2rem;\n    color: var(--md-primary-bg-color);\n    background-color: var(--md-primary-fg-color--dark);\n  }\n}\n@media screen and (min-width: 60em) and (max-width: 76.1875em) {\n  .md-nav--integrated .md-nav__link[for=__toc] {\n    display: flex;\n  }\n  .md-nav--integrated .md-nav__link[for=__toc] .md-icon::after {\n    content: \"\";\n  }\n  .md-nav--integrated .md-nav__link[for=__toc] + .md-nav__link {\n    display: none;\n  }\n  .md-nav--integrated .md-nav__link[for=__toc] ~ .md-nav {\n    display: flex;\n  }\n}\n@media screen and (min-width: 60em) {\n  .md-nav__current-toc {\n    display: none;\n  }\n  .md-nav--secondary .md-nav__title {\n    position: sticky;\n    top: 0;\n    z-index: 1;\n    background: var(--md-default-bg-color);\n    box-shadow: 0 0 0.4rem 0.4rem var(--md-default-bg-color);\n  }\n  .md-nav--secondary .md-nav__title[for=__toc] {\n    scroll-snap-align: start;\n  }\n  .md-nav--secondary .md-nav__title .md-nav__icon {\n    display: none;\n  }\n}\n@media screen and (min-width: 76.25em) {\n  .md-nav {\n    transition: max-height 250ms cubic-bezier(0.86, 0, 0.07, 1);\n  }\n  .md-nav--primary .md-nav__title {\n    position: sticky;\n    top: 0;\n    z-index: 1;\n    background: var(--md-default-bg-color);\n    box-shadow: 0 0 0.4rem 0.4rem var(--md-default-bg-color);\n  }\n  .md-nav--primary .md-nav__title[for=__drawer] {\n    scroll-snap-align: start;\n  }\n  .md-nav--primary .md-nav__title .md-nav__icon {\n    display: none;\n  }\n  .md-nav__toggle ~ .md-nav {\n    display: none;\n  }\n  .md-nav__toggle:is(:checked, :indeterminate) ~ .md-nav {\n    display: block;\n  }\n  .md-nav__item--nested > .md-nav > .md-nav__title {\n    display: none;\n  }\n  .md-nav__item--section {\n    display: block;\n    margin: 1.25em 0;\n  }\n  .md-nav__item--section:last-child {\n    margin-bottom: 0;\n  }\n  .md-nav__item--section > .md-nav__link {\n    font-weight: 700;\n    pointer-events: none;\n  }\n  .md-nav__item--section > .md-nav__link--index [href] {\n    pointer-events: initial;\n  }\n  .md-nav__item--section > .md-nav__link .md-nav__icon {\n    display: none;\n  }\n  .md-nav__item--section > .md-nav {\n    display: block;\n  }\n  .md-nav__item--section > .md-nav > .md-nav__list > .md-nav__item {\n    padding: 0;\n  }\n  .md-nav__icon {\n    width: 0.9rem;\n    height: 0.9rem;\n    border-radius: 100%;\n    transition: background-color 250ms, transform 250ms;\n  }\n  [dir=rtl] .md-nav__icon {\n    transform: rotate(180deg);\n  }\n  .md-nav__icon:hover {\n    background-color: var(--md-accent-fg-color--transparent);\n  }\n  .md-nav__icon::after {\n    display: inline-block;\n    width: 100%;\n    height: 100%;\n    vertical-align: -0.1rem;\n    background-color: currentcolor;\n    mask-image: var(--md-nav-icon--next);\n    mask-position: center;\n    mask-repeat: no-repeat;\n    mask-size: contain;\n    content: \"\";\n  }\n  .md-nav__item--nested .md-nav__toggle:checked ~ .md-nav__link .md-nav__icon, .md-nav__item--nested .md-nav__toggle:indeterminate ~ .md-nav__link .md-nav__icon {\n    transform: rotate(90deg);\n  }\n  .md-nav--lifted > .md-nav__list > .md-nav__item--nested,\n.md-nav--lifted > .md-nav__title {\n    display: none;\n  }\n  .md-nav--lifted > .md-nav__list > .md-nav__item {\n    display: none;\n  }\n  .md-nav--lifted > .md-nav__list > .md-nav__item--active {\n    display: block;\n    padding: 0;\n  }\n  .md-nav--lifted > .md-nav__list > .md-nav__item--active > .md-nav__link {\n    position: sticky;\n    top: 0;\n    z-index: var(--md-nav__sticky-zindex, 1);\n    margin-top: 0;\n    padding: 0 0.6rem;\n    font-weight: 700;\n    background: var(--md-default-bg-color);\n    box-shadow: 0 0 0.4rem 0.4rem var(--md-default-bg-color);\n  }\n  .md-nav--lifted > .md-nav__list > .md-nav__item--active > .md-nav__link:not(.md-nav__link--index) {\n    pointer-events: none;\n  }\n  .md-nav--lifted > .md-nav__list > .md-nav__item--active > .md-nav__link .md-nav__icon {\n    display: none;\n  }\n  .md-nav--lifted .md-nav[data-md-level=\"1\"] {\n    display: block;\n  }\n  .md-nav--lifted .md-nav[data-md-level=\"1\"] > .md-nav__list > .md-nav__item {\n    padding-inline-end: 0.6rem;\n  }\n  .md-nav--integrated > .md-nav__list > .md-nav__item--active:not(.md-nav__item--nested) {\n    padding: 0 0.6rem;\n  }\n  .md-nav--integrated > .md-nav__list > .md-nav__item--active:not(.md-nav__item--nested) > .md-nav__link {\n    padding: 0;\n  }\n  .md-nav--integrated > .md-nav__list > .md-nav__item--active .md-nav--secondary {\n    display: block;\n    margin-bottom: 1.25em;\n    border-inline-start: 0.05rem solid var(--md-primary-fg-color);\n  }\n  .md-nav--integrated > .md-nav__list > .md-nav__item--active .md-nav--secondary > .md-nav__title {\n    display: none;\n  }\n}\n\n:root {\n  --md-search-result-icon: svg-load(\"material/file-search-outline.svg\");\n}\n\n.md-search {\n  position: relative;\n}\n@media screen and (min-width: 60em) {\n  .md-search {\n    padding: 0.2rem 0;\n  }\n}\n.no-js .md-search {\n  display: none;\n}\n.md-search__overlay {\n  z-index: 1;\n  opacity: 0;\n}\n@media screen and (max-width: 59.9375em) {\n  .md-search__overlay {\n    position: absolute;\n    top: -1rem;\n    inset-inline-start: -2.2rem;\n    width: 2rem;\n    height: 2rem;\n    overflow: hidden;\n    background-color: var(--md-default-bg-color);\n    border-radius: 1rem;\n    transform-origin: center;\n    transition: transform 300ms 100ms, opacity 200ms 200ms;\n    pointer-events: none;\n  }\n  [data-md-toggle=search]:checked ~ .md-header .md-search__overlay {\n    opacity: 1;\n    transition: transform 400ms, opacity 100ms;\n  }\n}\n@media screen and (min-width: 60em) {\n  .md-search__overlay {\n    position: fixed;\n    top: 0;\n    inset-inline-start: 0;\n    width: 0;\n    height: 0;\n    background-color: hsla(0deg, 0%, 0%, 0.54);\n    cursor: pointer;\n    transition: width 0ms 250ms, height 0ms 250ms, opacity 250ms;\n  }\n  [data-md-toggle=search]:checked ~ .md-header .md-search__overlay {\n    width: 100%;\n    height: 200vh;\n    opacity: 1;\n    transition: width 0ms, height 0ms, opacity 250ms;\n  }\n}\n@media screen and (max-width: 29.9375em) {\n  [data-md-toggle=search]:checked ~ .md-header .md-search__overlay {\n    transform: scale(45);\n  }\n}\n@media screen and (min-width: 30em) and (max-width: 44.9375em) {\n  [data-md-toggle=search]:checked ~ .md-header .md-search__overlay {\n    transform: scale(60);\n  }\n}\n@media screen and (min-width: 45em) and (max-width: 59.9375em) {\n  [data-md-toggle=search]:checked ~ .md-header .md-search__overlay {\n    transform: scale(75);\n  }\n}\n.md-search__inner {\n  backface-visibility: hidden;\n}\n@media screen and (max-width: 59.9375em) {\n  .md-search__inner {\n    position: fixed;\n    top: 0;\n    inset-inline-start: 0;\n    z-index: 2;\n    width: 0;\n    height: 0;\n    overflow: hidden;\n    transform: translateX(5%);\n    opacity: 0;\n    transition: width 0ms 300ms, height 0ms 300ms, transform 150ms 150ms cubic-bezier(0.4, 0, 0.2, 1), opacity 150ms 150ms;\n  }\n  [dir=rtl] .md-search__inner {\n    transform: translateX(-5%);\n  }\n  [data-md-toggle=search]:checked ~ .md-header .md-search__inner {\n    width: 100%;\n    height: 100%;\n    transform: translateX(0);\n    opacity: 1;\n    transition: width 0ms 0ms, height 0ms 0ms, transform 150ms 150ms cubic-bezier(0.1, 0.7, 0.1, 1), opacity 150ms 150ms;\n  }\n}\n@media screen and (min-width: 60em) {\n  .md-search__inner {\n    position: relative;\n    float: inline-end;\n    width: 11.7rem;\n    padding: 0.1rem 0;\n    transition: width 250ms cubic-bezier(0.1, 0.7, 0.1, 1);\n  }\n}\n@media screen and (min-width: 60em) and (max-width: 76.1875em) {\n  [data-md-toggle=search]:checked ~ .md-header .md-search__inner {\n    width: 23.4rem;\n  }\n}\n@media screen and (min-width: 76.25em) {\n  [data-md-toggle=search]:checked ~ .md-header .md-search__inner {\n    width: 34.4rem;\n  }\n}\n.md-search__form {\n  position: relative;\n  z-index: 2;\n  height: 2.4rem;\n  background-color: var(--md-default-bg-color);\n  box-shadow: 0 0 0.6rem transparent;\n  transition: color 250ms, background-color 250ms;\n}\n@media screen and (min-width: 60em) {\n  .md-search__form {\n    height: 1.8rem;\n    background-color: hsla(0deg, 0%, 0%, 0.26);\n    border-radius: 0.1rem;\n  }\n  .md-search__form:hover {\n    background-color: hsla(0deg, 0%, 100%, 0.12);\n  }\n}\n[data-md-toggle=search]:checked ~ .md-header .md-search__form {\n  color: var(--md-default-fg-color);\n  background-color: var(--md-default-bg-color);\n  border-radius: 0.1rem 0.1rem 0 0;\n  box-shadow: 0 0 0.6rem hsla(0deg, 0%, 0%, 0.07);\n}\n.md-search__input {\n  position: relative;\n  z-index: 2;\n  width: 100%;\n  height: 100%;\n  padding-inline: 3.6rem 2.2rem;\n  font-size: 0.9rem;\n  text-overflow: ellipsis;\n  background: transparent;\n}\n.md-search__input::placeholder {\n  transition: color 250ms;\n}\n.md-search__input ~ .md-search__icon, .md-search__input::placeholder {\n  color: var(--md-default-fg-color--light);\n}\n.md-search__input::-ms-clear {\n  display: none;\n}\n@media screen and (max-width: 59.9375em) {\n  .md-search__input {\n    width: 100%;\n    height: 2.4rem;\n    font-size: 0.9rem;\n  }\n}\n@media screen and (min-width: 60em) {\n  .md-search__input {\n    padding-inline-start: 2.2rem;\n    color: inherit;\n    font-size: 0.8rem;\n  }\n  .md-search__input::placeholder {\n    color: var(--md-primary-bg-color--light);\n  }\n  .md-search__input + .md-search__icon {\n    color: var(--md-primary-bg-color);\n  }\n  [data-md-toggle=search]:checked ~ .md-header .md-search__input {\n    text-overflow: clip;\n  }\n  [data-md-toggle=search]:checked ~ .md-header .md-search__input + .md-search__icon, [data-md-toggle=search]:checked ~ .md-header .md-search__input::placeholder {\n    color: var(--md-default-fg-color--light);\n  }\n}\n.md-search__icon {\n  display: inline-block;\n  width: 1.2rem;\n  height: 1.2rem;\n  cursor: pointer;\n  transition: color 250ms, opacity 250ms;\n}\n.md-search__icon:hover {\n  opacity: 0.7;\n}\n.md-search__icon[for=__search] {\n  position: absolute;\n  top: 0.3rem;\n  inset-inline-start: 0.5rem;\n  z-index: 2;\n}\n[dir=rtl] .md-search__icon[for=__search] svg {\n  transform: scaleX(-1);\n}\n@media screen and (max-width: 59.9375em) {\n  .md-search__icon[for=__search] {\n    top: 0.6rem;\n    inset-inline-start: 0.8rem;\n  }\n  .md-search__icon[for=__search] svg:first-child {\n    display: none;\n  }\n}\n@media screen and (min-width: 60em) {\n  .md-search__icon[for=__search] {\n    pointer-events: none;\n  }\n  .md-search__icon[for=__search] svg:last-child {\n    display: none;\n  }\n}\n.md-search__options {\n  position: absolute;\n  top: 0.3rem;\n  inset-inline-end: 0.5rem;\n  z-index: 2;\n  pointer-events: none;\n}\n@media screen and (max-width: 59.9375em) {\n  .md-search__options {\n    top: 0.6rem;\n    inset-inline-end: 0.8rem;\n  }\n}\n.md-search__options > * {\n  margin-inline-start: 0.2rem;\n  color: var(--md-default-fg-color--light);\n  transform: scale(0.75);\n  opacity: 0;\n  transition: transform 150ms cubic-bezier(0.1, 0.7, 0.1, 1), opacity 150ms;\n}\n.md-search__options > *:not(.focus-visible) {\n  outline: none;\n  -webkit-tap-highlight-color: transparent;\n}\n[data-md-toggle=search]:checked ~ .md-header .md-search__input:valid ~ .md-search__options > * {\n  transform: scale(1);\n  opacity: 1;\n  pointer-events: initial;\n}\n[data-md-toggle=search]:checked ~ .md-header .md-search__input:valid ~ .md-search__options > *:hover {\n  opacity: 0.7;\n}\n.md-search__suggest {\n  position: absolute;\n  top: 0;\n  display: flex;\n  align-items: center;\n  width: 100%;\n  height: 100%;\n  padding-inline: 3.6rem 2.2rem;\n  color: var(--md-default-fg-color--lighter);\n  font-size: 0.9rem;\n  white-space: nowrap;\n  opacity: 0;\n  transition: opacity 50ms;\n}\n@media screen and (min-width: 60em) {\n  .md-search__suggest {\n    padding-inline-start: 2.2rem;\n    font-size: 0.8rem;\n  }\n}\n[data-md-toggle=search]:checked ~ .md-header .md-search__suggest {\n  opacity: 1;\n  transition: opacity 300ms 100ms;\n}\n.md-search__output {\n  position: absolute;\n  z-index: 1;\n  width: 100%;\n  overflow: hidden;\n  border-end-start-radius: 0.1rem;\n  border-end-end-radius: 0.1rem;\n}\n@media screen and (max-width: 59.9375em) {\n  .md-search__output {\n    top: 2.4rem;\n    bottom: 0;\n  }\n}\n@media screen and (min-width: 60em) {\n  .md-search__output {\n    top: 1.9rem;\n    opacity: 0;\n    transition: opacity 400ms;\n  }\n  [data-md-toggle=search]:checked ~ .md-header .md-search__output {\n    box-shadow: var(--md-shadow-z3);\n    opacity: 1;\n  }\n}\n.md-search__scrollwrap {\n  height: 100%;\n  overflow-y: auto;\n  background-color: var(--md-default-bg-color);\n  backface-visibility: hidden;\n  touch-action: pan-y;\n}\n@media (max-resolution: 1dppx) {\n  .md-search__scrollwrap {\n    transform: translateZ(0);\n  }\n}\n@media screen and (min-width: 60em) and (max-width: 76.1875em) {\n  .md-search__scrollwrap {\n    width: 23.4rem;\n  }\n}\n@media screen and (min-width: 76.25em) {\n  .md-search__scrollwrap {\n    width: 34.4rem;\n  }\n}\n@media screen and (min-width: 60em) {\n  .md-search__scrollwrap {\n    max-height: 0;\n    scrollbar-width: thin;\n    scrollbar-color: var(--md-default-fg-color--lighter) transparent;\n  }\n  [data-md-toggle=search]:checked ~ .md-header .md-search__scrollwrap {\n    max-height: 75vh;\n  }\n  .md-search__scrollwrap:hover {\n    scrollbar-color: var(--md-accent-fg-color) transparent;\n  }\n  .md-search__scrollwrap::-webkit-scrollbar {\n    width: 0.2rem;\n    height: 0.2rem;\n  }\n  .md-search__scrollwrap::-webkit-scrollbar-thumb {\n    background-color: var(--md-default-fg-color--lighter);\n  }\n  .md-search__scrollwrap::-webkit-scrollbar-thumb:hover {\n    background-color: var(--md-accent-fg-color);\n  }\n}\n\n.md-search-result {\n  color: var(--md-default-fg-color);\n  word-break: break-word;\n}\n.md-search-result__meta {\n  padding: 0 0.8rem;\n  color: var(--md-default-fg-color--light);\n  font-size: 0.64rem;\n  line-height: 1.8rem;\n  background-color: var(--md-default-fg-color--lightest);\n  scroll-snap-align: start;\n}\n@media screen and (min-width: 60em) {\n  .md-search-result__meta {\n    padding-inline-start: 2.2rem;\n  }\n}\n.md-search-result__list {\n  margin: 0;\n  padding: 0;\n  list-style: none;\n  user-select: none;\n}\n.md-search-result__item {\n  box-shadow: 0 -0.05rem var(--md-default-fg-color--lightest);\n}\n.md-search-result__item:first-child {\n  box-shadow: none;\n}\n.md-search-result__link {\n  display: block;\n  outline: none;\n  transition: background-color 250ms;\n  scroll-snap-align: start;\n}\n.md-search-result__link:is(:focus, :hover) {\n  background-color: var(--md-accent-fg-color--transparent);\n}\n.md-search-result__link:last-child p:last-child {\n  margin-bottom: 0.6rem;\n}\n.md-search-result__more summary {\n  display: block;\n  padding: 0.75em 0.8rem;\n  color: var(--md-typeset-a-color);\n  font-size: 0.64rem;\n  outline: none;\n  cursor: pointer;\n  transition: color 250ms, background-color 250ms;\n  scroll-snap-align: start;\n}\n@media screen and (min-width: 60em) {\n  .md-search-result__more summary {\n    padding-inline-start: 2.2rem;\n  }\n}\n.md-search-result__more summary:is(:focus, :hover) {\n  color: var(--md-accent-fg-color);\n  background-color: var(--md-accent-fg-color--transparent);\n}\n.md-search-result__more summary::marker {\n  display: none;\n}\n.md-search-result__more summary::-webkit-details-marker {\n  display: none;\n}\n.md-search-result__more summary ~ * > * {\n  opacity: 0.65;\n}\n.md-search-result__article {\n  position: relative;\n  padding: 0 0.8rem;\n  overflow: hidden;\n}\n@media screen and (min-width: 60em) {\n  .md-search-result__article {\n    padding-inline-start: 2.2rem;\n  }\n}\n.md-search-result__article--document .md-search-result__title {\n  margin: 0.55rem 0;\n  font-weight: 400;\n  font-size: 0.8rem;\n  line-height: 1.4;\n}\n.md-search-result__icon {\n  position: absolute;\n  inset-inline-start: 0;\n  width: 1.2rem;\n  height: 1.2rem;\n  margin: 0.5rem;\n  color: var(--md-default-fg-color--light);\n}\n@media screen and (max-width: 59.9375em) {\n  .md-search-result__icon {\n    display: none;\n  }\n}\n.md-search-result__icon::after {\n  display: inline-block;\n  width: 100%;\n  height: 100%;\n  background-color: currentcolor;\n  mask-image: var(--md-search-result-icon);\n  mask-position: center;\n  mask-repeat: no-repeat;\n  mask-size: contain;\n  content: \"\";\n}\n[dir=rtl] .md-search-result__icon::after {\n  transform: scaleX(-1);\n}\n.md-search-result__title {\n  margin: 0.5em 0;\n  font-weight: 700;\n  font-size: 0.64rem;\n  line-height: 1.6;\n}\n.md-search-result__teaser {\n  display: -webkit-box;\n  max-height: 2rem;\n  margin: 0.5em 0;\n  overflow: hidden;\n  color: var(--md-default-fg-color--light);\n  font-size: 0.64rem;\n  line-height: 1.6;\n  text-overflow: ellipsis;\n  -webkit-box-orient: vertical;\n  -webkit-line-clamp: 2;\n}\n@media screen and (max-width: 44.9375em) {\n  .md-search-result__teaser {\n    max-height: 3rem;\n    -webkit-line-clamp: 3;\n  }\n}\n@media screen and (min-width: 60em) and (max-width: 76.1875em) {\n  .md-search-result__teaser {\n    max-height: 3rem;\n    -webkit-line-clamp: 3;\n  }\n}\n.md-search-result__teaser mark {\n  text-decoration: underline;\n  background-color: transparent;\n}\n.md-search-result__terms {\n  margin: 0.5em 0;\n  font-size: 0.64rem;\n  font-style: italic;\n}\n.md-search-result mark {\n  color: var(--md-accent-fg-color);\n  background-color: transparent;\n}\n\n.md-select {\n  position: relative;\n  z-index: 1;\n}\n.md-select__inner {\n  position: absolute;\n  top: calc(100% - 0.2rem);\n  left: 50%;\n  max-height: 0;\n  margin-top: 0.2rem;\n  color: var(--md-default-fg-color);\n  background-color: var(--md-default-bg-color);\n  border-radius: 0.1rem;\n  box-shadow: var(--md-shadow-z2);\n  transform: translate3d(-50%, 0.3rem, 0);\n  opacity: 0;\n  transition: transform 250ms 375ms, opacity 250ms 250ms, max-height 0ms 500ms;\n}\n.md-select:is(:focus-within, :hover) .md-select__inner {\n  max-height: 10rem;\n  transform: translate3d(-50%, 0, 0);\n  opacity: 1;\n  transition: transform 250ms cubic-bezier(0.1, 0.7, 0.1, 1), opacity 250ms, max-height 0ms;\n}\n.md-select__inner::after {\n  position: absolute;\n  top: 0;\n  left: 50%;\n  width: 0;\n  height: 0;\n  margin-top: -0.2rem;\n  margin-left: -0.2rem;\n  border: 0.2rem solid transparent;\n  border-top: 0;\n  border-bottom-color: var(--md-default-bg-color);\n  content: \"\";\n}\n.md-select__list {\n  max-height: inherit;\n  margin: 0;\n  padding: 0;\n  overflow: auto;\n  font-size: 0.8rem;\n  list-style-type: none;\n  border-radius: 0.1rem;\n}\n.md-select__item {\n  line-height: 1.8rem;\n}\n.md-select__link {\n  display: block;\n  width: 100%;\n  padding-inline: 0.6rem 1.2rem;\n  outline: none;\n  cursor: pointer;\n  transition: background-color 250ms, color 250ms;\n  scroll-snap-align: start;\n}\n.md-select__link:is(:focus, :hover) {\n  color: var(--md-accent-fg-color);\n}\n.md-select__link:focus {\n  background-color: var(--md-default-fg-color--lightest);\n}\n\n.md-sidebar {\n  position: sticky;\n  top: 2.4rem;\n  flex-shrink: 0;\n  align-self: flex-start;\n  width: 12.1rem;\n  padding: 1.2rem 0;\n}\n@media print {\n  .md-sidebar {\n    display: none;\n  }\n}\n@media screen and (max-width: 76.1875em) {\n  .md-sidebar--primary {\n    position: fixed;\n    top: 0;\n    inset-inline-start: -12.1rem;\n    z-index: 5;\n    display: block;\n    width: 12.1rem;\n    height: 100%;\n    background-color: var(--md-default-bg-color);\n    transform: translateX(0);\n    transition: transform 250ms cubic-bezier(0.4, 0, 0.2, 1), box-shadow 250ms;\n  }\n  [data-md-toggle=drawer]:checked ~ .md-container .md-sidebar--primary {\n    box-shadow: var(--md-shadow-z3);\n    transform: translateX(12.1rem);\n  }\n  [dir=rtl] [data-md-toggle=drawer]:checked ~ .md-container .md-sidebar--primary {\n    transform: translateX(-12.1rem);\n  }\n  .md-sidebar--primary .md-sidebar__scrollwrap {\n    position: absolute;\n    inset: 0;\n    margin: 0;\n    scroll-snap-type: none;\n    overflow: hidden;\n  }\n}\n@media screen and (min-width: 76.25em) {\n  .md-sidebar {\n    height: 0;\n  }\n  .no-js .md-sidebar {\n    height: auto;\n  }\n  .md-header--lifted ~ .md-container .md-sidebar {\n    top: 4.8rem;\n  }\n}\n.md-sidebar--secondary {\n  display: none;\n  order: 2;\n}\n@media screen and (min-width: 60em) {\n  .md-sidebar--secondary {\n    height: 0;\n  }\n  .no-js .md-sidebar--secondary {\n    height: auto;\n  }\n  .md-sidebar--secondary:not([hidden]) {\n    display: block;\n  }\n  .md-sidebar--secondary .md-sidebar__scrollwrap {\n    touch-action: pan-y;\n  }\n}\n.md-sidebar__scrollwrap {\n  margin: 0 0.2rem;\n  overflow-y: auto;\n  backface-visibility: hidden;\n  scrollbar-width: thin;\n  scrollbar-gutter: stable;\n  scrollbar-color: var(--md-default-fg-color--lighter) transparent;\n}\n.md-sidebar__scrollwrap:hover {\n  scrollbar-color: var(--md-accent-fg-color) transparent;\n}\n.md-sidebar__scrollwrap::-webkit-scrollbar {\n  width: 0.2rem;\n  height: 0.2rem;\n}\n.md-sidebar__scrollwrap::-webkit-scrollbar-thumb {\n  background-color: var(--md-default-fg-color--lighter);\n}\n.md-sidebar__scrollwrap::-webkit-scrollbar-thumb:hover {\n  background-color: var(--md-accent-fg-color);\n}\n@supports selector(::-webkit-scrollbar) {\n  .md-sidebar__scrollwrap {\n    scrollbar-gutter: auto;\n  }\n  .md-sidebar__inner {\n    padding-inline-end: calc(100% - 11.5rem);\n  }\n}\n\n@media screen and (max-width: 76.1875em) {\n  .md-overlay {\n    position: fixed;\n    top: 0;\n    z-index: 5;\n    width: 0;\n    height: 0;\n    background-color: hsla(0deg, 0%, 0%, 0.54);\n    opacity: 0;\n    transition: width 0ms 250ms, height 0ms 250ms, opacity 250ms;\n  }\n  [data-md-toggle=drawer]:checked ~ .md-overlay {\n    width: 100%;\n    height: 100%;\n    opacity: 1;\n    transition: width 0ms, height 0ms, opacity 250ms;\n  }\n}\n@keyframes facts {\n  0% {\n    height: 0;\n  }\n  100% {\n    height: 0.65rem;\n  }\n}\n@keyframes fact {\n  0% {\n    transform: translateY(100%);\n    opacity: 0;\n  }\n  50% {\n    opacity: 0;\n  }\n  100% {\n    transform: translateY(0%);\n    opacity: 1;\n  }\n}\n:root {\n  --md-source-forks-icon: svg-load(\"octicons/repo-forked-16.svg\");\n  --md-source-repositories-icon: svg-load(\"octicons/repo-16.svg\");\n  --md-source-stars-icon: svg-load(\"octicons/star-16.svg\");\n  --md-source-version-icon: svg-load(\"octicons/tag-16.svg\");\n}\n\n.md-source {\n  display: block;\n  font-size: 0.65rem;\n  line-height: 1.2;\n  white-space: nowrap;\n  outline-color: var(--md-accent-fg-color);\n  backface-visibility: hidden;\n  transition: opacity 250ms;\n}\n.md-source:hover {\n  opacity: 0.7;\n}\n.md-source__icon {\n  display: inline-block;\n  width: 2rem;\n  height: 2.4rem;\n  vertical-align: middle;\n}\n.md-source__icon svg {\n  margin-top: 0.6rem;\n  margin-inline-start: 0.6rem;\n}\n.md-source__icon + .md-source__repository {\n  margin-inline-start: -2rem;\n  padding-inline-start: 2rem;\n}\n.md-source__repository {\n  display: inline-block;\n  max-width: calc(100% - 1.2rem);\n  margin-inline-start: 0.6rem;\n  overflow: hidden;\n  text-overflow: ellipsis;\n  vertical-align: middle;\n}\n.md-source__facts {\n  display: flex;\n  gap: 0.4rem;\n  width: 100%;\n  margin: 0.1rem 0 0;\n  padding: 0;\n  overflow: hidden;\n  font-size: 0.55rem;\n  list-style-type: none;\n  opacity: 0.75;\n}\n.md-source__repository--active .md-source__facts {\n  animation: facts 250ms ease-in;\n}\n.md-source__fact {\n  overflow: hidden;\n  text-overflow: ellipsis;\n}\n.md-source__repository--active .md-source__fact {\n  animation: fact 400ms ease-out;\n}\n.md-source__fact::before {\n  display: inline-block;\n  width: 0.6rem;\n  height: 0.6rem;\n  margin-inline-end: 0.1rem;\n  vertical-align: text-top;\n  background-color: currentcolor;\n  mask-position: center;\n  mask-repeat: no-repeat;\n  mask-size: contain;\n  content: \"\";\n}\n.md-source__fact:nth-child(1n+2) {\n  flex-shrink: 0;\n}\n.md-source__fact--version::before {\n  mask-image: var(--md-source-version-icon);\n}\n.md-source__fact--stars::before {\n  mask-image: var(--md-source-stars-icon);\n}\n.md-source__fact--forks::before {\n  mask-image: var(--md-source-forks-icon);\n}\n.md-source__fact--repositories::before {\n  mask-image: var(--md-source-repositories-icon);\n}\n\n.md-tabs {\n  z-index: 3;\n  display: block;\n  width: 100%;\n  overflow: auto;\n  color: var(--md-primary-bg-color);\n  line-height: 1.3;\n  background-color: var(--md-primary-fg-color);\n}\n@media print {\n  .md-tabs {\n    display: none;\n  }\n}\n@media screen and (max-width: 76.1875em) {\n  .md-tabs {\n    display: none;\n  }\n}\n.md-tabs[hidden] {\n  pointer-events: none;\n}\n.md-tabs__list {\n  margin: 0;\n  margin-inline-start: 0.2rem;\n  padding: 0;\n  white-space: nowrap;\n  list-style: none;\n  contain: content;\n}\n.md-tabs__item {\n  display: inline-block;\n  height: 2.4rem;\n  padding-inline: 0.6rem;\n}\n.md-tabs__link {\n  display: block;\n  margin-top: 0.8rem;\n  font-size: 0.7rem;\n  outline-color: var(--md-accent-fg-color);\n  outline-offset: 0.2rem;\n  backface-visibility: hidden;\n  opacity: 0.7;\n  transition: transform 400ms cubic-bezier(0.1, 0.7, 0.1, 1), opacity 250ms;\n}\n.md-tabs__link--active, .md-tabs__link:is(:focus, :hover) {\n  color: inherit;\n  opacity: 1;\n}\n.md-tabs__item:nth-child(2) .md-tabs__link {\n  transition-delay: 20ms;\n}\n.md-tabs__item:nth-child(3) .md-tabs__link {\n  transition-delay: 40ms;\n}\n.md-tabs__item:nth-child(4) .md-tabs__link {\n  transition-delay: 60ms;\n}\n.md-tabs__item:nth-child(5) .md-tabs__link {\n  transition-delay: 80ms;\n}\n.md-tabs__item:nth-child(6) .md-tabs__link {\n  transition-delay: 100ms;\n}\n.md-tabs__item:nth-child(7) .md-tabs__link {\n  transition-delay: 120ms;\n}\n.md-tabs__item:nth-child(8) .md-tabs__link {\n  transition-delay: 140ms;\n}\n.md-tabs__item:nth-child(9) .md-tabs__link {\n  transition-delay: 160ms;\n}\n.md-tabs__item:nth-child(10) .md-tabs__link {\n  transition-delay: 180ms;\n}\n.md-tabs__item:nth-child(11) .md-tabs__link {\n  transition-delay: 200ms;\n}\n.md-tabs__item:nth-child(12) .md-tabs__link {\n  transition-delay: 220ms;\n}\n.md-tabs__item:nth-child(13) .md-tabs__link {\n  transition-delay: 240ms;\n}\n.md-tabs__item:nth-child(14) .md-tabs__link {\n  transition-delay: 260ms;\n}\n.md-tabs__item:nth-child(15) .md-tabs__link {\n  transition-delay: 280ms;\n}\n.md-tabs__item:nth-child(16) .md-tabs__link {\n  transition-delay: 300ms;\n}\n.md-tabs[hidden] .md-tabs__link {\n  transform: translateY(50%);\n  opacity: 0;\n  transition: transform 0ms 100ms, opacity 100ms;\n}\n\n:root {\n  --md-tag-icon: svg-load(\"material/pound.svg\");\n}\n\n.md-typeset .md-tags {\n  margin-top: -0.125em;\n  margin-bottom: 0.75em;\n}\n.md-typeset .md-tag {\n  display: inline-block;\n  margin-inline-end: 0.5em;\n  margin-bottom: 0.5em;\n  padding: 0.3125em 0.9375em;\n  font-weight: 700;\n  font-size: 0.64rem;\n  line-height: 1.6;\n  letter-spacing: initial;\n  vertical-align: middle;\n  background: var(--md-default-fg-color--lightest);\n  border-radius: 2.4rem;\n}\n.md-typeset .md-tag[href] {\n  color: inherit;\n  outline: none;\n  -webkit-tap-highlight-color: transparent;\n  transition: color 125ms, background-color 125ms;\n}\n.md-typeset .md-tag[href]:focus, .md-typeset .md-tag[href]:hover {\n  color: var(--md-accent-bg-color);\n  background-color: var(--md-accent-fg-color);\n}\n[id] > .md-typeset .md-tag {\n  vertical-align: text-top;\n}\n.md-typeset .md-tag-icon::before {\n  display: inline-block;\n  width: 1.2em;\n  height: 1.2em;\n  margin-right: 0.4em;\n  vertical-align: text-bottom;\n  background-color: var(--md-default-fg-color--lighter);\n  mask-image: var(--md-tag-icon);\n  mask-position: center;\n  mask-repeat: no-repeat;\n  mask-size: contain;\n  transition: background-color 125ms;\n  content: \"\";\n}\n.md-typeset .md-tag-icon:is(a:focus, a:hover)::before {\n  background-color: var(--md-accent-bg-color);\n}\n\n@keyframes pulse {\n  0% {\n    box-shadow: 0 0 0 0 var(--md-default-fg-color--lightest);\n    transform: scale(0.95);\n  }\n  75% {\n    box-shadow: 0 0 0 0.625em transparent;\n    transform: scale(1);\n  }\n  100% {\n    box-shadow: 0 0 0 0 transparent;\n    transform: scale(0.95);\n  }\n}\n:root {\n  --md-tooltip-width: 20rem;\n}\n\n.md-tooltip {\n  position: absolute;\n  top: var(--md-tooltip-y);\n  left: clamp(\n      var(--md-tooltip-0, 0rem) + 0.8rem,\n      var(--md-tooltip-x),\n      100vw +\n      var(--md-tooltip-0, 0rem) + 0.8rem -\n      var(--md-tooltip-width) -\n      2 * 0.8rem\n    );\n  z-index: 0;\n  width: var(--md-tooltip-width);\n  max-width: calc(100vw - 2 * 0.8rem);\n  color: var(--md-default-fg-color);\n  font-family: var(--md-text-font-family);\n  background-color: var(--md-default-bg-color);\n  border-radius: 0.1rem;\n  box-shadow: var(--md-shadow-z2);\n  transform: translateY(-0.4rem);\n  backface-visibility: hidden;\n  opacity: 0;\n  transition: transform 0ms 250ms, opacity 250ms, z-index 250ms;\n}\n.md-tooltip--active {\n  z-index: 2;\n  transform: translateY(0);\n  opacity: 1;\n  transition: transform 250ms cubic-bezier(0.1, 0.7, 0.1, 1), opacity 250ms, z-index 0ms;\n}\n:is(.focus-visible > .md-tooltip, .md-tooltip:target) {\n  outline: var(--md-accent-fg-color) auto;\n}\n.md-tooltip__inner {\n  padding: 0.8rem;\n  font-size: 0.64rem;\n}\n.md-tooltip__inner.md-typeset > :first-child {\n  margin-top: 0;\n}\n.md-tooltip__inner.md-typeset > :last-child {\n  margin-bottom: 0;\n}\n\n.md-annotation {\n  font-weight: 400;\n  white-space: normal;\n  outline: none;\n}\n[dir=rtl] .md-annotation {\n  direction: rtl;\n}\n.md-annotation:not([hidden]) {\n  display: inline-block;\n  line-height: 1.325;\n}\n.md-annotation__index {\n  position: relative;\n  z-index: 0;\n  margin: 0 1ch;\n  font-size: 0.85em;\n  font-family: var(--md-code-font-family);\n  outline: none;\n  cursor: pointer;\n  user-select: none;\n}\n.md-annotation .md-annotation__index {\n  color: hsl(0deg, 0%, 100%);\n  transition: z-index 250ms;\n}\n.md-annotation .md-annotation__index:is(:focus, :hover) {\n  color: hsl(0deg, 0%, 100%);\n}\n.md-annotation__index::after {\n  position: absolute;\n  top: 0;\n  left: -0.125em;\n  z-index: -1;\n  width: calc(100% + 1.2ch);\n  width: max(2.2ch, 100% + 1.2ch);\n  height: 2.2ch;\n  margin: 0 -0.4ch;\n  padding: 0 0.4ch;\n  background-color: var(--md-default-fg-color--lighter);\n  border-radius: 2ch;\n  transition: color 250ms, background-color 250ms;\n  content: \"\";\n}\n@media not all and (prefers-reduced-motion) {\n  [data-md-visible] > .md-annotation__index::after {\n    animation: pulse 2000ms infinite;\n  }\n}\n.md-tooltip--active + .md-annotation__index::after {\n  transition: color 250ms, background-color 250ms;\n  animation: none;\n}\ncode .md-annotation__index {\n  font-size: inherit;\n  font-family: var(--md-code-font-family);\n}\n:is(.md-tooltip--active + .md-annotation__index, :hover > .md-annotation__index) {\n  color: var(--md-accent-bg-color);\n}\n:is(.md-tooltip--active + .md-annotation__index, :hover > .md-annotation__index)::after {\n  background-color: var(--md-accent-fg-color);\n}\n.md-tooltip--active + .md-annotation__index {\n  z-index: 2;\n  transition: none;\n  animation: none;\n}\n.md-annotation__index [data-md-annotation-id] {\n  display: inline-block;\n  line-height: 90%;\n}\n.md-annotation__index [data-md-annotation-id]::before {\n  display: inline-block;\n  padding-bottom: 0.1em;\n  vertical-align: 0.065em;\n  transform: scale(1.15);\n  transition: transform 400ms cubic-bezier(0.1, 0.7, 0.1, 1);\n  content: attr(data-md-annotation-id);\n}\n@media not print {\n  .md-annotation__index [data-md-annotation-id]::before {\n    content: \"+\";\n  }\n  :focus-within > .md-annotation__index [data-md-annotation-id]::before {\n    transform: scale(1.25) rotate(45deg);\n  }\n}\n\n.md-top {\n  position: fixed;\n  top: 3.2rem;\n  z-index: 2;\n  display: block;\n  margin-inline-start: 50%;\n  padding: 0.4rem 0.8rem;\n  color: var(--md-default-fg-color--light);\n  font-size: 0.7rem;\n  background-color: var(--md-default-bg-color);\n  border-radius: 1.6rem;\n  outline: none;\n  box-shadow: var(--md-shadow-z2);\n  transform: translate(-50%, 0);\n  transition: color 125ms, background-color 125ms, transform 125ms cubic-bezier(0.4, 0, 0.2, 1), opacity 125ms;\n}\n@media print {\n  .md-top {\n    display: none;\n  }\n}\n[dir=rtl] .md-top {\n  transform: translate(50%, 0);\n}\n.md-top[hidden] {\n  transform: translate(-50%, 0.2rem);\n  opacity: 0;\n  transition-duration: 0ms;\n  pointer-events: none;\n}\n[dir=rtl] .md-top[hidden] {\n  transform: translate(50%, 0.2rem);\n}\n.md-top:is(:focus, :hover) {\n  color: var(--md-accent-bg-color);\n  background-color: var(--md-accent-fg-color);\n}\n.md-top svg {\n  display: inline-block;\n  vertical-align: -0.5em;\n}\n\n@keyframes hoverfix {\n  0% {\n    pointer-events: none;\n  }\n}\n:root {\n  --md-version-icon: svg-load(\"fontawesome/solid/caret-down.svg\");\n}\n\n.md-version {\n  flex-shrink: 0;\n  height: 2.4rem;\n  font-size: 0.8rem;\n}\n.md-version__current {\n  position: relative;\n  top: 0.05rem;\n  margin-inline: 1.4rem 0.4rem;\n  color: inherit;\n  outline: none;\n  cursor: pointer;\n}\n.md-version__current::after {\n  display: inline-block;\n  width: 0.4rem;\n  height: 0.6rem;\n  margin-inline-start: 0.4rem;\n  background-color: currentcolor;\n  mask-image: var(--md-version-icon);\n  mask-position: center;\n  mask-repeat: no-repeat;\n  mask-size: contain;\n  content: \"\";\n}\n.md-version__list {\n  position: absolute;\n  top: 0.15rem;\n  z-index: 3;\n  max-height: 0;\n  margin: 0.2rem 0.8rem;\n  padding: 0;\n  overflow: auto;\n  color: var(--md-default-fg-color);\n  list-style-type: none;\n  background-color: var(--md-default-bg-color);\n  border-radius: 0.1rem;\n  box-shadow: var(--md-shadow-z2);\n  opacity: 0;\n  transition: max-height 0ms 500ms, opacity 250ms 250ms;\n  scroll-snap-type: y mandatory;\n}\n.md-version:is(:focus-within, :hover) .md-version__list {\n  max-height: 10rem;\n  opacity: 1;\n  transition: max-height 0ms, opacity 250ms;\n}\n@media (pointer: coarse) {\n  .md-version:hover .md-version__list {\n    animation: hoverfix 250ms forwards;\n  }\n  .md-version:focus-within .md-version__list {\n    animation: none;\n  }\n}\n.md-version__item {\n  line-height: 1.8rem;\n}\n.md-version__link {\n  display: block;\n  width: 100%;\n  padding-inline: 0.6rem 1.2rem;\n  white-space: nowrap;\n  outline: none;\n  cursor: pointer;\n  transition: color 250ms, background-color 250ms;\n  scroll-snap-align: start;\n}\n.md-version__link:is(:focus, :hover) {\n  color: var(--md-accent-fg-color);\n}\n.md-version__link:focus {\n  background-color: var(--md-default-fg-color--lightest);\n}\n\n:root {\n  --md-admonition-icon--note:\n    svg-load(\"material/pencil-circle.svg\");\n  --md-admonition-icon--abstract:\n    svg-load(\"material/clipboard-text.svg\");\n  --md-admonition-icon--info:\n    svg-load(\"material/information.svg\");\n  --md-admonition-icon--tip:\n    svg-load(\"material/fire.svg\");\n  --md-admonition-icon--success:\n    svg-load(\"material/check.svg\");\n  --md-admonition-icon--question:\n    svg-load(\"material/help-circle.svg\");\n  --md-admonition-icon--warning:\n    svg-load(\"material/alert.svg\");\n  --md-admonition-icon--failure:\n    svg-load(\"material/close.svg\");\n  --md-admonition-icon--danger:\n    svg-load(\"material/lightning-bolt-circle.svg\");\n  --md-admonition-icon--bug:\n    svg-load(\"material/shield-bug.svg\");\n  --md-admonition-icon--example:\n    svg-load(\"material/test-tube.svg\");\n  --md-admonition-icon--quote:\n    svg-load(\"material/format-quote-close.svg\");\n}\n\n.md-typeset .admonition,\n.md-typeset details {\n  display: flow-root;\n  margin: 1.5625em 0;\n  padding: 0 0.6rem;\n  color: var(--md-admonition-fg-color);\n  font-size: 0.64rem;\n  page-break-inside: avoid;\n  background-color: var(--md-admonition-bg-color);\n  border: 0.05rem solid #448aff;\n  border-radius: 0.2rem;\n  box-shadow: var(--md-shadow-z1);\n}\n@media print {\n  .md-typeset .admonition,\n.md-typeset details {\n    box-shadow: none;\n  }\n}\n.md-typeset .admonition > *,\n.md-typeset details > * {\n  box-sizing: border-box;\n}\n.md-typeset .admonition :is(.admonition, details),\n.md-typeset details :is(.admonition, details) {\n  margin-top: 1em;\n  margin-bottom: 1em;\n}\n.md-typeset .admonition .md-typeset__scrollwrap,\n.md-typeset details .md-typeset__scrollwrap {\n  margin: 1em -0.6rem;\n}\n.md-typeset .admonition .md-typeset__table,\n.md-typeset details .md-typeset__table {\n  padding: 0 0.6rem;\n}\n.md-typeset .admonition > .tabbed-set:only-child,\n.md-typeset details > .tabbed-set:only-child {\n  margin-top: 0;\n}\nhtml .md-typeset .admonition > :last-child,\nhtml .md-typeset details > :last-child {\n  margin-bottom: 0.6rem;\n}\n.md-typeset .admonition-title,\n.md-typeset summary {\n  position: relative;\n  margin-block: 0;\n  margin-inline: -0.6rem;\n  padding-block: 0.4rem;\n  padding-inline: 2rem 0.6rem;\n  font-weight: 700;\n  background-color: rgba(68, 138, 255, 0.1);\n  border: none;\n  border-inline-start-width: 0.2rem;\n  border-start-start-radius: 0.1rem;\n  border-start-end-radius: 0.1rem;\n}\nhtml .md-typeset .admonition-title:last-child,\nhtml .md-typeset summary:last-child {\n  margin-bottom: 0;\n}\n.md-typeset .admonition-title::before,\n.md-typeset summary::before {\n  position: absolute;\n  top: 0.625em;\n  inset-inline-start: 0.6rem;\n  width: 1rem;\n  height: 1rem;\n  background-color: #448aff;\n  mask-image: var(--md-admonition-icon--note);\n  mask-position: center;\n  mask-repeat: no-repeat;\n  mask-size: contain;\n  content: \"\";\n}\n.md-typeset .admonition-title code,\n.md-typeset summary code {\n  box-shadow: 0 0 0 0.05rem var(--md-default-fg-color--lightest);\n}\n\n.md-typeset :is(.admonition, details):is(.note) {\n  border-color: #448aff;\n}\n\n.md-typeset :is(.note) > :is(.admonition-title, summary) {\n  background-color: rgba(68, 138, 255, 0.1);\n}\n.md-typeset :is(.note) > :is(.admonition-title, summary)::before {\n  background-color: #448aff;\n  mask-image: var(--md-admonition-icon--note);\n}\n.md-typeset :is(.note) > :is(.admonition-title, summary)::after {\n  color: #448aff;\n}\n\n.md-typeset :is(.admonition, details):is(.abstract, .summary, .tldr) {\n  border-color: #00b0ff;\n}\n\n.md-typeset :is(.abstract, .summary, .tldr) > :is(.admonition-title, summary) {\n  background-color: rgba(0, 176, 255, 0.1);\n}\n.md-typeset :is(.abstract, .summary, .tldr) > :is(.admonition-title, summary)::before {\n  background-color: #00b0ff;\n  mask-image: var(--md-admonition-icon--abstract);\n}\n.md-typeset :is(.abstract, .summary, .tldr) > :is(.admonition-title, summary)::after {\n  color: #00b0ff;\n}\n\n.md-typeset :is(.admonition, details):is(.info, .todo) {\n  border-color: #00b8d4;\n}\n\n.md-typeset :is(.info, .todo) > :is(.admonition-title, summary) {\n  background-color: rgba(0, 184, 212, 0.1);\n}\n.md-typeset :is(.info, .todo) > :is(.admonition-title, summary)::before {\n  background-color: #00b8d4;\n  mask-image: var(--md-admonition-icon--info);\n}\n.md-typeset :is(.info, .todo) > :is(.admonition-title, summary)::after {\n  color: #00b8d4;\n}\n\n.md-typeset :is(.admonition, details):is(.tip, .hint, .important) {\n  border-color: #00bfa5;\n}\n\n.md-typeset :is(.tip, .hint, .important) > :is(.admonition-title, summary) {\n  background-color: rgba(0, 191, 165, 0.1);\n}\n.md-typeset :is(.tip, .hint, .important) > :is(.admonition-title, summary)::before {\n  background-color: #00bfa5;\n  mask-image: var(--md-admonition-icon--tip);\n}\n.md-typeset :is(.tip, .hint, .important) > :is(.admonition-title, summary)::after {\n  color: #00bfa5;\n}\n\n.md-typeset :is(.admonition, details):is(.success, .check, .done) {\n  border-color: #00c853;\n}\n\n.md-typeset :is(.success, .check, .done) > :is(.admonition-title, summary) {\n  background-color: rgba(0, 200, 83, 0.1);\n}\n.md-typeset :is(.success, .check, .done) > :is(.admonition-title, summary)::before {\n  background-color: #00c853;\n  mask-image: var(--md-admonition-icon--success);\n}\n.md-typeset :is(.success, .check, .done) > :is(.admonition-title, summary)::after {\n  color: #00c853;\n}\n\n.md-typeset :is(.admonition, details):is(.question, .help, .faq) {\n  border-color: #64dd17;\n}\n\n.md-typeset :is(.question, .help, .faq) > :is(.admonition-title, summary) {\n  background-color: rgba(100, 221, 23, 0.1);\n}\n.md-typeset :is(.question, .help, .faq) > :is(.admonition-title, summary)::before {\n  background-color: #64dd17;\n  mask-image: var(--md-admonition-icon--question);\n}\n.md-typeset :is(.question, .help, .faq) > :is(.admonition-title, summary)::after {\n  color: #64dd17;\n}\n\n.md-typeset :is(.admonition, details):is(.warning, .caution, .attention) {\n  border-color: #ff9100;\n}\n\n.md-typeset :is(.warning, .caution, .attention) > :is(.admonition-title, summary) {\n  background-color: rgba(255, 145, 0, 0.1);\n}\n.md-typeset :is(.warning, .caution, .attention) > :is(.admonition-title, summary)::before {\n  background-color: #ff9100;\n  mask-image: var(--md-admonition-icon--warning);\n}\n.md-typeset :is(.warning, .caution, .attention) > :is(.admonition-title, summary)::after {\n  color: #ff9100;\n}\n\n.md-typeset :is(.admonition, details):is(.failure, .fail, .missing) {\n  border-color: #ff5252;\n}\n\n.md-typeset :is(.failure, .fail, .missing) > :is(.admonition-title, summary) {\n  background-color: rgba(255, 82, 82, 0.1);\n}\n.md-typeset :is(.failure, .fail, .missing) > :is(.admonition-title, summary)::before {\n  background-color: #ff5252;\n  mask-image: var(--md-admonition-icon--failure);\n}\n.md-typeset :is(.failure, .fail, .missing) > :is(.admonition-title, summary)::after {\n  color: #ff5252;\n}\n\n.md-typeset :is(.admonition, details):is(.danger, .error) {\n  border-color: #ff1744;\n}\n\n.md-typeset :is(.danger, .error) > :is(.admonition-title, summary) {\n  background-color: rgba(255, 23, 68, 0.1);\n}\n.md-typeset :is(.danger, .error) > :is(.admonition-title, summary)::before {\n  background-color: #ff1744;\n  mask-image: var(--md-admonition-icon--danger);\n}\n.md-typeset :is(.danger, .error) > :is(.admonition-title, summary)::after {\n  color: #ff1744;\n}\n\n.md-typeset :is(.admonition, details):is(.bug) {\n  border-color: #f50057;\n}\n\n.md-typeset :is(.bug) > :is(.admonition-title, summary) {\n  background-color: rgba(245, 0, 87, 0.1);\n}\n.md-typeset :is(.bug) > :is(.admonition-title, summary)::before {\n  background-color: #f50057;\n  mask-image: var(--md-admonition-icon--bug);\n}\n.md-typeset :is(.bug) > :is(.admonition-title, summary)::after {\n  color: #f50057;\n}\n\n.md-typeset :is(.admonition, details):is(.example) {\n  border-color: #7c4dff;\n}\n\n.md-typeset :is(.example) > :is(.admonition-title, summary) {\n  background-color: rgba(124, 77, 255, 0.1);\n}\n.md-typeset :is(.example) > :is(.admonition-title, summary)::before {\n  background-color: #7c4dff;\n  mask-image: var(--md-admonition-icon--example);\n}\n.md-typeset :is(.example) > :is(.admonition-title, summary)::after {\n  color: #7c4dff;\n}\n\n.md-typeset :is(.admonition, details):is(.quote, .cite) {\n  border-color: #9e9e9e;\n}\n\n.md-typeset :is(.quote, .cite) > :is(.admonition-title, summary) {\n  background-color: rgba(158, 158, 158, 0.1);\n}\n.md-typeset :is(.quote, .cite) > :is(.admonition-title, summary)::before {\n  background-color: #9e9e9e;\n  mask-image: var(--md-admonition-icon--quote);\n}\n.md-typeset :is(.quote, .cite) > :is(.admonition-title, summary)::after {\n  color: #9e9e9e;\n}\n\n:root {\n  --md-footnotes-icon: svg-load(\"material/keyboard-return.svg\");\n}\n\n.md-typeset .footnote {\n  color: var(--md-default-fg-color--light);\n  font-size: 0.64rem;\n}\n.md-typeset .footnote > ol {\n  margin-inline-start: 0;\n}\n.md-typeset .footnote > ol > li {\n  transition: color 125ms;\n}\n.md-typeset .footnote > ol > li:target {\n  color: var(--md-default-fg-color);\n}\n.md-typeset .footnote > ol > li:focus-within .footnote-backref {\n  transform: translateX(0);\n  opacity: 1;\n  transition: none;\n}\n.md-typeset .footnote > ol > li:is(:hover, :target) .footnote-backref {\n  transform: translateX(0);\n  opacity: 1;\n}\n.md-typeset .footnote > ol > li > :first-child {\n  margin-top: 0;\n}\n.md-typeset .footnote-ref {\n  font-weight: 700;\n  font-size: 0.75em;\n}\nhtml .md-typeset .footnote-ref {\n  outline-offset: 0.1rem;\n}\n.md-typeset [id^=\"fnref:\"]:target > .footnote-ref {\n  outline: auto;\n}\n.md-typeset .footnote-backref {\n  display: inline-block;\n  color: var(--md-typeset-a-color);\n  font-size: 0;\n  vertical-align: text-bottom;\n  transform: translateX(0.25rem);\n  opacity: 0;\n  transition: color 250ms, transform 250ms 250ms, opacity 125ms 250ms;\n}\n@media print {\n  .md-typeset .footnote-backref {\n    color: var(--md-typeset-a-color);\n    transform: translateX(0);\n    opacity: 1;\n  }\n}\n[dir=rtl] .md-typeset .footnote-backref {\n  transform: translateX(-0.25rem);\n}\n.md-typeset .footnote-backref:hover {\n  color: var(--md-accent-fg-color);\n}\n.md-typeset .footnote-backref::before {\n  display: inline-block;\n  width: 0.8rem;\n  height: 0.8rem;\n  background-color: currentcolor;\n  mask-image: var(--md-footnotes-icon);\n  mask-position: center;\n  mask-repeat: no-repeat;\n  mask-size: contain;\n  content: \"\";\n}\n[dir=rtl] .md-typeset .footnote-backref::before svg {\n  transform: scaleX(-1);\n}\n\n.md-typeset .headerlink {\n  display: inline-block;\n  margin-inline-start: 0.5rem;\n  color: var(--md-default-fg-color--lighter);\n  opacity: 0;\n  transition: color 250ms, opacity 125ms;\n}\n@media print {\n  .md-typeset .headerlink {\n    display: none;\n  }\n}\n.md-typeset :is(:hover, :target) > .headerlink,\n.md-typeset .headerlink:focus {\n  opacity: 1;\n  transition: color 250ms, opacity 125ms;\n}\n.md-typeset :target > .headerlink,\n.md-typeset .headerlink:is(:focus, :hover) {\n  color: var(--md-accent-fg-color);\n}\n.md-typeset :target {\n  --md-scroll-margin: 3.6rem;\n  --md-scroll-offset: 0rem;\n  scroll-margin-top: calc(var(--md-scroll-margin) - var(--md-scroll-offset));\n}\n@media screen and (min-width: 76.25em) {\n  .md-header--lifted ~ .md-container .md-typeset :target {\n    --md-scroll-margin: 6rem;\n  }\n}\n.md-typeset :is(h1, h2, h3):target {\n  --md-scroll-offset: 0.2rem;\n}\n.md-typeset h4:target {\n  --md-scroll-offset: 0.15rem;\n}\n\n.md-typeset div.arithmatex {\n  overflow: auto;\n}\n@media screen and (max-width: 44.9375em) {\n  .md-typeset div.arithmatex {\n    margin: 0 -0.8rem;\n  }\n}\n.md-typeset div.arithmatex > * {\n  width: min-content;\n  margin-inline: auto !important;\n  padding: 0 0.8rem;\n  touch-action: auto;\n}\n.md-typeset div.arithmatex > * mjx-container {\n  margin: 0 !important;\n}\n\n.md-typeset :is(del, ins, .comment).critic {\n  box-decoration-break: clone;\n}\n.md-typeset del.critic {\n  background-color: var(--md-typeset-del-color);\n}\n.md-typeset ins.critic {\n  background-color: var(--md-typeset-ins-color);\n}\n.md-typeset .critic.comment {\n  color: var(--md-code-hl-comment-color);\n}\n.md-typeset .critic.comment::before {\n  content: \"/* \";\n}\n.md-typeset .critic.comment::after {\n  content: \" */\";\n}\n.md-typeset .critic.block {\n  display: block;\n  margin: 1em 0;\n  padding-inline: 0.8rem;\n  overflow: auto;\n  box-shadow: none;\n}\n.md-typeset .critic.block > :first-child {\n  margin-top: 0.5em;\n}\n.md-typeset .critic.block > :last-child {\n  margin-bottom: 0.5em;\n}\n\n:root {\n  --md-details-icon: svg-load(\"material/chevron-right.svg\");\n}\n\n.md-typeset details {\n  display: flow-root;\n  padding-top: 0;\n  overflow: visible;\n}\n.md-typeset details[open] > summary::after {\n  transform: rotate(90deg);\n}\n.md-typeset details:not([open]) {\n  padding-bottom: 0;\n  box-shadow: none;\n}\n.md-typeset details:not([open]) > summary {\n  border-radius: 0.1rem;\n}\n.md-typeset summary {\n  display: block;\n  min-height: 1rem;\n  padding-inline-end: 1.8rem;\n  border-start-start-radius: 0.1rem;\n  border-start-end-radius: 0.1rem;\n  cursor: pointer;\n}\n.md-typeset summary.focus-visible {\n  outline-color: var(--md-accent-fg-color);\n  outline-offset: 0.2rem;\n}\n.md-typeset summary:not(.focus-visible) {\n  outline: none;\n  -webkit-tap-highlight-color: transparent;\n}\n.md-typeset summary::after {\n  position: absolute;\n  top: 0.625em;\n  inset-inline-end: 0.4rem;\n  width: 1rem;\n  height: 1rem;\n  background-color: currentcolor;\n  mask-image: var(--md-details-icon);\n  mask-position: center;\n  mask-repeat: no-repeat;\n  mask-size: contain;\n  transform: rotate(0deg);\n  transition: transform 250ms;\n  content: \"\";\n}\n[dir=rtl] .md-typeset summary::after {\n  transform: rotate(180deg);\n}\n.md-typeset summary::marker {\n  display: none;\n}\n.md-typeset summary::-webkit-details-marker {\n  display: none;\n}\n\n.md-typeset :is(.emojione, .twemoji, .gemoji) {\n  display: inline-flex;\n  height: 1.125em;\n  vertical-align: text-top;\n}\n.md-typeset :is(.emojione, .twemoji, .gemoji) svg {\n  width: 1.125em;\n  max-height: 100%;\n  fill: currentcolor;\n}\n\n.highlight :is(.o, .ow) {\n  color: var(--md-code-hl-operator-color);\n}\n.highlight .p {\n  color: var(--md-code-hl-punctuation-color);\n}\n.highlight :is(.cpf, .l, .s, .sb, .sc, .s2, .si, .s1, .ss) {\n  color: var(--md-code-hl-string-color);\n}\n.highlight :is(.cp, .se, .sh, .sr, .sx) {\n  color: var(--md-code-hl-special-color);\n}\n.highlight :is(.m, .mb, .mf, .mh, .mi, .il, .mo) {\n  color: var(--md-code-hl-number-color);\n}\n.highlight :is(.k, .kd, .kn, .kp, .kr, .kt) {\n  color: var(--md-code-hl-keyword-color);\n}\n.highlight :is(.n) {\n  color: var(--md-code-hl-name-color);\n}\n.highlight :is(.kc, .no, .nb, .bp) {\n  color: var(--md-code-hl-constant-color);\n}\n.highlight :is(.nc, .ne, .nf, .nn) {\n  color: var(--md-code-hl-function-color);\n}\n.highlight :is(.nd, .ni, .nl, .nt) {\n  color: var(--md-code-hl-keyword-color);\n}\n.highlight :is(.c, .cm, .c1, .ch, .cs, .sd) {\n  color: var(--md-code-hl-comment-color);\n}\n.highlight :is(.na, .nv, .vc, .vg, .vi) {\n  color: var(--md-code-hl-variable-color);\n}\n.highlight :is(.ge, .gr, .gh, .go, .gp, .gs, .gu, .gt) {\n  color: var(--md-code-hl-generic-color);\n}\n.highlight :is(.gd, .gi) {\n  margin: 0 -0.125em;\n  padding: 0 0.125em;\n  border-radius: 0.1rem;\n}\n.highlight .gd {\n  background-color: var(--md-typeset-del-color);\n}\n.highlight .gi {\n  background-color: var(--md-typeset-ins-color);\n}\n.highlight .hll {\n  display: block;\n  margin: 0 -1.1764705882em;\n  padding: 0 1.1764705882em;\n  background-color: var(--md-code-hl-color);\n}\n.highlight span.filename {\n  position: relative;\n  display: flow-root;\n  margin-top: 1em;\n  padding: 0.6617647059em 1.1764705882em;\n  font-weight: 700;\n  font-size: 0.85em;\n  background-color: var(--md-code-bg-color);\n  border-bottom: 0.05rem solid var(--md-default-fg-color--lightest);\n  border-top-left-radius: 0.1rem;\n  border-top-right-radius: 0.1rem;\n}\n.highlight span.filename + pre {\n  margin-top: 0;\n}\n.highlight span.filename + pre > code {\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n.highlight [data-linenos]::before {\n  position: sticky;\n  left: -1.1764705882em;\n  z-index: 3;\n  float: left;\n  margin-right: 1.1764705882em;\n  margin-left: -1.1764705882em;\n  padding-left: 1.1764705882em;\n  color: var(--md-default-fg-color--light);\n  background-color: var(--md-code-bg-color);\n  box-shadow: -0.05rem 0 var(--md-default-fg-color--lightest) inset;\n  content: attr(data-linenos);\n  user-select: none;\n}\n.highlight code a[id] {\n  position: absolute;\n  visibility: hidden;\n}\n.highlight code[data-md-copying] .hll {\n  display: contents;\n}\n.highlight code[data-md-copying] .md-annotation {\n  display: none;\n}\n\n.highlighttable {\n  display: flow-root;\n}\n.highlighttable :is(tbody, td) {\n  display: block;\n  padding: 0;\n}\n.highlighttable tr {\n  display: flex;\n}\n.highlighttable pre {\n  margin: 0;\n}\n.highlighttable th.filename {\n  flex-grow: 1;\n  padding: 0;\n  text-align: left;\n}\n.highlighttable th.filename span.filename {\n  margin-top: 0;\n}\n.highlighttable .linenos {\n  padding: 0.7720588235em 1.1764705882em;\n  padding-right: 0;\n  font-size: 0.85em;\n  background-color: var(--md-code-bg-color);\n  border-top-left-radius: 0.1rem;\n  border-bottom-left-radius: 0.1rem;\n  user-select: none;\n}\n.highlighttable .linenodiv {\n  padding-right: 0.5882352941em;\n  box-shadow: -0.05rem 0 var(--md-default-fg-color--lightest) inset;\n}\n.highlighttable .linenodiv pre {\n  color: var(--md-default-fg-color--light);\n  text-align: right;\n}\n.highlighttable .code {\n  flex: 1;\n  min-width: 0;\n}\n\n.linenodiv a {\n  color: inherit;\n}\n\n.md-typeset .highlighttable {\n  margin: 1em 0;\n  direction: ltr;\n}\n.md-typeset .highlighttable > tbody > tr > .code > div > pre > code {\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.md-typeset :is(.highlight, .highlighttable, .literal-block-wrapper, div[class^=highlight-], .results-prefix) + .result {\n  margin-top: calc(-1em + -0.125em);\n  padding: 0 1em;\n  overflow: visible;\n  border: 0.05rem solid var(--md-code-bg-color);\n  border-top-width: 0.1rem;\n  border-bottom-right-radius: 0.1rem;\n  border-bottom-left-radius: 0.1rem;\n}\n.md-typeset :is(.highlight, .highlighttable, .literal-block-wrapper, div[class^=highlight-], .results-prefix) + .result::after {\n  display: block;\n  clear: both;\n  content: \"\";\n}\n.md-typeset .results .results-prefix + .result {\n  margin-top: 0;\n}\n.md-typeset .results .results-prefix {\n  margin-top: -1em;\n  padding: 0.6617647059em 1.1764705882em;\n  font-weight: 700;\n  font-size: 0.85em;\n  background-color: var(--md-code-bg-color);\n}\n\n@media screen and (max-width: 44.9375em) {\n  .md-content__inner > .highlight {\n    margin: 1em -0.8rem;\n  }\n  .md-content__inner > .highlight > .filename,\n.md-content__inner > .highlight > pre > code {\n    border-radius: 0;\n  }\n  .md-content__inner > .highlight > .highlighttable > tbody > tr > .filename span.filename,\n.md-content__inner > .highlight > .highlighttable > tbody > tr > .linenos,\n.md-content__inner > .highlight > .highlighttable > tbody > tr > .code > div > pre > code {\n    border-radius: 0;\n  }\n  .md-content__inner > .highlight + .result {\n    margin-inline: -0.8rem;\n    border-inline-width: 0;\n    border-radius: 0;\n  }\n}\n.md-typeset .keys kbd:is(::before, ::after) {\n  position: relative;\n  margin: 0;\n  color: inherit;\n  -moz-osx-font-smoothing: initial;\n  -webkit-font-smoothing: initial;\n}\n.md-typeset .keys span {\n  padding: 0 0.2em;\n  color: var(--md-default-fg-color--light);\n}\n.md-typeset .keys .key-alt::before {\n  padding-right: 0.4em;\n  content: \"\u2387\";\n}\n.md-typeset .keys .key-left-alt::before {\n  padding-right: 0.4em;\n  content: \"\u2387\";\n}\n.md-typeset .keys .key-right-alt::before {\n  padding-right: 0.4em;\n  content: \"\u2387\";\n}\n.md-typeset .keys .key-command::before {\n  padding-right: 0.4em;\n  content: \"\u2318\";\n}\n.md-typeset .keys .key-left-command::before {\n  padding-right: 0.4em;\n  content: \"\u2318\";\n}\n.md-typeset .keys .key-right-command::before {\n  padding-right: 0.4em;\n  content: \"\u2318\";\n}\n.md-typeset .keys .key-control::before {\n  padding-right: 0.4em;\n  content: \"\u2303\";\n}\n.md-typeset .keys .key-left-control::before {\n  padding-right: 0.4em;\n  content: \"\u2303\";\n}\n.md-typeset .keys .key-right-control::before {\n  padding-right: 0.4em;\n  content: \"\u2303\";\n}\n.md-typeset .keys .key-meta::before {\n  padding-right: 0.4em;\n  content: \"\u25c6\";\n}\n.md-typeset .keys .key-left-meta::before {\n  padding-right: 0.4em;\n  content: \"\u25c6\";\n}\n.md-typeset .keys .key-right-meta::before {\n  padding-right: 0.4em;\n  content: \"\u25c6\";\n}\n.md-typeset .keys .key-option::before {\n  padding-right: 0.4em;\n  content: \"\u2325\";\n}\n.md-typeset .keys .key-left-option::before {\n  padding-right: 0.4em;\n  content: \"\u2325\";\n}\n.md-typeset .keys .key-right-option::before {\n  padding-right: 0.4em;\n  content: \"\u2325\";\n}\n.md-typeset .keys .key-shift::before {\n  padding-right: 0.4em;\n  content: \"\u21e7\";\n}\n.md-typeset .keys .key-left-shift::before {\n  padding-right: 0.4em;\n  content: \"\u21e7\";\n}\n.md-typeset .keys .key-right-shift::before {\n  padding-right: 0.4em;\n  content: \"\u21e7\";\n}\n.md-typeset .keys .key-super::before {\n  padding-right: 0.4em;\n  content: \"\u2756\";\n}\n.md-typeset .keys .key-left-super::before {\n  padding-right: 0.4em;\n  content: \"\u2756\";\n}\n.md-typeset .keys .key-right-super::before {\n  padding-right: 0.4em;\n  content: \"\u2756\";\n}\n.md-typeset .keys .key-windows::before {\n  padding-right: 0.4em;\n  content: \"\u229e\";\n}\n.md-typeset .keys .key-left-windows::before {\n  padding-right: 0.4em;\n  content: \"\u229e\";\n}\n.md-typeset .keys .key-right-windows::before {\n  padding-right: 0.4em;\n  content: \"\u229e\";\n}\n.md-typeset .keys .key-arrow-down::before {\n  padding-right: 0.4em;\n  content: \"\u2193\";\n}\n.md-typeset .keys .key-arrow-left::before {\n  padding-right: 0.4em;\n  content: \"\u2190\";\n}\n.md-typeset .keys .key-arrow-right::before {\n  padding-right: 0.4em;\n  content: \"\u2192\";\n}\n.md-typeset .keys .key-arrow-up::before {\n  padding-right: 0.4em;\n  content: \"\u2191\";\n}\n.md-typeset .keys .key-backspace::before {\n  padding-right: 0.4em;\n  content: \"\u232b\";\n}\n.md-typeset .keys .key-backtab::before {\n  padding-right: 0.4em;\n  content: \"\u21e4\";\n}\n.md-typeset .keys .key-caps-lock::before {\n  padding-right: 0.4em;\n  content: \"\u21ea\";\n}\n.md-typeset .keys .key-clear::before {\n  padding-right: 0.4em;\n  content: \"\u2327\";\n}\n.md-typeset .keys .key-context-menu::before {\n  padding-right: 0.4em;\n  content: \"\u2630\";\n}\n.md-typeset .keys .key-delete::before {\n  padding-right: 0.4em;\n  content: \"\u2326\";\n}\n.md-typeset .keys .key-eject::before {\n  padding-right: 0.4em;\n  content: \"\u23cf\";\n}\n.md-typeset .keys .key-end::before {\n  padding-right: 0.4em;\n  content: \"\u2913\";\n}\n.md-typeset .keys .key-escape::before {\n  padding-right: 0.4em;\n  content: \"\u238b\";\n}\n.md-typeset .keys .key-home::before {\n  padding-right: 0.4em;\n  content: \"\u2912\";\n}\n.md-typeset .keys .key-insert::before {\n  padding-right: 0.4em;\n  content: \"\u2380\";\n}\n.md-typeset .keys .key-page-down::before {\n  padding-right: 0.4em;\n  content: \"\u21df\";\n}\n.md-typeset .keys .key-page-up::before {\n  padding-right: 0.4em;\n  content: \"\u21de\";\n}\n.md-typeset .keys .key-print-screen::before {\n  padding-right: 0.4em;\n  content: \"\u2399\";\n}\n.md-typeset .keys .key-tab::after {\n  padding-left: 0.4em;\n  content: \"\u21e5\";\n}\n.md-typeset .keys .key-num-enter::after {\n  padding-left: 0.4em;\n  content: \"\u2324\";\n}\n.md-typeset .keys .key-enter::after {\n  padding-left: 0.4em;\n  content: \"\u23ce\";\n}\n\n:root {\n  --md-tabbed-icon--prev: svg-load(\"material/chevron-left.svg\");\n  --md-tabbed-icon--next: svg-load(\"material/chevron-right.svg\");\n}\n\n.md-typeset .tabbed-set {\n  position: relative;\n  display: flex;\n  flex-flow: column wrap;\n  margin: 1em 0;\n  border-radius: 0.1rem;\n}\n.md-typeset .tabbed-set > input {\n  position: absolute;\n  width: 0;\n  height: 0;\n  opacity: 0;\n}\n.md-typeset .tabbed-set > input:target {\n  --md-scroll-offset: 0.625em;\n}\n.md-typeset .tabbed-labels {\n  display: flex;\n  max-width: 100%;\n  overflow: auto;\n  box-shadow: 0 -0.05rem var(--md-default-fg-color--lightest) inset;\n  -ms-overflow-style: none;\n  scrollbar-width: none;\n}\n@media print {\n  .md-typeset .tabbed-labels {\n    display: contents;\n  }\n}\n@media screen {\n  .js .md-typeset .tabbed-labels {\n    position: relative;\n  }\n  .js .md-typeset .tabbed-labels::before {\n    position: absolute;\n    bottom: 0;\n    left: 0;\n    display: block;\n    width: var(--md-indicator-width);\n    height: 2px;\n    background: var(--md-accent-fg-color);\n    transform: translateX(var(--md-indicator-x));\n    transition: width 225ms, transform 250ms;\n    transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n    content: \"\";\n  }\n}\n.md-typeset .tabbed-labels::-webkit-scrollbar {\n  display: none;\n}\n.md-typeset .tabbed-labels > label {\n  flex-shrink: 0;\n  width: auto;\n  padding: 0.78125em 1.25em 0.625em;\n  color: var(--md-default-fg-color--light);\n  font-weight: 700;\n  font-size: 0.64rem;\n  white-space: nowrap;\n  border-bottom: 0.1rem solid transparent;\n  border-radius: 0.1rem 0.1rem 0 0;\n  cursor: pointer;\n  transition: background-color 250ms, color 250ms;\n  scroll-margin-inline-start: 1rem;\n}\n@media print {\n  .md-typeset .tabbed-labels > label:nth-child(1) {\n    order: 1;\n  }\n  .md-typeset .tabbed-labels > label:nth-child(2) {\n    order: 2;\n  }\n  .md-typeset .tabbed-labels > label:nth-child(3) {\n    order: 3;\n  }\n  .md-typeset .tabbed-labels > label:nth-child(4) {\n    order: 4;\n  }\n  .md-typeset .tabbed-labels > label:nth-child(5) {\n    order: 5;\n  }\n  .md-typeset .tabbed-labels > label:nth-child(6) {\n    order: 6;\n  }\n  .md-typeset .tabbed-labels > label:nth-child(7) {\n    order: 7;\n  }\n  .md-typeset .tabbed-labels > label:nth-child(8) {\n    order: 8;\n  }\n  .md-typeset .tabbed-labels > label:nth-child(9) {\n    order: 9;\n  }\n  .md-typeset .tabbed-labels > label:nth-child(10) {\n    order: 10;\n  }\n  .md-typeset .tabbed-labels > label:nth-child(11) {\n    order: 11;\n  }\n  .md-typeset .tabbed-labels > label:nth-child(12) {\n    order: 12;\n  }\n  .md-typeset .tabbed-labels > label:nth-child(13) {\n    order: 13;\n  }\n  .md-typeset .tabbed-labels > label:nth-child(14) {\n    order: 14;\n  }\n  .md-typeset .tabbed-labels > label:nth-child(15) {\n    order: 15;\n  }\n  .md-typeset .tabbed-labels > label:nth-child(16) {\n    order: 16;\n  }\n  .md-typeset .tabbed-labels > label:nth-child(17) {\n    order: 17;\n  }\n  .md-typeset .tabbed-labels > label:nth-child(18) {\n    order: 18;\n  }\n  .md-typeset .tabbed-labels > label:nth-child(19) {\n    order: 19;\n  }\n  .md-typeset .tabbed-labels > label:nth-child(20) {\n    order: 20;\n  }\n}\n.md-typeset .tabbed-labels > label:hover {\n  color: var(--md-accent-fg-color);\n}\n.md-typeset .tabbed-content {\n  width: 100%;\n}\n@media print {\n  .md-typeset .tabbed-content {\n    display: contents;\n  }\n}\n.md-typeset .tabbed-block {\n  display: none;\n}\n@media print {\n  .md-typeset .tabbed-block {\n    display: block;\n  }\n  .md-typeset .tabbed-block:nth-child(1) {\n    order: 1;\n  }\n  .md-typeset .tabbed-block:nth-child(2) {\n    order: 2;\n  }\n  .md-typeset .tabbed-block:nth-child(3) {\n    order: 3;\n  }\n  .md-typeset .tabbed-block:nth-child(4) {\n    order: 4;\n  }\n  .md-typeset .tabbed-block:nth-child(5) {\n    order: 5;\n  }\n  .md-typeset .tabbed-block:nth-child(6) {\n    order: 6;\n  }\n  .md-typeset .tabbed-block:nth-child(7) {\n    order: 7;\n  }\n  .md-typeset .tabbed-block:nth-child(8) {\n    order: 8;\n  }\n  .md-typeset .tabbed-block:nth-child(9) {\n    order: 9;\n  }\n  .md-typeset .tabbed-block:nth-child(10) {\n    order: 10;\n  }\n  .md-typeset .tabbed-block:nth-child(11) {\n    order: 11;\n  }\n  .md-typeset .tabbed-block:nth-child(12) {\n    order: 12;\n  }\n  .md-typeset .tabbed-block:nth-child(13) {\n    order: 13;\n  }\n  .md-typeset .tabbed-block:nth-child(14) {\n    order: 14;\n  }\n  .md-typeset .tabbed-block:nth-child(15) {\n    order: 15;\n  }\n  .md-typeset .tabbed-block:nth-child(16) {\n    order: 16;\n  }\n  .md-typeset .tabbed-block:nth-child(17) {\n    order: 17;\n  }\n  .md-typeset .tabbed-block:nth-child(18) {\n    order: 18;\n  }\n  .md-typeset .tabbed-block:nth-child(19) {\n    order: 19;\n  }\n  .md-typeset .tabbed-block:nth-child(20) {\n    order: 20;\n  }\n}\n.md-typeset .tabbed-block > pre:first-child,\n.md-typeset .tabbed-block > .highlight:first-child > pre {\n  margin: 0;\n}\n.md-typeset .tabbed-block > pre:first-child > code,\n.md-typeset .tabbed-block > .highlight:first-child > pre > code {\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n.md-typeset .tabbed-block > .highlight:first-child > .filename {\n  margin: 0;\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n.md-typeset .tabbed-block > .highlight:first-child > .highlighttable {\n  margin: 0;\n}\n.md-typeset .tabbed-block > .highlight:first-child > .highlighttable > tbody > tr > .filename span.filename,\n.md-typeset .tabbed-block > .highlight:first-child > .highlighttable > tbody > tr > .linenos {\n  margin: 0;\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n.md-typeset .tabbed-block > .highlight:first-child > .highlighttable > tbody > tr > .code > div > pre > code {\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n.md-typeset .tabbed-block > .highlight:first-child + .result {\n  margin-top: -0.125em;\n}\n.md-typeset .tabbed-block > .tabbed-set {\n  margin: 0;\n}\n.md-typeset .tabbed-button {\n  display: block;\n  align-self: center;\n  width: 0.9rem;\n  height: 0.9rem;\n  margin-top: 0.1rem;\n  color: var(--md-default-fg-color--light);\n  border-radius: 100%;\n  cursor: pointer;\n  transition: background-color 250ms;\n  pointer-events: initial;\n}\n.md-typeset .tabbed-button:hover {\n  color: var(--md-accent-fg-color);\n  background-color: var(--md-accent-fg-color--transparent);\n}\n.md-typeset .tabbed-button::after {\n  display: block;\n  width: 100%;\n  height: 100%;\n  background-color: currentcolor;\n  transition: background-color 250ms, transform 250ms;\n  mask-image: var(--md-tabbed-icon--prev);\n  mask-position: center;\n  mask-repeat: no-repeat;\n  mask-size: contain;\n  content: \"\";\n}\n.md-typeset .tabbed-control {\n  position: absolute;\n  display: flex;\n  justify-content: start;\n  width: 1.2rem;\n  height: 1.9rem;\n  background: linear-gradient(to right, var(--md-default-bg-color) 60%, transparent);\n  transition: opacity 125ms;\n  pointer-events: none;\n}\n[dir=rtl] .md-typeset .tabbed-control {\n  transform: rotate(180deg);\n}\n.md-typeset .tabbed-control[hidden] {\n  opacity: 0;\n}\n.md-typeset .tabbed-control--next {\n  right: 0;\n  justify-content: end;\n  background: linear-gradient(to left, var(--md-default-bg-color) 60%, transparent);\n}\n.md-typeset .tabbed-control--next .tabbed-button::after {\n  mask-image: var(--md-tabbed-icon--next);\n}\n\n@media screen and (max-width: 44.9375em) {\n  .md-content__inner > .tabbed-set .tabbed-labels {\n    max-width: 100vw;\n    margin: 0 -0.8rem;\n    padding-inline-start: 0.8rem;\n    scroll-padding-inline-start: 0.8rem;\n  }\n  .md-content__inner > .tabbed-set .tabbed-labels::after {\n    padding-inline-end: 0.8rem;\n    content: \"\";\n  }\n  .md-content__inner > .tabbed-set .tabbed-labels ~ .tabbed-control--prev {\n    width: 2rem;\n    margin-inline-start: -0.8rem;\n    padding-inline-start: 0.8rem;\n  }\n  .md-content__inner > .tabbed-set .tabbed-labels ~ .tabbed-control--next {\n    width: 2rem;\n    margin-inline-end: -0.8rem;\n    padding-inline-end: 0.8rem;\n  }\n}\n@media screen {\n  .md-typeset .tabbed-set > input:nth-child(20):checked ~ .tabbed-labels > :nth-child(20), .md-typeset .tabbed-set > input:nth-child(19):checked ~ .tabbed-labels > :nth-child(19), .md-typeset .tabbed-set > input:nth-child(18):checked ~ .tabbed-labels > :nth-child(18), .md-typeset .tabbed-set > input:nth-child(17):checked ~ .tabbed-labels > :nth-child(17), .md-typeset .tabbed-set > input:nth-child(16):checked ~ .tabbed-labels > :nth-child(16), .md-typeset .tabbed-set > input:nth-child(15):checked ~ .tabbed-labels > :nth-child(15), .md-typeset .tabbed-set > input:nth-child(14):checked ~ .tabbed-labels > :nth-child(14), .md-typeset .tabbed-set > input:nth-child(13):checked ~ .tabbed-labels > :nth-child(13), .md-typeset .tabbed-set > input:nth-child(12):checked ~ .tabbed-labels > :nth-child(12), .md-typeset .tabbed-set > input:nth-child(11):checked ~ .tabbed-labels > :nth-child(11), .md-typeset .tabbed-set > input:nth-child(10):checked ~ .tabbed-labels > :nth-child(10), .md-typeset .tabbed-set > input:nth-child(9):checked ~ .tabbed-labels > :nth-child(9), .md-typeset .tabbed-set > input:nth-child(8):checked ~ .tabbed-labels > :nth-child(8), .md-typeset .tabbed-set > input:nth-child(7):checked ~ .tabbed-labels > :nth-child(7), .md-typeset .tabbed-set > input:nth-child(6):checked ~ .tabbed-labels > :nth-child(6), .md-typeset .tabbed-set > input:nth-child(5):checked ~ .tabbed-labels > :nth-child(5), .md-typeset .tabbed-set > input:nth-child(4):checked ~ .tabbed-labels > :nth-child(4), .md-typeset .tabbed-set > input:nth-child(3):checked ~ .tabbed-labels > :nth-child(3), .md-typeset .tabbed-set > input:nth-child(2):checked ~ .tabbed-labels > :nth-child(2), .md-typeset .tabbed-set > input:nth-child(1):checked ~ .tabbed-labels > :nth-child(1) {\n    color: var(--md-accent-fg-color);\n  }\n  .no-js .md-typeset .tabbed-set > input:nth-child(20):checked ~ .tabbed-labels > :nth-child(20), .md-typeset .no-js .tabbed-set > input:nth-child(20):checked ~ .tabbed-labels > :nth-child(20), .no-js .md-typeset .tabbed-set > input:nth-child(19):checked ~ .tabbed-labels > :nth-child(19), .md-typeset .no-js .tabbed-set > input:nth-child(19):checked ~ .tabbed-labels > :nth-child(19), .no-js .md-typeset .tabbed-set > input:nth-child(18):checked ~ .tabbed-labels > :nth-child(18), .md-typeset .no-js .tabbed-set > input:nth-child(18):checked ~ .tabbed-labels > :nth-child(18), .no-js .md-typeset .tabbed-set > input:nth-child(17):checked ~ .tabbed-labels > :nth-child(17), .md-typeset .no-js .tabbed-set > input:nth-child(17):checked ~ .tabbed-labels > :nth-child(17), .no-js .md-typeset .tabbed-set > input:nth-child(16):checked ~ .tabbed-labels > :nth-child(16), .md-typeset .no-js .tabbed-set > input:nth-child(16):checked ~ .tabbed-labels > :nth-child(16), .no-js .md-typeset .tabbed-set > input:nth-child(15):checked ~ .tabbed-labels > :nth-child(15), .md-typeset .no-js .tabbed-set > input:nth-child(15):checked ~ .tabbed-labels > :nth-child(15), .no-js .md-typeset .tabbed-set > input:nth-child(14):checked ~ .tabbed-labels > :nth-child(14), .md-typeset .no-js .tabbed-set > input:nth-child(14):checked ~ .tabbed-labels > :nth-child(14), .no-js .md-typeset .tabbed-set > input:nth-child(13):checked ~ .tabbed-labels > :nth-child(13), .md-typeset .no-js .tabbed-set > input:nth-child(13):checked ~ .tabbed-labels > :nth-child(13), .no-js .md-typeset .tabbed-set > input:nth-child(12):checked ~ .tabbed-labels > :nth-child(12), .md-typeset .no-js .tabbed-set > input:nth-child(12):checked ~ .tabbed-labels > :nth-child(12), .no-js .md-typeset .tabbed-set > input:nth-child(11):checked ~ .tabbed-labels > :nth-child(11), .md-typeset .no-js .tabbed-set > input:nth-child(11):checked ~ .tabbed-labels > :nth-child(11), .no-js .md-typeset .tabbed-set > input:nth-child(10):checked ~ .tabbed-labels > :nth-child(10), .md-typeset .no-js .tabbed-set > input:nth-child(10):checked ~ .tabbed-labels > :nth-child(10), .no-js .md-typeset .tabbed-set > input:nth-child(9):checked ~ .tabbed-labels > :nth-child(9), .md-typeset .no-js .tabbed-set > input:nth-child(9):checked ~ .tabbed-labels > :nth-child(9), .no-js .md-typeset .tabbed-set > input:nth-child(8):checked ~ .tabbed-labels > :nth-child(8), .md-typeset .no-js .tabbed-set > input:nth-child(8):checked ~ .tabbed-labels > :nth-child(8), .no-js .md-typeset .tabbed-set > input:nth-child(7):checked ~ .tabbed-labels > :nth-child(7), .md-typeset .no-js .tabbed-set > input:nth-child(7):checked ~ .tabbed-labels > :nth-child(7), .no-js .md-typeset .tabbed-set > input:nth-child(6):checked ~ .tabbed-labels > :nth-child(6), .md-typeset .no-js .tabbed-set > input:nth-child(6):checked ~ .tabbed-labels > :nth-child(6), .no-js .md-typeset .tabbed-set > input:nth-child(5):checked ~ .tabbed-labels > :nth-child(5), .md-typeset .no-js .tabbed-set > input:nth-child(5):checked ~ .tabbed-labels > :nth-child(5), .no-js .md-typeset .tabbed-set > input:nth-child(4):checked ~ .tabbed-labels > :nth-child(4), .md-typeset .no-js .tabbed-set > input:nth-child(4):checked ~ .tabbed-labels > :nth-child(4), .no-js .md-typeset .tabbed-set > input:nth-child(3):checked ~ .tabbed-labels > :nth-child(3), .md-typeset .no-js .tabbed-set > input:nth-child(3):checked ~ .tabbed-labels > :nth-child(3), .no-js .md-typeset .tabbed-set > input:nth-child(2):checked ~ .tabbed-labels > :nth-child(2), .md-typeset .no-js .tabbed-set > input:nth-child(2):checked ~ .tabbed-labels > :nth-child(2), .no-js .md-typeset .tabbed-set > input:nth-child(1):checked ~ .tabbed-labels > :nth-child(1), .md-typeset .no-js .tabbed-set > input:nth-child(1):checked ~ .tabbed-labels > :nth-child(1) {\n    border-color: var(--md-accent-fg-color);\n  }\n}\n\n.md-typeset .tabbed-set > input:nth-child(20).focus-visible ~ .tabbed-labels > :nth-child(20), .md-typeset .tabbed-set > input:nth-child(19).focus-visible ~ .tabbed-labels > :nth-child(19), .md-typeset .tabbed-set > input:nth-child(18).focus-visible ~ .tabbed-labels > :nth-child(18), .md-typeset .tabbed-set > input:nth-child(17).focus-visible ~ .tabbed-labels > :nth-child(17), .md-typeset .tabbed-set > input:nth-child(16).focus-visible ~ .tabbed-labels > :nth-child(16), .md-typeset .tabbed-set > input:nth-child(15).focus-visible ~ .tabbed-labels > :nth-child(15), .md-typeset .tabbed-set > input:nth-child(14).focus-visible ~ .tabbed-labels > :nth-child(14), .md-typeset .tabbed-set > input:nth-child(13).focus-visible ~ .tabbed-labels > :nth-child(13), .md-typeset .tabbed-set > input:nth-child(12).focus-visible ~ .tabbed-labels > :nth-child(12), .md-typeset .tabbed-set > input:nth-child(11).focus-visible ~ .tabbed-labels > :nth-child(11), .md-typeset .tabbed-set > input:nth-child(10).focus-visible ~ .tabbed-labels > :nth-child(10), .md-typeset .tabbed-set > input:nth-child(9).focus-visible ~ .tabbed-labels > :nth-child(9), .md-typeset .tabbed-set > input:nth-child(8).focus-visible ~ .tabbed-labels > :nth-child(8), .md-typeset .tabbed-set > input:nth-child(7).focus-visible ~ .tabbed-labels > :nth-child(7), .md-typeset .tabbed-set > input:nth-child(6).focus-visible ~ .tabbed-labels > :nth-child(6), .md-typeset .tabbed-set > input:nth-child(5).focus-visible ~ .tabbed-labels > :nth-child(5), .md-typeset .tabbed-set > input:nth-child(4).focus-visible ~ .tabbed-labels > :nth-child(4), .md-typeset .tabbed-set > input:nth-child(3).focus-visible ~ .tabbed-labels > :nth-child(3), .md-typeset .tabbed-set > input:nth-child(2).focus-visible ~ .tabbed-labels > :nth-child(2), .md-typeset .tabbed-set > input:nth-child(1).focus-visible ~ .tabbed-labels > :nth-child(1) {\n  background-color: var(--md-accent-fg-color--transparent);\n}\n\n.md-typeset .tabbed-set > input:nth-child(20):checked ~ .tabbed-content > :nth-child(20), .md-typeset .tabbed-set > input:nth-child(19):checked ~ .tabbed-content > :nth-child(19), .md-typeset .tabbed-set > input:nth-child(18):checked ~ .tabbed-content > :nth-child(18), .md-typeset .tabbed-set > input:nth-child(17):checked ~ .tabbed-content > :nth-child(17), .md-typeset .tabbed-set > input:nth-child(16):checked ~ .tabbed-content > :nth-child(16), .md-typeset .tabbed-set > input:nth-child(15):checked ~ .tabbed-content > :nth-child(15), .md-typeset .tabbed-set > input:nth-child(14):checked ~ .tabbed-content > :nth-child(14), .md-typeset .tabbed-set > input:nth-child(13):checked ~ .tabbed-content > :nth-child(13), .md-typeset .tabbed-set > input:nth-child(12):checked ~ .tabbed-content > :nth-child(12), .md-typeset .tabbed-set > input:nth-child(11):checked ~ .tabbed-content > :nth-child(11), .md-typeset .tabbed-set > input:nth-child(10):checked ~ .tabbed-content > :nth-child(10), .md-typeset .tabbed-set > input:nth-child(9):checked ~ .tabbed-content > :nth-child(9), .md-typeset .tabbed-set > input:nth-child(8):checked ~ .tabbed-content > :nth-child(8), .md-typeset .tabbed-set > input:nth-child(7):checked ~ .tabbed-content > :nth-child(7), .md-typeset .tabbed-set > input:nth-child(6):checked ~ .tabbed-content > :nth-child(6), .md-typeset .tabbed-set > input:nth-child(5):checked ~ .tabbed-content > :nth-child(5), .md-typeset .tabbed-set > input:nth-child(4):checked ~ .tabbed-content > :nth-child(4), .md-typeset .tabbed-set > input:nth-child(3):checked ~ .tabbed-content > :nth-child(3), .md-typeset .tabbed-set > input:nth-child(2):checked ~ .tabbed-content > :nth-child(2), .md-typeset .tabbed-set > input:nth-child(1):checked ~ .tabbed-content > :nth-child(1) {\n  display: block;\n}\n\n:root {\n  --md-tasklist-icon:\n    svg-load(\"octicons/check-circle-fill-24.svg\");\n  --md-tasklist-icon--checked:\n    svg-load(\"octicons/check-circle-fill-24.svg\");\n}\n\n.md-typeset .task-list-item {\n  position: relative;\n  list-style-type: none;\n}\n.md-typeset .task-list-item [type=checkbox] {\n  position: absolute;\n  top: 0.45em;\n  inset-inline-start: -2em;\n}\n.md-typeset .task-list-control [type=checkbox] {\n  z-index: -1;\n  opacity: 0;\n}\n.md-typeset .task-list-indicator::before {\n  position: absolute;\n  top: 0.15em;\n  inset-inline-start: -1.5em;\n  width: 1.25em;\n  height: 1.25em;\n  background-color: var(--md-default-fg-color--lightest);\n  mask-image: var(--md-tasklist-icon);\n  mask-position: center;\n  mask-repeat: no-repeat;\n  mask-size: contain;\n  content: \"\";\n}\n.md-typeset [type=checkbox]:checked + .task-list-indicator::before {\n  background-color: #00e676;\n  mask-image: var(--md-tasklist-icon--checked);\n}\n\n.rst-versions {\n  font-family: var(--md-text-font-family);\n}\n.rst-versions.rst-badge {\n  top: 50px;\n  bottom: inherit !important;\n  height: auto;\n  font-size: 0.85rem;\n}\n\n:root > * {\n  --md-mermaid-font-family: var(--md-text-font-family), sans-serif;\n  --md-mermaid-edge-color: var(--md-code-fg-color);\n  --md-mermaid-node-bg-color: var(--md-accent-fg-color--transparent);\n  --md-mermaid-node-fg-color: var(--md-accent-fg-color);\n  --md-mermaid-label-bg-color: var(--md-default-bg-color);\n  --md-mermaid-label-fg-color: var(--md-code-fg-color);\n}\n\n.mermaid {\n  margin: 1em 0;\n  line-height: normal;\n}\n\n:root > * {\n  --md-graphviz-edge-color: var(--md-default-fg-color);\n  --md-graphviz-node-bg-color: var(--md-accent-fg-color--transparent);\n  --md-graphviz-node-fg-color: var(--md-accent-fg-color);\n  --md-graphviz-label-bg-color: var(--md-default-bg-color);\n  --md-graphviz-label-fg-color: var(--md-code-fg-color);\n  --md-graphviz-a-hover-color: var(--md-primary-fg-color);\n}\n\n.graphviz {\n  margin: 1em 0;\n}\n\n.graphviz a:hover > text {\n  fill: var(--md-graphviz-hover-color) !important;\n}\n\n@media screen and (min-width: 45em) {\n  .md-typeset .inline {\n    float: inline-start;\n    width: 11.7rem;\n    margin-top: 0;\n    margin-inline-end: 0.8rem;\n    margin-bottom: 0.8rem;\n  }\n  .md-typeset .inline.end {\n    float: inline-end;\n    margin-inline: 0.8rem 0;\n  }\n}\n\n.md-typeset .align-left {\n  text-align: left;\n}\n.md-typeset .align-right {\n  text-align: right;\n}\n.md-typeset .align-center {\n  clear: both;\n  text-align: center;\n}\n.md-typeset .align-top {\n  vertical-align: top;\n}\n.md-typeset .align-middle {\n  vertical-align: middle;\n}\n.md-typeset .align-bottom {\n  vertical-align: bottom;\n}\n.md-typeset .figure.align-left,\n.md-typeset figure.align-left,\n.md-typeset img.align-left,\n.md-typeset object.align-left,\n.md-typeset table.align-left {\n  margin-right: auto;\n}\n.md-typeset .figure.align-center,\n.md-typeset figure.align-center,\n.md-typeset img.align-center,\n.md-typeset object.align-center,\n.md-typeset table.align-center {\n  margin-right: auto;\n  margin-left: auto;\n}\n.md-typeset .figure.align-right,\n.md-typeset figure.align-right,\n.md-typeset img.align-right,\n.md-typeset object.align-right,\n.md-typeset table.align-right {\n  margin-left: auto;\n}\n.md-typeset .figure.align-center,\n.md-typeset .figure.align-right,\n.md-typeset figure.align-center,\n.md-typeset figure.align-right,\n.md-typeset img.align-center,\n.md-typeset img.align-right,\n.md-typeset object.align-center,\n.md-typeset object.align-right {\n  display: block;\n}\n.md-typeset .figure.align-left,\n.md-typeset .figure.align-right,\n.md-typeset figure.align-left,\n.md-typeset figure.align-right,\n.md-typeset table.align-left,\n.md-typeset table.align-center,\n.md-typeset table.align-right {\n  text-align: inherit;\n}\n.md-typeset .rubric {\n  font-weight: 700;\n}\n.md-typeset .viewcode-block .viewcode-back {\n  float: right;\n}\n.md-typeset .versionmodified {\n  font-style: italic;\n}\n.md-typeset div.line-block {\n  display: block;\n}\n.md-typeset div.line-block div.line-block {\n  margin-left: 1.5em;\n}\n\n.md-typeset :is(dl.objdesc, dl.api-field) > dt {\n  font-family: var(--md-code-font-family);\n  background: var(--md-code-bg-color);\n}\n.md-typeset :is(dl.objdesc, dl.api-field) > dt code {\n  padding: 0;\n  border-radius: 0;\n}\n.md-typeset :is(dl.objdesc, dl.api-field) > dt .sig-name:not(.sig-name-nonprimary) {\n  padding: 0;\n  color: var(--md-code-hl-name-color);\n  font-weight: 700;\n}\n.md-typeset :is(dl.objdesc, dl.api-field) > dt .sig-param {\n  font-style: normal;\n}\n.md-typeset :is(dl.objdesc, dl.api-field) > dt .sig-param .n:not(.desctype) {\n  color: var(--md-default-fg-color--light);\n}\n.md-typeset :is(dl.objdesc, dl.api-field) > dt .sig-param a.reference .n:not(.desctype):hover {\n  color: var(--md-accent-fg-color);\n}\n.md-typeset :is(dl.objdesc, dl.api-field) > dt.sig-wrap .sig-param-decl::before {\n  white-space: pre;\n  content: \"\\a     \";\n}\n.md-typeset :is(dl.objdesc, dl.api-field) > dt.sig-wrap .sig-paren ~ .sig-paren::before {\n  white-space: pre;\n  content: \"\\a\";\n}\n.md-typeset dl.objdesc > dd > dl.field-list > dt > .colon {\n  display: none;\n}\n.md-typeset :is(dl.objdesc, dl.api-field) > dt a.reference > .sig-name,\n.md-typeset :is(dl.objdesc, dl.api-field) > dt a.reference.sig-name,\n.md-typeset :is(dl.objdesc, dl.api-field) > dt a.reference:not(.desctype) > .n,\n.md-typeset .sig-inline a.reference > .sig-name,\n.md-typeset .sig-inline a.reference.sig-name,\n.md-typeset .sig-inline a.reference:not(.desctype) > .n {\n  color: var(--md-typeset-a-color);\n}\n.md-typeset :is(dl.objdesc, dl.api-field) > dt a.reference > .sig-name:hover,\n.md-typeset :is(dl.objdesc, dl.api-field) > dt a.reference.sig-name:hover,\n.md-typeset :is(dl.objdesc, dl.api-field) > dt a.reference:not(.desctype) > .n:hover,\n.md-typeset .sig-inline a.reference > .sig-name:hover,\n.md-typeset .sig-inline a.reference.sig-name:hover,\n.md-typeset .sig-inline a.reference:not(.desctype) > .n:hover {\n  color: var(--md-accent-fg-color);\n}\n.md-typeset :is(dl.objdesc, dl.api-field) > dt .desctype,\n.md-typeset :is(dl.objdesc, dl.api-field) > dt .desctype > a.reference,\n.md-typeset .sig-inline .desctype,\n.md-typeset .sig-inline .desctype > a.reference {\n  color: var(--md-code-hl-special-color);\n}\n.md-typeset :is(dl.objdesc, dl.api-field) > dt .desctype .n,\n.md-typeset :is(dl.objdesc, dl.api-field) > dt .desctype > a.reference .n,\n.md-typeset .sig-inline .desctype .n,\n.md-typeset .sig-inline .desctype > a.reference .n {\n  color: inherit;\n}\n.md-typeset :is(dl.objdesc, dl.api-field) > dt .desctype:is(a.reference):hover,\n.md-typeset :is(dl.objdesc, dl.api-field) > dt .desctype > a.reference:hover,\n.md-typeset .sig-inline .desctype:is(a.reference):hover,\n.md-typeset .sig-inline .desctype > a.reference:hover {\n  color: var(--md-accent-fg-color);\n}\n.md-typeset dl.objdesc > dt {\n  padding-top: 0.5em;\n  padding-right: 0.5em;\n  padding-left: 0.5em;\n  font-family: var(--md-code-font-family);\n  background: var(--md-code-bg-color);\n}\n.md-typeset dl.objdesc > dt,\n.md-typeset dl.objdesc > dt code {\n  font-size: 0.75rem;\n}\n.md-typeset dl.objdesc > dt .property {\n  color: var(--md-code-hl-keyword-color);\n  font-weight: 700;\n  font-style: normal;\n}\n.md-typeset dl.objdesc > dt .sig-prename {\n  padding: 0;\n  color: var(--md-code-hl-name-color);\n}\n.md-typeset dl.objdesc > dt .viewcode-link,\n.md-typeset dl.objdesc > dt .viewcode-back {\n  float: right;\n  text-align: right;\n}\n.md-typeset dl.objdesc > dt.api-include-path,\n.md-typeset dl.objdesc > dt.api-include-path code {\n  font-size: 0.65rem;\n}\n.md-typeset dl.objdesc > dt:first-child {\n  padding-top: 0.5em;\n}\n.md-typeset dl.objdesc > dt:last-of-type {\n  padding-bottom: 0.5em;\n}\n.md-typeset dl.objdesc > dd dl.field-list > dt {\n  margin-bottom: 1em;\n  font-weight: 700;\n  font-size: 1em;\n}\n.md-typeset dl.objdesc > dd dd.noindent {\n  margin-left: 0;\n}\n.md-typeset dl.api-field > dt {\n  display: table;\n}\n.md-typeset dl.api-field > dt a.headerlink {\n  position: relative;\n  left: 0.5em;\n  width: 0;\n  margin-left: 0;\n}\n.md-typeset dl.api-field > dt,\n.md-typeset dl.api-field > dt code {\n  font-size: 0.65rem;\n}\n.md-typeset dl.api-field > dt.api-parameter-kind {\n  float: right;\n  font-family: var(--md-text-font-family);\n}\n.md-typeset dl.api-field > dt.api-parameter-kind::before {\n  content: \"[\";\n}\n.md-typeset dl.api-field > dt.api-parameter-kind::after {\n  content: \"]\";\n}\n.md-typeset dl.objdesc.summary > dd,\n.md-typeset dl.objdesc.summary > dd > p:first-child {\n  margin-top: 0;\n}\n.md-typeset .sig-inline:is(.c-texpr, .cpp-texpr) {\n  font-family: unset;\n  background-color: unset;\n}\n\n.md-nav__link {\n  white-space: nowrap;\n}\n\n:root > * {\n  --objinfo-icon-fg-alias: #e65100;\n  --objinfo-icon-fg-default: #424242;\n  --objinfo-icon-fg-data: #1565c0;\n  --objinfo-icon-fg-procedure: #6a1b9a;\n  --objinfo-icon-fg-sub-data: #2e7d32;\n  --objinfo-icon-bg-default: var(--md-default-bg-color);\n}\n\n@media screen {\n  [data-md-color-scheme=slate] {\n    --objinfo-icon-fg-alias: #ffb74d;\n    --objinfo-icon-fg-default: #e0e0e0;\n    --objinfo-icon-fg-data: #64b5f6;\n    --objinfo-icon-fg-procedure: #ce93d8;\n    --objinfo-icon-fg-sub-data: #81c784;\n  }\n}\n.objinfo-icon {\n  display: inline-block;\n  flex-shrink: 0;\n  width: 16px;\n  height: 16px;\n  margin-right: 8px;\n  color: var(--objinfo-icon-fg-default);\n  font-weight: 500;\n  font-family: var(--md-text-font-family);\n  line-height: 16px;\n  text-align: center;\n  vertical-align: middle;\n  background-color: var(--objinfo-icon-bg-default);\n  border: 1px solid var(--objinfo-icon-fg-default);\n  border-radius: 2px;\n}\n.objinfo-icon__alias {\n  color: var(--objinfo-icon-bg-default);\n  background-color: var(--objinfo-icon-fg-alias);\n  border: 1px solid var(--objinfo-icon-fg-alias);\n}\n.objinfo-icon__procedure {\n  color: var(--objinfo-icon-bg-default);\n  background-color: var(--objinfo-icon-fg-procedure);\n  border: 1px solid var(--objinfo-icon-fg-procedure);\n}\n.objinfo-icon__data {\n  color: var(--objinfo-icon-bg-default);\n  background-color: var(--objinfo-icon-fg-data);\n  border: 1px solid var(--objinfo-icon-fg-data);\n}\n.objinfo-icon__sub-data {\n  color: var(--objinfo-icon-bg-default);\n  background-color: var(--objinfo-icon-fg-sub-data);\n  border: 1px solid var(--objinfo-icon-fg-sub-data);\n}\n\n.search-result-objlabel {\n  float: right;\n  padding: 2px;\n  border: 1px solid var(--md-default-fg-color--light);\n  border-radius: 2px;\n}\n\ntable.longtable.docutils.data.align-default tbody > tr > td > p > a.reference.internal > code.xref.py.py-obj.docutils.literal.notranslate > span.pre {\n  word-break: normal;\n}", "////\n/// Copyright (c) 2016-2022 Martin Donath \n///\n/// Permission is hereby granted, free of charge, to any person obtaining a\n/// copy of this software and associated documentation files (the \"Software\"),\n/// to deal in the Software without restriction, including without limitation\n/// the rights to use, copy, modify, merge, publish, distribute, sublicense,\n/// and/or sell copies of the Software, and to permit persons to whom the\n/// Software is furnished to do so, subject to the following conditions:\n///\n/// The above copyright notice and this permission notice shall be included in\n/// all copies or substantial portions of the Software.\n///\n/// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n/// FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL\n/// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n/// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n/// DEALINGS\n////\n\n// ----------------------------------------------------------------------------\n// Rules\n// ----------------------------------------------------------------------------\n\n// Enforce correct box model and prevent adjustments of font size after\n// orientation changes in IE and iOS\nhtml {\n  box-sizing: border-box;\n  text-size-adjust: none;\n}\n\n// All elements shall inherit the document default\n*,\n*::before,\n*::after {\n  box-sizing: inherit;\n\n  // [reduced motion]: Disable all transitions\n  @media (prefers-reduced-motion) {\n    transition: none !important; // stylelint-disable-line\n  }\n}\n\n// Remove margin in all browsers\nbody {\n  margin: 0;\n}\n\n// Reset tap outlines on iOS and Android\na,\nbutton,\nlabel,\ninput {\n  -webkit-tap-highlight-color: transparent;\n}\n\n// Reset link styles\na {\n  color: inherit;\n  text-decoration: none;\n}\n\n// Normalize horizontal separator styles\nhr {\n  display: block;\n  box-sizing: content-box;\n  height: px2rem(1px);\n  padding: 0;\n  overflow: visible;\n  border: 0;\n}\n\n// Normalize font-size in all browsers\nsmall {\n  font-size: 80%;\n}\n\n// Prevent subscript and superscript from affecting line-height\nsub,\nsup {\n  line-height: 1em;\n}\n\n// Remove border on image\nimg {\n  border-style: none;\n}\n\n// Reset table styles\ntable {\n  border-collapse: separate;\n  border-spacing: 0;\n}\n\n// Reset table cell styles\ntd,\nth {\n  font-weight: 400;\n  vertical-align: top;\n}\n\n// Reset button styles\nbutton {\n  margin: 0;\n  padding: 0;\n  font-size: inherit;\n  font-family: inherit;\n  background: transparent;\n  border: 0;\n}\n\n// Reset input styles\ninput {\n  border: 0;\n  outline: none;\n}\n", "////\n/// Copyright (c) 2016-2022 Martin Donath \n///\n/// Permission is hereby granted, free of charge, to any person obtaining a\n/// copy of this software and associated documentation files (the \"Software\"),\n/// to deal in the Software without restriction, including without limitation\n/// the rights to use, copy, modify, merge, publish, distribute, sublicense,\n/// and/or sell copies of the Software, and to permit persons to whom the\n/// Software is furnished to do so, subject to the following conditions:\n///\n/// The above copyright notice and this permission notice shall be included in\n/// all copies or substantial portions of the Software.\n///\n/// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n/// FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL\n/// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n/// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n/// DEALINGS\n////\n\n// ----------------------------------------------------------------------------\n// Rules\n// ----------------------------------------------------------------------------\n\n// Color variables\n:root {\n  @extend %root;\n}\n\n// ----------------------------------------------------------------------------\n\n// Allow to explicitly use color schemes in nested content\n[data-md-color-scheme=\"default\"] {\n  @extend %root;\n}\n\n// ----------------------------------------------------------------------------\n// Placeholders\n// ----------------------------------------------------------------------------\n\n// Default theme, i.e. light mode\n%root {\n\n  // Default color shades\n  --md-default-fg-color:               hsla(0, 0%, 0%, 0.87);\n  --md-default-fg-color--light:        hsla(0, 0%, 0%, 0.54);\n  --md-default-fg-color--lighter:      hsla(0, 0%, 0%, 0.32);\n  --md-default-fg-color--lightest:     hsla(0, 0%, 0%, 0.07);\n  --md-default-bg-color:               hsla(0, 0%, 100%, 1);\n  --md-default-bg-color--light:        hsla(0, 0%, 100%, 0.7);\n  --md-default-bg-color--lighter:      hsla(0, 0%, 100%, 0.3);\n  --md-default-bg-color--lightest:     hsla(0, 0%, 100%, 0.12);\n\n  // Primary color shades\n  --md-primary-fg-color:               hsla(#{hex2hsl($clr-indigo-500)}, 1);\n  --md-primary-fg-color--light:        hsla(#{hex2hsl($clr-indigo-400)}, 1);\n  --md-primary-fg-color--dark:         hsla(#{hex2hsl($clr-indigo-700)}, 1);\n  --md-primary-bg-color:               hsla(0, 0%, 100%, 1);\n  --md-primary-bg-color--light:        hsla(0, 0%, 100%, 0.7);\n\n  // Accent color shades\n  --md-accent-fg-color:                hsla(#{hex2hsl($clr-indigo-a200)}, 1);\n  --md-accent-fg-color--transparent:   hsla(#{hex2hsl($clr-indigo-a200)}, 0.1);\n  --md-accent-bg-color:                hsla(0, 0%, 100%, 1);\n  --md-accent-bg-color--light:         hsla(0, 0%, 100%, 0.7);\n\n  // Code color shades\n  --md-code-fg-color:                  hsla(200, 18%, 26%, 1);\n  --md-code-bg-color:                  hsla(0, 0%, 96%, 1);\n\n  // Code highlighting color shades\n  --md-code-hl-color:                  hsla(#{hex2hsl($clr-yellow-a200)}, 0.5);\n  --md-code-hl-number-color:           hsla(0, 67%, 50%, 1);\n  --md-code-hl-special-color:          hsla(340, 83%, 47%, 1);\n  --md-code-hl-function-color:         hsla(291, 45%, 50%, 1);\n  --md-code-hl-constant-color:         hsla(250, 63%, 60%, 1);\n  --md-code-hl-keyword-color:          hsla(219, 54%, 51%, 1);\n  --md-code-hl-string-color:           hsla(150, 63%, 30%, 1);\n  --md-code-hl-name-color:             var(--md-code-fg-color);\n  --md-code-hl-operator-color:         var(--md-default-fg-color--light);\n  --md-code-hl-punctuation-color:      var(--md-default-fg-color--light);\n  --md-code-hl-comment-color:          var(--md-default-fg-color--light);\n  --md-code-hl-generic-color:          var(--md-default-fg-color--light);\n  --md-code-hl-variable-color:         var(--md-default-fg-color--light);\n\n  // Typeset color shades\n  --md-typeset-color:                  var(--md-default-fg-color);\n\n  // Typeset `a` color shades\n  --md-typeset-a-color:                var(--md-primary-fg-color);\n\n  // Typeset `mark` color shades\n  --md-typeset-mark-color:             hsla(#{hex2hsl($clr-yellow-a200)}, 0.5);\n\n  // Typeset `del` and `ins` color shades\n  --md-typeset-del-color:              hsla(6, 90%, 60%, 0.15);\n  --md-typeset-ins-color:              hsla(150, 90%, 44%, 0.15);\n\n  // Typeset `kbd` color shades\n  --md-typeset-kbd-color:              hsla(0, 0%, 98%, 1);\n  --md-typeset-kbd-accent-color:       hsla(0, 100%, 100%, 1);\n  --md-typeset-kbd-border-color:       hsla(0, 0%, 72%, 1);\n\n  // Typeset `table` color shades\n  --md-typeset-table-color:            hsla(0, 0%, 0%, 0.12);\n\n  // Admonition color shades\n  --md-admonition-fg-color:            var(--md-default-fg-color);\n  --md-admonition-bg-color:            var(--md-default-bg-color);\n\n  // Footer color shades\n  --md-footer-fg-color:                hsla(0, 0%, 100%, 1);\n  --md-footer-fg-color--light:         hsla(0, 0%, 100%, 0.7);\n  --md-footer-fg-color--lighter:       hsla(0, 0%, 100%, 0.3);\n  --md-footer-bg-color:                hsla(0, 0%, 0%, 0.87);\n  --md-footer-bg-color--dark:          hsla(0, 0%, 0%, 0.32);\n\n  // Shadow depth 1\n  --md-shadow-z1:\n    0 #{px2rem(4px)} #{px2rem(10px)} hsla(0, 0%, 0%, 0.05),\n    0 0              #{px2rem(1px)}  hsla(0, 0%, 0%, 0.1);\n\n  // Shadow depth 2\n  --md-shadow-z2:\n    0 #{px2rem(4px)} #{px2rem(10px)} hsla(0, 0%, 0%, 0.1),\n    0 0              #{px2rem(1px)}  hsla(0, 0%, 0%, 0.25);\n\n  // Shadow depth 3\n  --md-shadow-z3:\n    0 #{px2rem(4px)} #{px2rem(10px)} hsla(0, 0%, 0%, 0.2),\n    0 0              #{px2rem(1px)}  hsla(0, 0%, 0%, 0.35);\n}\n", "////\n/// Copyright (c) 2016-2022 Martin Donath \n///\n/// Permission is hereby granted, free of charge, to any person obtaining a\n/// copy of this software and associated documentation files (the \"Software\"),\n/// to deal in the Software without restriction, including without limitation\n/// the rights to use, copy, modify, merge, publish, distribute, sublicense,\n/// and/or sell copies of the Software, and to permit persons to whom the\n/// Software is furnished to do so, subject to the following conditions:\n///\n/// The above copyright notice and this permission notice shall be included in\n/// all copies or substantial portions of the Software.\n///\n/// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n/// FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL\n/// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n/// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n/// DEALINGS\n////\n\n// ----------------------------------------------------------------------------\n// Rules\n// ----------------------------------------------------------------------------\n\n// Icon\n.md-icon {\n\n  // SVG defaults\n  svg {\n    display: block;\n    width: px2rem(24px);\n    height: px2rem(24px);\n    fill: currentcolor;\n  }\n}\n\n// sphinx-immaterial: change display for inline icons\n.si-icon-inline::before {\n  display: inline-flex;\n  width: px2em(18px);\n  height: px2em(18px);\n  vertical-align: text-top;\n  background-color: var(--md-default-fg-color);\n  content: \"\";\n  mask-repeat: no-repeat;\n  mask-position: center;\n}\n", "////\n/// Copyright (c) 2016-2022 Martin Donath \n///\n/// Permission is hereby granted, free of charge, to any person obtaining a\n/// copy of this software and associated documentation files (the \"Software\"),\n/// to deal in the Software without restriction, including without limitation\n/// the rights to use, copy, modify, merge, publish, distribute, sublicense,\n/// and/or sell copies of the Software, and to permit persons to whom the\n/// Software is furnished to do so, subject to the following conditions:\n///\n/// The above copyright notice and this permission notice shall be included in\n/// all copies or substantial portions of the Software.\n///\n/// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n/// FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL\n/// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n/// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n/// DEALINGS\n////\n\n// ----------------------------------------------------------------------------\n// Rules: font definitions\n// ----------------------------------------------------------------------------\n\n// Enable font-smoothing in Webkit and FF\nbody {\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n\n  // Font with fallback for body copy\n  --md-text-font-family:\n    var(--md-text-font, _),\n    -apple-system, BlinkMacSystemFont, Helvetica, Arial, sans-serif;\n\n  // Font with fallback for code\n  --md-code-font-family:\n    var(--md-code-font, _),\n    SFMono-Regular, Consolas, Menlo, monospace;\n}\n\n// Define default fonts\nbody,\ninput {\n  color: var(--md-typeset-color);\n  font-feature-settings: \"kern\", \"liga\";\n  font-family: var(--md-text-font-family);\n}\n\n// Define monospaced fonts\ncode,\npre,\nkbd {\n  color: var(--md-typeset-color);\n  font-feature-settings: \"kern\";\n  font-family: var(--md-code-font-family);\n}\n\n// ----------------------------------------------------------------------------\n// Rules: typesetted content\n// ----------------------------------------------------------------------------\n\n// General variables\n:root {\n  --md-typeset-table-sort-icon: svg-load(\"material/sort.svg\");\n  --md-typeset-table-sort-icon--asc: svg-load(\"material/sort-ascending.svg\");\n  --md-typeset-table-sort-icon--desc: svg-load(\"material/sort-descending.svg\");\n}\n\n// ----------------------------------------------------------------------------\n\n// Content that is typeset - if possible, all margins, paddings and font sizes\n// should be set in ems, so nested blocks (e.g. admonitions) render correctly.\n.md-typeset {\n  font-size: px2rem(16px);\n  line-height: 1.6;\n  color-adjust: exact;\n\n  // [print]: We'll use a smaller `font-size` for printing, so code examples\n  // don't break too early, and `16px` looks too big anyway.\n  @media print {\n    font-size: px2rem(13.6px);\n  }\n\n  // Default spacing\n  ul,\n  ol,\n  dl,\n  figure,\n  blockquote,\n  pre {\n    margin-block: 1em;\n  }\n\n  // Headline on level 1\n  h1 {\n    margin: 0 0 px2em(40px, 32px);\n    color: var(--md-default-fg-color--light);\n    font-weight: 300;\n    font-size: px2em(32px);\n    line-height: 1.3;\n    letter-spacing: -0.01em;\n  }\n\n  // Headline on level 2\n  h2 {\n    margin: px2em(40px, 25px) 0 px2em(16px, 25px);\n    font-weight: 300;\n    font-size: px2em(25px);\n    line-height: 1.4;\n    letter-spacing: -0.01em;\n  }\n\n  // Headline on level 3\n  h3 {\n    margin: px2em(32px, 20px) 0 px2em(16px, 20px);\n    font-weight: 400;\n    font-size: px2em(20px);\n    line-height: 1.5;\n    letter-spacing: -0.01em;\n  }\n\n  // Headline on level 3 following level 2\n  h2 + h3 {\n    margin-top: px2em(16px, 20px);\n  }\n\n  // Headline on level 4\n  h4 {\n    margin: px2em(16px) 0;\n    font-weight: 700;\n    letter-spacing: -0.01em;\n  }\n\n  // Headline on level 5-6\n  h5,\n  h6 {\n    margin: px2em(16px, 12.8px) 0;\n    color: var(--md-default-fg-color--light);\n    font-weight: 700;\n    font-size: px2em(12.8px);\n    letter-spacing: -0.01em;\n  }\n\n  // Headline on level 5\n  h5 {\n    text-transform: uppercase;\n  }\n\n  // Horizontal separator\n  hr {\n    display: flow-root;\n    margin: 1.5em 0;\n    border-bottom: px2rem(1px) solid var(--md-default-fg-color--lightest);\n  }\n\n  // Text link\n  a {\n    color: var(--md-typeset-a-color);\n    word-break: break-word;\n\n    // Also enable color transition on pseudo elements\n    &,\n    &::before {\n      transition: color 125ms;\n    }\n\n    // Text link on focus/hover\n    &:focus,\n    &:hover {\n      color: var(--md-accent-fg-color);\n\n      // Inline code block\n      code {\n        background-color: var(--md-accent-fg-color--transparent);\n      }\n    }\n\n    // Inline code block\n    code {\n      color: currentcolor;\n      transition: background-color 125ms;\n    }\n\n    // Show outline for keyboard devices\n    &.focus-visible {\n      outline-color: var(--md-accent-fg-color);\n      outline-offset: px2rem(4px);\n    }\n  }\n\n  // Code block\n  code,\n  pre,\n  kbd {\n    color: var(--md-code-fg-color);\n    direction: ltr;\n    font-variant-ligatures: none;\n\n    // [print]: Wrap text and hide scollbars\n    @media print {\n      white-space: pre-wrap;\n    }\n  }\n\n  // Inline code block\n  code {\n    padding: 0 px2em(4px, 13.6px);\n    font-size: px2em(13.6px);\n    word-break: break-word;\n    background-color: var(--md-code-bg-color);\n    border-radius: px2rem(2px);\n    box-decoration-break: clone;\n\n    // Hide outline for pointer devices\n    &:not(.focus-visible) {\n      outline: none;\n      -webkit-tap-highlight-color: transparent;\n    }\n  }\n\n  // Unformatted content\n  pre {\n    position: relative;\n    display: flow-root;\n    line-height: 1.4;\n\n    // Code block\n    > code {\n      display: block;\n      margin: 0;\n      padding: px2em(10.5px, 13.6px) px2em(16px, 13.6px);\n      overflow: auto;\n      word-break: normal;\n      outline-color: var(--md-accent-fg-color);\n      box-shadow: none;\n      box-decoration-break: slice;\n      touch-action: auto;\n      scrollbar-width: thin;\n      scrollbar-color: var(--md-default-fg-color--lighter) transparent;\n\n      // Code block on hover\n      &:hover {\n        scrollbar-color: var(--md-accent-fg-color) transparent;\n      }\n\n      // Webkit scrollbar\n      &::-webkit-scrollbar {\n        width: px2rem(4px);\n        height: px2rem(4px);\n      }\n\n      // Webkit scrollbar thumb\n      &::-webkit-scrollbar-thumb {\n        background-color: var(--md-default-fg-color--lighter);\n\n        // Webkit scrollbar thumb on hover\n        &:hover {\n          background-color: var(--md-accent-fg-color);\n        }\n      }\n    }\n  }\n\n  // sphinx-immaterial: reset margin for code-blocks with a caption\n  .code-block-caption + .notranslate {\n    pre,\n    .highlighttable {\n      margin-top: 0;\n    }\n  }\n\n  // Keyboard key\n  kbd {\n    display: inline-block;\n    padding: 0 px2em(8px, 12px);\n    color: var(--md-default-fg-color);\n    font-size: px2em(12px);\n    vertical-align: text-top;\n    word-break: break-word;\n    background-color: var(--md-typeset-kbd-color);\n    border-radius: px2rem(2px);\n    box-shadow:\n      0 px2rem(2px)  0 px2rem(1px) var(--md-typeset-kbd-border-color),\n      0 px2rem(2px)  0             var(--md-typeset-kbd-border-color),\n      0 px2rem(-2px) px2rem(4px)   var(--md-typeset-kbd-accent-color) inset;\n  }\n\n  // Text highlighting marker\n  mark {\n    color: inherit;\n    word-break: break-word;\n    background-color: var(--md-typeset-mark-color);\n    box-decoration-break: clone;\n  }\n\n  // Abbreviation\n  abbr {\n    text-decoration: none;\n    border-bottom: px2rem(1px) dotted var(--md-default-fg-color--light);\n    cursor: help;\n\n    // Show tooltip for touch devices\n    @media (hover: none) {\n      position: relative;\n\n      // Tooltip\n      &[title]:is(:focus, :hover)::after {\n        position: absolute;\n        inset-inline-start: 0;\n        display: inline-block;\n        width: auto;\n        min-width: max-content;\n        max-width: 80%;\n        margin-top: 2em;\n        padding: px2rem(4px) px2rem(6px);\n        color: var(--md-default-bg-color);\n        font-size: px2rem(14px);\n        background-color: var(--md-default-fg-color);\n        border-radius: px2rem(2px);\n        box-shadow: var(--md-shadow-z3);\n        content: attr(title);\n      }\n    }\n  }\n\n  // Small text\n  small {\n    opacity: 0.75;\n  }\n\n  // Superscript and subscript\n  sup,\n  sub {\n    margin-inline-start: px2em(1px, 12.8px);\n  }\n\n  // Blockquotes, possibly nested\n  blockquote {\n    padding-inline-start: px2rem(12px);\n    margin-inline: 0;\n    color: var(--md-default-fg-color--light);\n    border-inline-start: px2rem(4px) solid var(--md-default-fg-color--lighter);\n  }\n\n  // Unordered list\n  ul {\n    list-style-type: disc;\n  }\n\n  // Unordered and ordered list\n  ul,\n  ol {\n    margin-inline-start: px2em(10px);\n    padding: 0;\n\n    // Adjust display mode if not hidden\n    &:not([hidden]) {\n      display: flow-root;\n    }\n\n    // Nested ordered list\n    ol {\n      list-style-type: lower-alpha;\n\n      // Triply nested ordered list\n      ol {\n        list-style-type: lower-roman;\n      }\n    }\n\n    // List element\n    li {\n      margin-bottom: 0.5em;\n      margin-inline-start: px2em(20px);\n\n      // Adjust spacing\n      p,\n      blockquote {\n        margin: 0.5em 0;\n      }\n\n      // Adjust spacing on last child\n      &:last-child {\n        margin-bottom: 0;\n      }\n\n      // Nested list\n      :is(ul, ol) {\n        margin-block: 0.5em;\n        margin-inline-start: px2em(10px);\n      }\n    }\n  }\n\n  // Definition list\n  dd {\n    margin-block: 1em 1.5em;\n    margin-inline-start: px2em(30px);\n  }\n\n  // Image or video\n  img,\n  svg,\n  video {\n    max-width: 100%;\n    height: auto;\n  }\n\n  // Image\n  img {\n\n    // Adjust spacing when left-aligned\n    &[align=\"left\"] {\n      margin: 1em;\n      margin-left: 0;\n    }\n\n    // Adjust spacing when right-aligned\n    &[align=\"right\"] {\n      margin: 1em;\n      margin-right: 0;\n    }\n\n    // Adjust spacing when sole children\n    &[align]:only-child {\n      margin-top: 0;\n    }\n\n    // Hide images for dark mode\n    &[src$=\"#only-dark\"],\n    &[src$=\"#gh-dark-mode-only\"] {\n      display: none;\n    }\n  }\n\n  // Figure\n  figure {\n    display: flow-root;\n    width: fit-content;\n    max-width: 100%;\n    margin: 1em auto;\n    text-align: center;\n\n    // Figure images\n    img {\n      display: block;\n    }\n  }\n\n  // Figure caption\n  figcaption {\n    max-width: px2rem(480px);\n    margin: 1em auto;\n    font-style: italic;\n  }\n\n  // Limit width to container\n  iframe {\n    max-width: 100%;\n  }\n\n  // Data table\n  table.data:not(.plain) {\n    // sphinx-immaterial: set `display: block` rather than `display:\n    // inline-block` in order to allow center and right alignment to\n    // work.\n    display: block;\n    // sphinx-immaterial: set `width: max-content;` to ensure the\n    // table doesn't always fill the full width of its parent, as\n    // happens by default with `display: block`.\n    width: max-content;\n    max-width: 100%;\n    overflow: auto;\n    font-size: px2rem(12.8px);\n    background-color: var(--md-default-bg-color);\n    border: px2rem(1px) solid var(--md-typeset-table-color);\n    border-radius: px2rem(2px);\n    touch-action: auto;\n\n    // [print]: Reset display mode so table header wraps when printing\n    @media print {\n      display: table;\n    }\n\n    // Due to margin collapse because of the necessary inline-block hack, we\n    // cannot increase the bottom margin on the table, so we just increase the\n    // top margin on the following element\n    + * {\n      margin-top: 1.5em;\n    }\n\n    // Elements in table heading and cell\n    :is(th, td) > * {\n\n      // Adjust spacing on first child\n      &:first-child {\n        margin-top: 0;\n      }\n\n      // Adjust spacing on last child\n      &:last-child {\n        margin-bottom: 0;\n      }\n    }\n\n    // Table heading and cell\n    :is(th, td):not([align], .align-center, .align-left, .align-right) {\n      text-align: left;\n\n      // Adjust for right-to-left languages\n      [dir=\"rtl\"] & {\n        text-align: right;\n      }\n    }\n\n    // Table heading\n    th {\n      min-width: px2rem(100px);\n      padding: px2em(12px, 12.8px) px2em(16px, 12.8px);\n      font-weight: 700;\n      vertical-align: top;\n    }\n\n    // Table cell\n    td {\n      padding: px2em(12px, 12.8px) px2em(16px, 12.8px);\n      vertical-align: top;\n      border-top: px2rem(1px) solid var(--md-typeset-table-color);\n    }\n\n    // Table body row\n    tbody tr {\n      transition: background-color 125ms;\n\n      // Table row on hover\n      &:hover {\n        background-color: rgba(0, 0, 0, 0.035);\n        box-shadow: 0 px2rem(1px) 0 var(--md-default-bg-color) inset;\n      }\n    }\n\n    // Text link in table\n    a {\n      word-break: normal;\n    }\n  }\n\n  // Sortable table\n  table th[role=\"columnheader\"] {\n    cursor: pointer;\n\n    // Sort icon\n    &::after {\n      display: inline-block;\n      width: 1.2em;\n      height: 1.2em;\n      margin-inline-start: 0.5em;\n      vertical-align: text-bottom;\n      mask-image: var(--md-typeset-table-sort-icon);\n      mask-repeat: no-repeat;\n      mask-size: contain;\n      transition: background-color 125ms;\n      content: \"\";\n    }\n\n    // Show sort icon on hover\n    &:hover::after {\n      background-color: var(--md-default-fg-color--lighter);\n    }\n\n    // Sort ascending icon\n    &[aria-sort=\"ascending\"]::after {\n      background-color: var(--md-default-fg-color--light);\n      mask-image: var(--md-typeset-table-sort-icon--asc);\n    }\n\n    // Sort descending icon\n    &[aria-sort=\"descending\"]::after {\n      background-color: var(--md-default-fg-color--light);\n      mask-image: var(--md-typeset-table-sort-icon--desc);\n    }\n  }\n\n  // Data table scroll wrapper\n  &__scrollwrap {\n    margin: 1em px2rem(-16px);\n    overflow-x: auto;\n    touch-action: auto;\n  }\n\n  // Data table wrapper\n  &__table {\n    display: inline-block;\n    margin-bottom: 0.5em;\n    padding: 0 px2rem(16px);\n\n    // [print]: Reset display mode so table header wraps when printing\n    @media print {\n      display: block;\n    }\n\n    // Data table\n    html & table {\n      display: table;\n      width: 100%;\n      margin: 0;\n      overflow: hidden;\n    }\n  }\n}\n\n// ----------------------------------------------------------------------------\n// Rules: top-level\n// ----------------------------------------------------------------------------\n\n// [mobile -]: Align with body copy\n@include break-to-device(mobile) {\n\n  // Top-level unformatted content\n  .md-content__inner > pre {\n    margin: 1em px2rem(-16px);\n\n    // Code block\n    code {\n      border-radius: 0;\n    }\n  }\n}\n", "////\n/// Copyright (c) 2016-2022 Martin Donath \n///\n/// Permission is hereby granted, free of charge, to any person obtaining a\n/// copy of this software and associated documentation files (the \"Software\"),\n/// to deal in the Software without restriction, including without limitation\n/// the rights to use, copy, modify, merge, publish, distribute, sublicense,\n/// and/or sell copies of the Software, and to permit persons to whom the\n/// Software is furnished to do so, subject to the following conditions:\n///\n/// The above copyright notice and this permission notice shall be included in\n/// all copies or substantial portions of the Software.\n///\n/// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n/// FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL\n/// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n/// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n/// DEALINGS\n////\n\n@use \"sass:list\";\n@use \"sass:map\";\n@use \"sass:math\";\n\n// ----------------------------------------------------------------------------\n// Variables\n// ----------------------------------------------------------------------------\n\n///\n/// Device-specific breakpoints\n///\n/// @example\n///   $break-devices: (\n///     mobile: (\n///       portrait:  220px  479px,\n///       landscape: 480px  719px\n///     ),\n///     tablet: (\n///       portrait:  720px  959px,\n///       landscape: 960px  1219px\n///     ),\n///     screen: (\n///       small:     1220px 1599px,\n///       medium:    1600px 1999px,\n///       large:     2000px\n///     )\n///   );\n///\n$break-devices: () !default;\n\n// ----------------------------------------------------------------------------\n// Helpers\n// ----------------------------------------------------------------------------\n\n///\n/// Choose minimum and maximum device widths\n///\n@function break-select-min-max($devices) {\n  $min: 1000000;\n  $max: 0;\n  @each $key, $value in $devices {\n    @while type-of($value) == map {\n      $value: break-select-min-max($value);\n    }\n    @if type-of($value) == list {\n      @each $number in $value {\n        @if type-of($number) == number {\n          $min: math.min($number, $min);\n          @if $max {\n            $max: math.max($number, $max);\n          }\n        } @else {\n          @error \"Invalid number: #{$number}\";\n        }\n      }\n    } @else if type-of($value) == number {\n      $min: math.min($value, $min);\n      $max: null;\n    } @else {\n      @error \"Invalid value: #{$value}\";\n    }\n  }\n  @return $min, $max;\n}\n\n///\n/// Select minimum and maximum widths for a device breakpoint\n///\n@function break-select-device($device) {\n  $current: $break-devices;\n  @for $n from 1 through length($device) {\n    @if type-of($current) == map {\n      $current: map.get($current, list.nth($device, $n));\n    } @else {\n      @error \"Invalid device map: #{$devices}\";\n    }\n  }\n  @if type-of($current) == list or type-of($current) == number {\n    $current: (default: $current);\n  }\n  @return break-select-min-max($current);\n}\n\n// ----------------------------------------------------------------------------\n// Mixins\n// ----------------------------------------------------------------------------\n\n///\n/// A minimum-maximum media query breakpoint\n///\n@mixin break-at($breakpoint) {\n  @if type-of($breakpoint) == number {\n    @media screen and (min-width: $breakpoint) {\n      @content;\n    }\n  } @else if type-of($breakpoint) == list {\n    $min: list.nth($breakpoint, 1);\n    $max: list.nth($breakpoint, 2);\n    @if type-of($min) == number and type-of($max) == number {\n      @media screen and (min-width: $min) and (max-width: $max) {\n        @content;\n      }\n    } @else {\n      @error \"Invalid breakpoint: #{$breakpoint}\";\n    }\n  } @else {\n    @error \"Invalid breakpoint: #{$breakpoint}\";\n  }\n}\n\n///\n/// An orientation media query breakpoint\n///\n@mixin break-at-orientation($breakpoint) {\n  @if type-of($breakpoint) == string {\n    @media screen and (orientation: $breakpoint) {\n      @content;\n    }\n  } @else {\n    @error \"Invalid breakpoint: #{$breakpoint}\";\n  }\n}\n\n///\n/// A maximum-aspect-ratio media query breakpoint\n///\n@mixin break-at-ratio($breakpoint) {\n  @if type-of($breakpoint) == number {\n    @media screen and (max-aspect-ratio: $breakpoint) {\n      @content;\n    }\n  } @else {\n    @error \"Invalid breakpoint: #{$breakpoint}\";\n  }\n}\n\n///\n/// A minimum-maximum media query device breakpoint\n///\n@mixin break-at-device($device) {\n  @if type-of($device) == string {\n    $device: $device,;\n  }\n  @if type-of($device) == list {\n    $breakpoint: break-select-device($device);\n    @if list.nth($breakpoint, 2) {\n      $min: list.nth($breakpoint, 1);\n      $max: list.nth($breakpoint, 2);\n\n      @media screen and (min-width: $min) and (max-width: $max) {\n        @content;\n      }\n    } @else {\n      @error \"Invalid device: #{$device}\";\n    }\n  } @else {\n    @error \"Invalid device: #{$device}\";\n  }\n}\n\n///\n/// A minimum media query device breakpoint\n///\n@mixin break-from-device($device) {\n  @if type-of($device) == string {\n    $device: $device,;\n  }\n  @if type-of($device) == list {\n    $breakpoint: break-select-device($device);\n    $min: list.nth($breakpoint, 1);\n\n    @media screen and (min-width: $min) {\n      @content;\n    }\n  } @else {\n    @error \"Invalid device: #{$device}\";\n  }\n}\n\n///\n/// A maximum media query device breakpoint\n///\n@mixin break-to-device($device) {\n  @if type-of($device) == string {\n    $device: $device,;\n  }\n  @if type-of($device) == list {\n    $breakpoint: break-select-device($device);\n    $max: list.nth($breakpoint, 2);\n\n    @media screen and (max-width: $max) {\n      @content;\n    }\n  } @else {\n    @error \"Invalid device: #{$device}\";\n  }\n}\n", "////\n/// Copyright (c) 2016-2022 Martin Donath \n///\n/// Permission is hereby granted, free of charge, to any person obtaining a\n/// copy of this software and associated documentation files (the \"Software\"),\n/// to deal in the Software without restriction, including without limitation\n/// the rights to use, copy, modify, merge, publish, distribute, sublicense,\n/// and/or sell copies of the Software, and to permit persons to whom the\n/// Software is furnished to do so, subject to the following conditions:\n///\n/// The above copyright notice and this permission notice shall be included in\n/// all copies or substantial portions of the Software.\n///\n/// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n/// FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL\n/// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n/// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n/// DEALINGS\n////\n\n// ----------------------------------------------------------------------------\n// Rules\n// ----------------------------------------------------------------------------\n\n// Banner for announcements and warnings\n.md-banner {\n  overflow: auto;\n  color: var(--md-footer-fg-color);\n  background-color: var(--md-footer-bg-color);\n\n  // [print]: Hide banner\n  @media print {\n    display: none;\n  }\n\n  // Banner with warning\n  &--warning {\n    color: var(--md-default-fg-color);\n    background: var(--md-typeset-mark-color);\n  }\n\n  // Banner wrapper\n  &__inner {\n    margin: px2rem(12px) auto;\n    padding: 0 px2rem(16px);\n    font-size: px2rem(14px);\n  }\n\n  // Banner button\n  &__button {\n    float: inline-end;\n    color: inherit;\n    cursor: pointer;\n    transition: opacity 250ms;\n\n    // Button on hover\n    &:hover {\n      opacity: 0.7;\n    }\n  }\n}\n", "////\n/// Copyright (c) 2016-2022 Martin Donath \n///\n/// Permission is hereby granted, free of charge, to any person obtaining a\n/// copy of this software and associated documentation files (the \"Software\"),\n/// to deal in the Software without restriction, including without limitation\n/// the rights to use, copy, modify, merge, publish, distribute, sublicense,\n/// and/or sell copies of the Software, and to permit persons to whom the\n/// Software is furnished to do so, subject to the following conditions:\n///\n/// The above copyright notice and this permission notice shall be included in\n/// all copies or substantial portions of the Software.\n///\n/// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n/// FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL\n/// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n/// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n/// DEALINGS\n////\n\n// ----------------------------------------------------------------------------\n// Rules: base grid and containers\n// ----------------------------------------------------------------------------\n\n// Stretch container to viewport and set base `font-size`\nhtml {\n  height: 100%;\n  overflow-x: hidden;\n  // Hack: normally, we would set the base `font-size` to `62.5%`, so we can\n  // base all calculations on `10px`, but Chromium and Chrome define a minimal\n  // `font-size` of `12px` if the system language is set to Chinese. For this\n  // reason we just double the `font-size` and set it to `20px`.\n  //\n  // See https://github.com/squidfunk/mkdocs-material/issues/911\n  font-size: 125%;\n\n  // [screen medium +]: Set base `font-size` to `11px`\n  @include break-from-device(screen medium) {\n    font-size: 137.5%;\n  }\n\n  // [screen large +]: Set base `font-size` to `12px`\n  @include break-from-device(screen large) {\n    font-size: 150%;\n  }\n}\n\n// Stretch body to container - flexbox is used, so the footer will always be\n// aligned to the bottom of the viewport\nbody {\n  position: relative;\n  display: flex;\n  flex-direction: column;\n  width: 100%;\n  min-height: 100%;\n  // Hack: reset `font-size` to `10px`, so the spacing for all inline elements\n  // is correct again. Otherwise the spacing would be based on `20px`.\n  font-size: px2rem(10px);\n  background-color: var(--md-default-bg-color);\n\n  // [print]: Omit flexbox layout due to a Firefox bug (https://mzl.la/39DgR3m)\n  @media print {\n    display: block;\n  }\n\n  // Body in locked state\n  &[data-md-scrolllock] {\n\n    // [tablet portrait -]: Omit scroll bubbling\n    @include break-to-device(tablet portrait) {\n      position: fixed;\n    }\n  }\n}\n\n// ----------------------------------------------------------------------------\n\n// Grid container - this class is applied to wrapper elements within the\n// header, content area and footer, and makes sure that their width is limited\n// to `1220px`, and they are rendered centered if the screen is larger.\n.md-grid {\n  max-width: px2rem(1220px);\n  margin-inline: auto;\n}\n\n// Main container\n.md-container {\n  display: flex;\n  flex-direction: column;\n  flex-grow: 1;\n\n  // [print]: Omit flexbox layout due to a Firefox bug (https://mzl.la/39DgR3m)\n  @media print {\n    display: block;\n  }\n}\n\n// Main area - stretch to remaining space of container\n.md-main {\n  flex-grow: 1;\n\n  // Main area wrapper\n  &__inner {\n    display: flex;\n    height: 100%;\n    margin-top: px2rem(24px + 6px);\n  }\n}\n\n// Add ellipsis in case of overflowing text\n.md-ellipsis {\n  overflow: hidden;\n  white-space: nowrap;\n  text-overflow: ellipsis;\n}\n\n// ----------------------------------------------------------------------------\n// Rules: navigational elements\n// ----------------------------------------------------------------------------\n\n// Toggle - this class is applied to checkbox elements, which are used to\n// implement the CSS-only drawer and navigation, as well as the search\n.md-toggle {\n  display: none;\n}\n\n// Option - this class is applied to radio elements, which are used to\n// implement the color palette toggle\n.md-option {\n  position: absolute;\n  width: 0;\n  height: 0;\n  opacity: 0;\n\n  // Option label for checked radio button\n  &:checked + label:not([hidden]) {\n    display: block;\n  }\n\n  // Show outline for keyboard devices\n  &.focus-visible + label {\n    outline-style: auto;\n    outline-color: var(--md-accent-fg-color);\n  }\n}\n\n// Skip link\n.md-skip {\n  position: fixed;\n  // Hack: if we don't set the negative `z-index`, the skip link will force the\n  // creation of new layers when code blocks are near the header on scrolling\n  z-index: -1;\n  margin: px2rem(10px);\n  padding: px2rem(6px) px2rem(10px);\n  color: var(--md-default-bg-color);\n  font-size: px2rem(12.8px);\n  background-color: var(--md-default-fg-color);\n  border-radius: px2rem(2px);\n  outline-color: var(--md-accent-fg-color);\n  transform: translateY(px2rem(8px));\n  opacity: 0;\n\n  // Show skip link on focus\n  &:focus {\n    z-index: 10;\n    transform: translateY(0);\n    opacity: 1;\n    transition:\n      transform 250ms cubic-bezier(0.4, 0, 0.2, 1),\n      opacity   175ms 75ms;\n  }\n}\n\n// ----------------------------------------------------------------------------\n// Rules: print styles\n// ----------------------------------------------------------------------------\n\n// Add margins to page\n@page {\n  margin: 25mm;\n}\n", "////\n/// Copyright (c) 2016-2022 Martin Donath \n///\n/// Permission is hereby granted, free of charge, to any person obtaining a\n/// copy of this software and associated documentation files (the \"Software\"),\n/// to deal in the Software without restriction, including without limitation\n/// the rights to use, copy, modify, merge, publish, distribute, sublicense,\n/// and/or sell copies of the Software, and to permit persons to whom the\n/// Software is furnished to do so, subject to the following conditions:\n///\n/// The above copyright notice and this permission notice shall be included in\n/// all copies or substantial portions of the Software.\n///\n/// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n/// FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL\n/// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n/// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n/// DEALINGS\n////\n\n// ----------------------------------------------------------------------------\n// Rules\n// ----------------------------------------------------------------------------\n\n// Clipboard button variables\n:root {\n  --md-clipboard-icon: svg-load(\"material/content-copy.svg\");\n}\n\n// ----------------------------------------------------------------------------\n\n// Clipboard button\n.md-clipboard {\n  position: absolute;\n  top: px2em(8px);\n  right: px2em(8px);\n  z-index: 1;\n  width: px2em(24px);\n  height: px2em(24px);\n  color: var(--md-default-fg-color--lightest);\n  border-radius: px2rem(2px);\n  outline-color: var(--md-accent-fg-color);\n  outline-offset: px2rem(2px);\n  cursor: pointer;\n  transition: color 250ms;\n\n  // [print]: Hide button\n  @media print {\n    display: none;\n  }\n\n  // Hide outline for pointer devices\n  &:not(.focus-visible) {\n    outline: none;\n    -webkit-tap-highlight-color: transparent;\n  }\n\n  // Darken color on code block hover\n  :hover > & {\n    color: var(--md-default-fg-color--light);\n  }\n\n  // Button on focus/hover\n  &:is(:focus, :hover) {\n    color: var(--md-accent-fg-color);\n  }\n\n  // Button icon - the width and height are defined in `em`, so the size is\n  // automatically adjusted for nested code blocks (e.g. in admonitions)\n  &::after {\n    display: block;\n    width: px2em(18px);\n    height: px2em(18px);\n    margin: 0 auto;\n    background-color: currentcolor;\n    mask-image: var(--md-clipboard-icon);\n    mask-position: center;\n    mask-repeat: no-repeat;\n    mask-size: contain;\n    content: \"\";\n  }\n\n  // Inline clipboard button\n  &--inline {\n    cursor: pointer;\n\n    // Code block\n    code {\n      transition:\n        color            250ms,\n        background-color 250ms;\n    }\n\n    // Code block on focus/hover\n    &:is(:focus, :hover) code {\n      color: var(--md-accent-fg-color);\n      background-color: var(--md-accent-fg-color--transparent);\n    }\n  }\n}\n", "////\n/// Copyright (c) 2016-2022 Martin Donath \n///\n/// Permission is hereby granted, free of charge, to any person obtaining a\n/// copy of this software and associated documentation files (the \"Software\"),\n/// to deal in the Software without restriction, including without limitation\n/// the rights to use, copy, modify, merge, publish, distribute, sublicense,\n/// and/or sell copies of the Software, and to permit persons to whom the\n/// Software is furnished to do so, subject to the following conditions:\n///\n/// The above copyright notice and this permission notice shall be included in\n/// all copies or substantial portions of the Software.\n///\n/// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n/// FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL\n/// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n/// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n/// DEALINGS\n////\n\n// ----------------------------------------------------------------------------\n// Keyframes\n// ----------------------------------------------------------------------------\n\n// Show consent\n@keyframes consent {\n  0% {\n    transform: translateY(100%);\n    opacity: 0;\n  }\n\n  100% {\n    transform: translateY(0);\n    opacity: 1;\n  }\n}\n\n// Show consent overlay\n@keyframes overlay {\n  0% {\n    opacity: 0;\n  }\n\n  100% {\n    opacity: 1;\n  }\n}\n\n// ----------------------------------------------------------------------------\n// Rules\n// ----------------------------------------------------------------------------\n\n// Consent\n.md-consent {\n\n  // Consent overlay\n  &__overlay {\n    position: fixed;\n    top: 0;\n    z-index: 5;\n    width: 100%;\n    height: 100%;\n    background-color: hsla(0, 0%, 0%, 0.54);\n    opacity: 1;\n    backdrop-filter: blur(px2rem(2px));\n    animation: overlay 250ms both;\n  }\n\n  // Consent wrapper\n  &__inner {\n    position: fixed;\n    bottom: 0;\n    z-index: 5;\n    width: 100%;\n    max-height: 100%;\n    padding: 0;\n    overflow: auto;\n    background-color: var(--md-default-bg-color);\n    border: 0;\n    border-radius: px2rem(2px);\n    box-shadow:\n      0 0           px2rem(4px) rgba(0, 0, 0, 0.1),\n      0 px2rem(4px) px2rem(8px) rgba(0, 0, 0, 0.2);\n    animation: consent 500ms cubic-bezier(0.1, 0.7, 0.1, 1) both;\n  }\n\n  // Consent form\n  &__form {\n    padding: px2rem(16px);\n  }\n\n  // Consent settings\n  &__settings {\n    display: none;\n    margin: 1em 0;\n\n    // Show settings\n    input:checked + & {\n      display: block;\n    }\n  }\n\n  // Consent controls\n  &__controls {\n    margin-bottom: px2rem(16px);\n\n    // Consent control button\n    .md-typeset & .md-button {\n      display: inline;\n\n      // [tablet +]: Align buttons horizontally\n      @include break-to-device(mobile) {\n        display: block;\n        width: 100%;\n        margin-top: px2rem(8px);\n        text-align: center;\n      }\n    }\n  }\n\n  // Ensure users realize that labels are clickab\u00f6e\n  label {\n    cursor: pointer;\n  }\n}\n", "////\n/// Copyright (c) 2016-2022 Martin Donath \n///\n/// Permission is hereby granted, free of charge, to any person obtaining a\n/// copy of this software and associated documentation files (the \"Software\"),\n/// to deal in the Software without restriction, including without limitation\n/// the rights to use, copy, modify, merge, publish, distribute, sublicense,\n/// and/or sell copies of the Software, and to permit persons to whom the\n/// Software is furnished to do so, subject to the following conditions:\n///\n/// The above copyright notice and this permission notice shall be included in\n/// all copies or substantial portions of the Software.\n///\n/// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n/// FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL\n/// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n/// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n/// DEALINGS\n////\n\n// ----------------------------------------------------------------------------\n// Rules\n// ----------------------------------------------------------------------------\n\n// Content area\n.md-content {\n  flex-grow: 1;\n  // Hack: we must use `min-width: 0`, so the content area is capped by the\n  // dimensions of its parent. Otherwise, long code blocks might lead to a\n  // wider content area which will overflow. See https://bit.ly/3bP3f8k\n  min-width: 0;\n\n  // Content wrapper\n  &__inner {\n    margin: 0 px2rem(16px) px2rem(24px);\n    padding-top: px2rem(12px);\n\n    // [screen +]: Adjust spacing between content area and sidebars\n    @include break-from-device(screen) {\n\n      // Sidebar with navigation is visible\n      .md-sidebar--primary:not([hidden]) ~ .md-content > & {\n        margin-inline-start: px2rem(24px);\n      }\n\n      // Sidebar with table of contents is visible\n      .md-sidebar--secondary:not([hidden]) ~ .md-content > & {\n        margin-inline-end: px2rem(24px);\n      }\n    }\n\n    // Hack: add pseudo element for spacing, as the overflow of the content\n    // container may not be hidden due to an imminent offset error on targets\n    &::before {\n      display: block;\n      height: px2rem(8px);\n      content: \"\";\n    }\n\n    // Adjust spacing on last child\n    > :last-child {\n      margin-bottom: 0;\n    }\n  }\n\n  // Button inside of the content area - these buttons are meant for actions on\n  // a document-level, i.e. linking to related source code files, printing etc.\n  &__button {\n    float: inline-end;\n    margin: px2rem(8px) 0;\n    margin-inline-start: px2rem(8px);\n    padding: 0;\n\n    // [print]: Hide buttons\n    @media print {\n      display: none;\n    }\n\n    // Adjust default link color for icons\n    .md-typeset & {\n      color: var(--md-default-fg-color--lighter);\n    }\n\n    // Align with body copy located next to icon\n    svg {\n      display: inline;\n      vertical-align: top;\n\n      // Adjust for right-to-left languages\n      [dir=\"rtl\"] & {\n        transform: scaleX(-1);\n      }\n    }\n  }\n}\n", "////\n/// Copyright (c) 2016-2022 Martin Donath \n///\n/// Permission is hereby granted, free of charge, to any person obtaining a\n/// copy of this software and associated documentation files (the \"Software\"),\n/// to deal in the Software without restriction, including without limitation\n/// the rights to use, copy, modify, merge, publish, distribute, sublicense,\n/// and/or sell copies of the Software, and to permit persons to whom the\n/// Software is furnished to do so, subject to the following conditions:\n///\n/// The above copyright notice and this permission notice shall be included in\n/// all copies or substantial portions of the Software.\n///\n/// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n/// FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL\n/// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n/// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n/// DEALINGS\n////\n\n// ----------------------------------------------------------------------------\n// Rules\n// ----------------------------------------------------------------------------\n\n// Dialog\n.md-dialog {\n  position: fixed;\n  inset-inline-end: px2rem(16px);\n  bottom: px2rem(16px);\n  z-index: 4;\n  min-width: px2rem(222px);\n  padding: px2rem(8px) px2rem(12px);\n  background-color: var(--md-default-fg-color);\n  border-radius: px2rem(2px);\n  box-shadow: var(--md-shadow-z3);\n  transform: translateY(100%);\n  opacity: 0;\n  transition:\n    transform 0ms   400ms,\n    opacity   400ms;\n  pointer-events: none;\n\n  // [print]: Hide dialog\n  @media print {\n    display: none;\n  }\n\n  // Active dialog\n  &--active {\n    transform: translateY(0);\n    opacity: 1;\n    transition:\n      transform 400ms cubic-bezier(0.075, 0.85, 0.175, 1),\n      opacity   400ms;\n    pointer-events: initial;\n  }\n\n  // Dialog wrapper\n  &__inner {\n    color: var(--md-default-bg-color);\n    font-size: px2rem(14px);\n  }\n}\n", "////\n/// Copyright (c) 2016-2022 Martin Donath \n///\n/// Permission is hereby granted, free of charge, to any person obtaining a\n/// copy of this software and associated documentation files (the \"Software\"),\n/// to deal in the Software without restriction, including without limitation\n/// the rights to use, copy, modify, merge, publish, distribute, sublicense,\n/// and/or sell copies of the Software, and to permit persons to whom the\n/// Software is furnished to do so, subject to the following conditions:\n///\n/// The above copyright notice and this permission notice shall be included in\n/// all copies or substantial portions of the Software.\n///\n/// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n/// FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL\n/// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n/// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n/// DEALINGS\n////\n\n// ----------------------------------------------------------------------------\n// Rules\n// ----------------------------------------------------------------------------\n\n// Was this page helpful?\n.md-feedback {\n  margin: 2em 0 1em;\n  text-align: center;\n\n  // Feedback fieldset\n  fieldset {\n    margin: 0;\n    padding: 0;\n    border: none;\n  }\n\n  // Feedback title\n  &__title {\n    margin: 1em auto;\n    font-weight: 700;\n  }\n\n  // Feedback wrapper\n  &__inner {\n    position: relative;\n  }\n\n  // Feedback list\n  &__list {\n    position: relative;\n    display: flex;\n    flex-wrap: wrap;\n    align-content: baseline;\n    justify-content: center;\n\n    // Feedback icon on hover\n    &:hover .md-icon:not(:disabled) {\n      color: var(--md-default-fg-color--lighter);\n    }\n\n    // Adjust height after submission\n    :disabled & {\n      min-height: px2rem(36px);\n    }\n  }\n\n  // Feedback icon\n  &__icon {\n    flex-shrink: 0;\n    margin: 0 px2rem(2px);\n    color: var(--md-default-fg-color--light);\n    cursor: pointer;\n    transition: color 125ms;\n\n    // Feedback icon on hover\n    &:not(:disabled).md-icon:hover {\n      color: var(--md-accent-fg-color);\n    }\n\n    // Feedback icon after submit\n    &:disabled {\n      color: var(--md-default-fg-color--lightest);\n      pointer-events: none;\n    }\n  }\n\n  // Feedback note\n  &__note {\n    position: relative;\n    transform: translateY(px2rem(8px));\n    opacity: 0;\n    transition:\n      transform 400ms cubic-bezier(0.1, 0.7, 0.1, 1),\n      opacity   150ms;\n\n    // Feedback note value\n    > * {\n      max-width: px2rem(320px);\n      margin: 0 auto;\n    }\n\n    // Show after submission\n    :disabled & {\n      transform: translateY(0);\n      opacity: 1;\n    }\n  }\n}\n", "////\n/// Copyright (c) 2016-2022 Martin Donath \n///\n/// Permission is hereby granted, free of charge, to any person obtaining a\n/// copy of this software and associated documentation files (the \"Software\"),\n/// to deal in the Software without restriction, including without limitation\n/// the rights to use, copy, modify, merge, publish, distribute, sublicense,\n/// and/or sell copies of the Software, and to permit persons to whom the\n/// Software is furnished to do so, subject to the following conditions:\n///\n/// The above copyright notice and this permission notice shall be included in\n/// all copies or substantial portions of the Software.\n///\n/// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n/// FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL\n/// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n/// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n/// DEALINGS\n////\n\n// ----------------------------------------------------------------------------\n// Rules\n// ----------------------------------------------------------------------------\n\n// Footer\n.md-footer {\n  color: var(--md-footer-fg-color);\n  background-color: var(--md-footer-bg-color);\n\n  // [print]: Hide footer\n  @media print {\n    display: none;\n  }\n\n  // Footer wrapper\n  &__inner {\n    justify-content: space-between;\n    padding: px2rem(4px);\n    overflow: auto;\n\n    // Footer is visible\n    &:not([hidden]) {\n      display: flex;\n    }\n  }\n\n  // Footer link to previous and next page\n  &__link {\n    display: flex;\n    // Hack: some browsers induce ellipsis on flex children that are set to\n    // `overflow: hidden` and `text-overflow: ellipsis`. Enforcing growth by\n    // a tiny factor seems to get rid of the ellipsis and renders the text as\n    // it should - see https://bit.ly/2ZUCXQ8\n    flex-grow: 0.01;\n    padding-top: px2rem(28px);\n    padding-bottom: px2rem(8px);\n    overflow: hidden;\n    outline-color: var(--md-accent-fg-color);\n    transition: opacity 250ms;\n\n    // Footer link on focus/hover\n    &:is(:focus, :hover) {\n      opacity: 0.7;\n    }\n\n    // Adjust for right-to-left languages\n    [dir=\"rtl\"] & svg {\n      transform: scaleX(-1);\n    }\n\n    // Footer link to previous page\n    &--prev {\n\n      // [mobile -]: Adjust width to 25/75 and hide title\n      @include break-to-device(mobile) {\n\n        // Hide footer title\n        .md-footer__title {\n          display: none;\n        }\n      }\n    }\n\n    // Footer link to next page\n    &--next {\n      margin-inline-start: auto;\n      text-align: right;\n\n      // Adjust for right-to-left languages\n      [dir=\"rtl\"] & {\n        text-align: left;\n      }\n    }\n  }\n\n  // Footer title\n  &__title {\n    position: relative;\n    flex-grow: 1;\n    max-width: calc(100% - #{px2rem(48px)});\n    padding: 0 px2rem(20px);\n    font-size: px2rem(18px);\n    line-height: px2rem(48px);\n    white-space: nowrap;\n  }\n\n  // Footer link button\n  &__button {\n    margin: px2rem(4px);\n    padding: px2rem(8px);\n  }\n\n  // Footer link direction (i.e. prev and next)\n  &__direction {\n    position: absolute;\n    inset-inline: 0;\n    margin-top: px2rem(-20px);\n    padding: 0 px2rem(20px);\n    font-size: px2rem(12.8px);\n    opacity: 0.7;\n  }\n}\n\n// Footer metadata\n.md-footer-meta {\n  background-color: var(--md-footer-bg-color--dark);\n\n  // Footer metadata wrapper\n  &__inner {\n    display: flex;\n    flex-wrap: wrap;\n    justify-content: space-between;\n    padding: px2rem(4px);\n  }\n\n  // Lighten color for non-hovered text links\n  html &.md-typeset a {\n    color: var(--md-footer-fg-color--light);\n\n    // Text link on focus/hover\n    &:is(:focus, :hover) {\n      color: var(--md-footer-fg-color);\n    }\n  }\n}\n\n// ----------------------------------------------------------------------------\n\n// Copyright and theme information\n.md-copyright {\n  width: 100%;\n  margin: auto px2rem(12px);\n  padding: px2rem(8px) 0;\n  color: var(--md-footer-fg-color--lighter);\n  font-size: px2rem(12.8px);\n\n  // [tablet portrait +]: Show copyright and social links in one line\n  @include break-from-device(tablet portrait) {\n    width: auto;\n  }\n\n  // Footer copyright highlight - this is the upper part of the copyright and\n  // theme information, which will include a darker color than the theme link\n  &__highlight {\n    color: var(--md-footer-fg-color--light);\n  }\n}\n\n// ----------------------------------------------------------------------------\n\n// Social links\n.md-social {\n  margin: 0 px2rem(8px);\n  padding: px2rem(4px) 0 px2rem(12px);\n\n  // [tablet portrait +]: Show copyright and social links in one line\n  @include break-from-device(tablet portrait) {\n    padding: px2rem(12px) 0;\n  }\n\n  // Footer social link\n  &__link {\n    display: inline-block;\n    width: px2rem(32px);\n    height: px2rem(32px);\n    text-align: center;\n\n    // Adjust line-height to match height for correct alignment\n    &::before {\n      line-height: 1.9;\n    }\n\n    // Fill icon with current color\n    svg {\n      max-height: px2rem(16px);\n      vertical-align: -25%;\n      fill: currentcolor;\n    }\n  }\n}\n", "////\n/// Copyright (c) 2016-2022 Martin Donath \n///\n/// Permission is hereby granted, free of charge, to any person obtaining a\n/// copy of this software and associated documentation files (the \"Software\"),\n/// to deal in the Software without restriction, including without limitation\n/// the rights to use, copy, modify, merge, publish, distribute, sublicense,\n/// and/or sell copies of the Software, and to permit persons to whom the\n/// Software is furnished to do so, subject to the following conditions:\n///\n/// The above copyright notice and this permission notice shall be included in\n/// all copies or substantial portions of the Software.\n///\n/// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n/// FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL\n/// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n/// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n/// DEALINGS\n////\n\n// ----------------------------------------------------------------------------\n// Rules\n// ----------------------------------------------------------------------------\n\n// Scoped in typesetted content to match specificity of regular content\n.md-typeset {\n\n  // Form button\n  .md-button {\n    display: inline-block;\n    padding: px2em(10px) px2em(32px);\n    color: var(--md-primary-fg-color);\n    font-weight: 700;\n    border: px2rem(2px) solid currentcolor;\n    border-radius: px2rem(2px);\n    cursor: pointer;\n    transition:\n      color            125ms,\n      background-color 125ms,\n      border-color     125ms;\n\n    // Primary button\n    &--primary {\n      color: var(--md-primary-bg-color);\n      background-color: var(--md-primary-fg-color);\n      border-color: var(--md-primary-fg-color);\n    }\n\n    // Button on focus/hover\n    &:is(:focus, :hover) {\n      color: var(--md-accent-bg-color);\n      background-color: var(--md-accent-fg-color);\n      border-color: var(--md-accent-fg-color);\n    }\n  }\n\n  // Form input\n  .md-input {\n    height: px2rem(36px);\n    padding: 0 px2rem(12px);\n    font-size: px2rem(16px);\n    border-bottom: px2rem(2px) solid var(--md-default-fg-color--lighter);\n    border-start-start-radius: px2rem(2px);\n    border-start-end-radius: px2rem(2px);\n    box-shadow: var(--md-shadow-z1);\n    transition:\n      border     250ms,\n      box-shadow 250ms;\n\n    // Input on focus/hover\n    &:is(:focus, :hover) {\n      border-bottom-color: var(--md-accent-fg-color);\n      box-shadow: var(--md-shadow-z2);\n    }\n\n    // Stretch to full width\n    &--stretch {\n      width: 100%;\n    }\n  }\n}\n", "////\n/// Copyright (c) 2016-2022 Martin Donath \n///\n/// Permission is hereby granted, free of charge, to any person obtaining a\n/// copy of this software and associated documentation files (the \"Software\"),\n/// to deal in the Software without restriction, including without limitation\n/// the rights to use, copy, modify, merge, publish, distribute, sublicense,\n/// and/or sell copies of the Software, and to permit persons to whom the\n/// Software is furnished to do so, subject to the following conditions:\n///\n/// The above copyright notice and this permission notice shall be included in\n/// all copies or substantial portions of the Software.\n///\n/// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n/// FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL\n/// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n/// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n/// DEALINGS\n////\n\n// ----------------------------------------------------------------------------\n// Rules\n// ----------------------------------------------------------------------------\n\n// Header - by default, the header will be sticky and stay always on top of the\n// viewport. If this behavior is not desired, just set `position: static`.\n.md-header {\n  position: sticky;\n  top: 0;\n  inset-inline: 0;\n  z-index: 4;\n  display: block;\n  color: var(--md-primary-bg-color);\n  background-color: var(--md-primary-fg-color);\n  // Hack: reduce jitter by adding a transparent box shadow of the same size\n  // so the size of the layer doesn't change during animation\n  box-shadow:\n    0 0           px2rem(4px) rgba(0, 0, 0, 0),\n    0 px2rem(4px) px2rem(8px) rgba(0, 0, 0, 0);\n\n  // [print]: Hide header\n  @media print {\n    display: none;\n  }\n\n  // Header is hidden\n  &[hidden] {\n    transform: translateY(-100%);\n    transition:\n      transform 250ms cubic-bezier(0.8, 0, 0.6, 1),\n      box-shadow 250ms;\n  }\n\n  // Header in shadow state, i.e. shadow is visible\n  &--shadow {\n    box-shadow:\n      0 0           px2rem(4px) rgba(0, 0, 0, 0.1),\n      0 px2rem(4px) px2rem(8px) rgba(0, 0, 0, 0.2);\n    transition:\n      transform  250ms cubic-bezier(0.1, 0.7, 0.1, 1),\n      box-shadow 250ms;\n  }\n\n  // Header wrapper\n  &__inner {\n    display: flex;\n    align-items: center;\n    padding: 0 px2rem(4px);\n  }\n\n  // Header button\n  &__button {\n    position: relative;\n    z-index: 1;\n    margin: px2rem(4px);\n    padding: px2rem(8px);\n    color: currentcolor;\n    vertical-align: middle;\n    outline-color: var(--md-accent-fg-color);\n    cursor: pointer;\n    transition: opacity 250ms;\n\n    // Button on hover\n    &:hover {\n      opacity: 0.7;\n    }\n\n    // Header button is visible\n    &:not([hidden]) {\n      display: inline-block;\n    }\n\n    // Hide outline for pointer devices\n    &:not(.focus-visible) {\n      outline: none;\n      -webkit-tap-highlight-color: transparent;\n    }\n\n    // Button with logo, pointing to `config.site_url`\n    &.md-logo {\n      margin: px2rem(4px);\n      padding: px2rem(8px);\n\n      // [tablet -]: Hide button\n      @include break-to-device(tablet) {\n        display: none;\n      }\n\n      // Image or icon\n      :is(img, svg) {\n        display: block;\n        width: auto;\n        height: px2rem(24px);\n        fill: currentcolor;\n      }\n    }\n\n    // Button for search\n    &[for=\"__search\"] {\n\n      // [tablet landscape +]: Hide button\n      @include break-from-device(tablet landscape) {\n        display: none;\n      }\n\n      // [no-js]: Hide button\n      .no-js & {\n        display: none;\n      }\n\n      // Adjust for right-to-left languages\n      [dir=\"rtl\"] & svg {\n        transform: scaleX(-1);\n      }\n    }\n\n    // Button for drawer\n    &[for=\"__drawer\"] {\n\n      // [screen +]: Hide button\n      @include break-from-device(screen) {\n        display: none;\n      }\n    }\n  }\n\n  // Header topic\n  &__topic {\n    position: absolute;\n    display: flex;\n    max-width: 100%;\n    white-space: nowrap;\n    transition:\n      transform 400ms cubic-bezier(0.1, 0.7, 0.1, 1),\n      opacity   150ms;\n\n    // Second header topic - title of the current page\n    & + & {\n      z-index: -1;\n      transform: translateX(px2rem(25px));\n      opacity: 0;\n      transition:\n        transform 400ms cubic-bezier(1, 0.7, 0.1, 0.1),\n        opacity   150ms;\n      pointer-events: none;\n\n      // Adjust for right-to-left languages\n      [dir=\"rtl\"] & {\n        transform: translateX(px2rem(-25px));\n      }\n    }\n\n    // Adjust font weight of site title\n    &:first-child {\n      font-weight: 700;\n    }\n  }\n\n  // Header title\n  &__title {\n    flex-grow: 1;\n    height: px2rem(48px);\n    margin-inline-end: px2rem(8px);\n    margin-inline-start: px2rem(20px);\n    font-size: px2rem(18px);\n    line-height: px2rem(48px);\n\n    // Header title in active state, i.e. page title is visible\n    &--active .md-header__topic {\n      z-index: -1;\n      transform: translateX(px2rem(-25px));\n      opacity: 0;\n      transition:\n        transform 400ms cubic-bezier(1, 0.7, 0.1, 0.1),\n        opacity   150ms;\n      pointer-events: none;\n\n      // Adjust for right-to-left languages\n      [dir=\"rtl\"] & {\n        transform: translateX(px2rem(25px));\n      }\n\n      // Second header topic - title of the current page\n      + .md-header__topic {\n        z-index: 0;\n        transform: translateX(0);\n        opacity: 1;\n        transition:\n          transform 400ms cubic-bezier(0.1, 0.7, 0.1, 1),\n          opacity   150ms;\n        pointer-events: initial;\n      }\n    }\n\n    // Add ellipsis in case of overflowing text\n    > .md-header__ellipsis {\n      position: relative;\n      width: 100%;\n      height: 100%;\n    }\n  }\n\n  // Header option\n  &__option {\n    display: flex;\n    flex-shrink: 0;\n    max-width: 100%;\n    white-space: nowrap;\n    transition:\n      max-width  0ms 250ms,\n      opacity  250ms 250ms;\n\n    // Hide toggle when search is active\n    [data-md-toggle=\"search\"]:checked ~ .md-header & {\n      max-width: 0;\n      opacity: 0;\n      transition:\n        max-width 0ms,\n        opacity   0ms;\n    }\n  }\n\n  // Repository information container\n  &__source {\n    display: none;\n\n    // [tablet landscape +]: Show repository information\n    @include break-from-device(tablet landscape) {\n      display: block;\n      width: px2rem(234px);\n      max-width: px2rem(234px);\n      margin-inline-start: px2rem(20px);\n    }\n\n    // [screen +]: Adjust spacing of search bar\n    @include break-from-device(screen) {\n      margin-inline-start: px2rem(28px);\n    }\n  }\n}\n", "////\n/// Copyright (c) 2016-2020 Martin Donath \n///\n/// Permission is hereby granted, free of charge, to any person obtaining a\n/// copy of this software and associated documentation files (the \"Software\"),\n/// to deal in the Software without restriction, including without limitation\n/// the rights to use, copy, modify, merge, publish, distribute, sublicense,\n/// and/or sell copies of the Software, and to permit persons to whom the\n/// Software is furnished to do so, subject to the following conditions:\n///\n/// The above copyright notice and this permission notice shall be included in\n/// all copies or substantial portions of the Software.\n///\n/// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n/// FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL\n/// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n/// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n/// DEALINGS\n////\n\n// ----------------------------------------------------------------------------\n// Rules\n// ----------------------------------------------------------------------------\n\n// Hero teaser\n.md-hero {\n  overflow: hidden;\n  color: var(--md-primary-bg-color);\n  font-size: px2rem(20px);\n  background-color: var(--md-primary-fg-color);\n  transition: background 250ms;\n\n  // Inner wrapper\n  &__inner {\n    margin-top: px2rem(20px);\n    padding: px2rem(16px) px2rem(16px) px2rem(8px);\n    transition:\n      transform 400ms cubic-bezier(0.1, 0.7, 0.1, 1),\n      opacity   250ms;\n    transition-delay: 100ms;\n\n    // [tablet -]: Compensate for missing tabs\n    @include break-to-device(tablet) {\n      margin-top: px2rem(48px);\n      margin-bottom: px2rem(24px);\n    }\n\n    // Fade-out tabs background upon scrolling\n    [data-md-state=\"hidden\"] & {\n      transform: translateY(px2rem(12.5px));\n      opacity: 0;\n      transition:\n        transform   0ms 400ms,\n        opacity   100ms   0ms;\n      pointer-events: none;\n    }\n\n    // Adjust bottom spacing if there are no tabs\n    .md-hero--expand & {\n      margin-bottom: px2rem(24px);\n    }\n  }\n}\n", "////\n/// Copyright (c) 2016-2022 Martin Donath \n///\n/// Permission is hereby granted, free of charge, to any person obtaining a\n/// copy of this software and associated documentation files (the \"Software\"),\n/// to deal in the Software without restriction, including without limitation\n/// the rights to use, copy, modify, merge, publish, distribute, sublicense,\n/// and/or sell copies of the Software, and to permit persons to whom the\n/// Software is furnished to do so, subject to the following conditions:\n///\n/// The above copyright notice and this permission notice shall be included in\n/// all copies or substantial portions of the Software.\n///\n/// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n/// FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL\n/// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n/// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n/// DEALINGS\n////\n\n// ----------------------------------------------------------------------------\n// Rules\n// ----------------------------------------------------------------------------\n\n// Navigation variables\n:root {\n  --md-nav-icon--prev: svg-load(\"material/arrow-left.svg\");\n  --md-nav-icon--next: svg-load(\"material/chevron-right.svg\");\n  --md-toc-icon: svg-load(\"material/table-of-contents.svg\");\n}\n\n// ----------------------------------------------------------------------------\n\n// Navigation\n.md-nav {\n  font-size: px2rem(14px);\n  line-height: 1.3;\n\n  // Navigation title\n  &__title {\n    // sphinx-immaterial: display object description icon as a\n    // separate column, don't allow title text to wrap underneath it.\n    display: flex;\n    // sphinx-immaterial: ensure icons are centered vertically with text.\n    align-items: center;\n    padding: 0 px2rem(12px);\n    overflow: hidden;\n    font-weight: 700;\n    text-overflow: ellipsis;\n\n    // Navigaton button\n    .md-nav__button {\n      display: none;\n\n      // Stretch images based on height, as it's the smaller dimension\n      img {\n        width: auto;\n        height: 100%;\n      }\n\n      // Button with logo, pointing to `config.site_url`\n      &.md-logo {\n\n        // Image or icon\n        :is(img, svg) {\n          display: block;\n          width: auto;\n          max-width: 100%;\n          height: px2rem(48px);\n          object-fit: contain;\n          fill: currentcolor;\n        }\n      }\n    }\n  }\n\n  // Navigation list\n  &__list {\n    margin: 0;\n    padding: 0;\n    list-style: none;\n  }\n\n  // Navigation item\n  &__item {\n    padding: 0 px2rem(12px);\n\n    // Navigation item on level 2\n    & & {\n      padding-inline-end: 0;\n    }\n  }\n\n  // Navigation link\n  &__link {\n    display: flex;\n    align-items: center;\n\n    $margin-height: 0.625em;\n\n    margin-top: #{$margin-height};\n    cursor: pointer;\n    transition: color 125ms;\n    scroll-snap-align: start;\n\n    // sphinx-immaterial: used for toc.sticky feature to create a gap between\n    // sticky header and scrolling content\n    &.md-nav__sticky {\n      box-shadow:\n        0 -#{$margin-height} var(--md-default-bg-color),\n        0 #{$margin-height} var(--md-default-bg-color);\n    }\n\n    // Navigation link that was passed\n    &--passed {\n      color: var(--md-default-fg-color--light);\n    }\n\n    // Active link\n    .md-nav__item &--active {\n      color: var(--md-typeset-a-color);\n    }\n\n    // sphinx-immaterial: show nav links corresponding to current viewport\n    &--in-viewport {\n      position: relative;\n\n      &::before {\n        position: absolute;\n        top: 0;\n        right: calc(100% + px2rem(6px));\n        bottom: 0;\n        width: px2rem(1px);\n        height: 100%;\n        background-color: var(--md-primary-fg-color);\n        content: \"\";\n      }\n    }\n\n    // Stretch section index link to full width\n    .md-nav__item &--index [href] {\n      width: 100%;\n    }\n\n    // Navigation link on focus/hover\n    &:is(:focus, :hover) {\n      color: var(--md-accent-fg-color);\n    }\n\n    // Show outline for keyboard devices\n    &.focus-visible {\n      outline-color: var(--md-accent-fg-color);\n      outline-offset: px2rem(4px);\n    }\n\n    // Navigation link for table of contents\n    .md-nav--primary &[for=\"__toc\"] {\n      display: none;\n\n      // Table of contents icon\n      .md-icon::after {\n        display: block;\n        width: 100%;\n        height: 100%;\n        mask-image: var(--md-toc-icon);\n        background-color: currentcolor;\n      }\n\n      // Hide table of contents\n      ~ .md-nav {\n        display: none;\n      }\n    }\n\n    // Navigation link children (for section indexes)\n    > * {\n      display: flex;\n      cursor: pointer;\n    }\n  }\n\n  // sphinx-immaterial: used when `toc.sticky` is enabled\n  &__sticky {\n    position: sticky;\n    top: var(--md-nav__header-height, 0);\n    z-index: var(--md-nav__sticky-zindex);\n    background-color: var(--md-default-bg-color);\n  }\n\n  .md-ellipsis {\n    // sphinx-immaterial: don't inherit display:flex (flex-grow still applies)\n    display: block;\n    // sphinx-immaterial: Ensures the md-nav__icon element that comes after is\n    // right-aligned.\n    flex-grow: 1;\n    // sphinx-immaterial: allow wrapping of nav item titles\n    white-space: normal;\n  }\n\n  // Navigation icon\n  &__icon {\n    flex-shrink: 0;\n  }\n\n  // Repository information container\n  &__source {\n    display: none;\n  }\n\n  // [tablet -]: Layered navigation\n  @include break-to-device(tablet) {\n\n    // Primary and nested navigation\n    &--primary,\n    &--primary & {\n      position: absolute;\n      top: 0;\n      inset-inline: 0;\n      z-index: 1;\n      display: flex;\n      flex-direction: column;\n      height: 100%;\n      background-color: var(--md-default-bg-color);\n    }\n\n    // Primary navigation\n    &--primary {\n\n      // sphinx-immaterial: disable `toc.sticky` behavior for layered navigation\n      .md-nav__sticky {\n        position: static;\n        z-index: auto;\n        background-color: transparent;\n        box-shadow: none;\n      }\n\n      // Navigation title and item\n      :is(.md-nav__title, .md-nav__item) {\n        font-size: px2rem(16px);\n        line-height: 1.5;\n      }\n\n      // Navigation title\n      .md-nav__title {\n        position: relative;\n        // sphinx-immaterial: word wrapping can require larger height\n        min-height: px2rem(112px);\n        padding: px2rem(60px) px2rem(16px) px2rem(4px);\n        color: var(--md-default-fg-color--light);\n        line-height: px2rem(48px);\n        white-space: nowrap;\n        background-color: var(--md-default-fg-color--lightest);\n        cursor: pointer;\n\n        // Navigation icon\n        .md-nav__icon {\n          position: absolute;\n          top: px2rem(8px);\n          inset-inline-start: px2rem(8px);\n          display: block;\n          width: px2rem(24px);\n          height: px2rem(24px);\n          margin: px2rem(4px);\n\n          // Navigation icon in link to previous level\n          &::after {\n            display: block;\n            width: 100%;\n            height: 100%;\n            background-color: currentcolor;\n            mask-image: var(--md-nav-icon--prev);\n            mask-position: center;\n            mask-repeat: no-repeat;\n            mask-size: contain;\n            content: \"\";\n          }\n        }\n\n        // Navigation list\n        ~ .md-nav__list {\n          overflow-y: auto;\n          background-color: var(--md-default-bg-color);\n          box-shadow:\n            0 px2rem(1px) 0 var(--md-default-fg-color--lightest) inset;\n          scroll-snap-type: y mandatory;\n          touch-action: pan-y;\n\n          // Omit border on first child\n          > :first-child {\n            border-top: 0;\n          }\n        }\n\n        // Top-level navigation title\n        &[for=\"__drawer\"] {\n          color: var(--md-primary-bg-color);\n          font-weight: 700;\n          background-color: var(--md-primary-fg-color);\n        }\n\n        // Button with logo, pointing to `config.site_url`\n        .md-logo {\n          position: absolute;\n          top: px2rem(4px);\n          inset-inline: px2rem(4px);\n          display: block;\n          margin: px2rem(4px);\n          padding: px2rem(8px);\n        }\n      }\n\n      // Navigation list\n      .md-nav__list {\n        flex: 1;\n      }\n\n      // Navigation item\n      .md-nav__item {\n        padding: 0;\n        border-top: px2rem(1px) solid var(--md-default-fg-color--lightest);\n\n        // Navigation link in active navigation\n        &--active > .md-nav__link {\n          color: var(--md-typeset-a-color);\n\n          // Navigation link on focus/hover\n          &:is(:focus, :hover) {\n            color: var(--md-accent-fg-color);\n          }\n        }\n      }\n\n      // Navigation link\n      .md-nav__link {\n        margin-top: 0;\n        padding: px2rem(12px) px2rem(16px);\n\n        // Navigation icon\n        .md-nav__icon {\n          width: px2rem(24px);\n          height: px2rem(24px);\n          margin-inline-end: px2rem(-4px);\n          font-size: px2rem(24px);\n\n          // Navigation icon in link to next level\n          &::after {\n            display: block;\n            width: 100%;\n            height: 100%;\n            background-color: currentcolor;\n            mask-image: var(--md-nav-icon--next);\n            mask-position: center;\n            mask-repeat: no-repeat;\n            mask-size: contain;\n            content: \"\";\n          }\n        }\n      }\n\n      // Flip icon vertically\n      .md-nav__icon {\n\n        // Adjust for right-to-left languages\n        [dir=\"rtl\"] &::after {\n          transform: scale(-1);\n        }\n      }\n\n      // Table of contents contained in primary navigation\n      .md-nav--secondary {\n\n        // Navigation on level 2-6\n        .md-nav {\n          position: static;\n          background-color: transparent;\n\n          // Navigation link on level 3\n          .md-nav__link {\n            padding-inline-start: px2rem(28px);\n          }\n\n          // Navigation link on level 4\n          .md-nav .md-nav__link {\n            padding-inline-start: px2rem(40px);\n          }\n\n          // Navigation link on level 5\n          .md-nav .md-nav .md-nav__link {\n            padding-inline-start: px2rem(52px);\n          }\n\n          // Navigation link on level 6\n          .md-nav .md-nav .md-nav .md-nav__link {\n            padding-inline-start: px2rem(64px);\n          }\n        }\n      }\n    }\n\n    // Table of contents\n    &--secondary {\n      background-color: transparent;\n    }\n\n    // Toggle for nested navigation\n    &__toggle ~ & {\n      display: flex;\n      transform: translateX(100%);\n      opacity: 0;\n      transition:\n        transform 250ms cubic-bezier(0.8, 0, 0.6, 1),\n        opacity   125ms 50ms;\n\n      // Adjust for right-to-left languages\n      [dir=\"rtl\"] & {\n        transform: translateX(-100%);\n      }\n    }\n\n    // Show nested navigation when toggle is active\n    &__toggle:checked ~ & {\n      transform: translateX(0);\n      opacity: 1;\n      transition:\n        transform 250ms cubic-bezier(0.4, 0, 0.2, 1),\n        opacity   125ms 125ms;\n\n      // Navigation list\n      > .md-nav__list {\n        // Hack: promote to own layer to reduce jitter\n        backface-visibility: hidden;\n      }\n    }\n\n    // sphinx-immaterial: ensure long titles in mobile/tablet layout\n    // are truncated with an ellipsis rather than wrapping.\n    .md-nav__title .md-ellipsis {\n      white-space: nowrap;\n\n      // In Chrome,  elements override `white-space: nowrap`, but\n      // setting them to `display: none` prevents that.\n      wbr {\n        display: none;\n      }\n    }\n  }\n\n  // [tablet portrait -]: Layered navigation with table of contents\n  @include break-to-device(tablet portrait) {\n\n    // sphinx-immaterial: hide nested nav items of current page, since\n    // they are redundant with integrated toc.\n    &__current-nested {\n      display: none;\n    }\n\n    // Show link to table of contents\n    &--primary &__link[for=\"__toc\"] {\n      display: flex;\n\n      // Show table of contents icon\n      .md-icon::after {\n        content: \"\";\n      }\n\n      // Hide navigation link to current page\n      + .md-nav__link {\n        display: none;\n      }\n\n      // Show table of contents\n      ~ .md-nav {\n        display: flex;\n      }\n    }\n\n    // Repository information container\n    &__source {\n      display: block;\n      padding: 0 px2rem(4px);\n      color: var(--md-primary-bg-color);\n      background-color: var(--md-primary-fg-color--dark);\n    }\n  }\n\n  // [tablet landscape]: Layered navigation with table of contents\n  @include break-at-device(tablet landscape) {\n\n    // Show link to integrated table of contents\n    &--integrated &__link[for=\"__toc\"] {\n      display: flex;\n\n      // Show table of contents icon\n      .md-icon::after {\n        content: \"\";\n      }\n\n      // Hide navigation link to current page\n      + .md-nav__link {\n        display: none;\n      }\n\n      // Show table of contents\n      ~ .md-nav {\n        display: flex;\n      }\n    }\n  }\n\n  // [tablet landscape +]: Tree-like table of contents\n  @include break-from-device(tablet landscape) {\n\n    // sphinx-immaterial: hide integreated toc, since it is redundant with any nested items.\n    &__current-toc {\n      display: none;\n    }\n\n    // Navigation title\n    &--secondary &__title {\n      position: sticky;\n      top: 0;\n      // Hack: because of the hack that we need to make .md-ellipsis work in\n      // Safari, we need to set `z-index` here as - see https://bit.ly/3s5M2jm\n      z-index: 1;\n      background: var(--md-default-bg-color);\n      box-shadow: 0 0 px2rem(8px) px2rem(8px) var(--md-default-bg-color);\n\n      // Adjust snapping behavior\n      &[for=\"__toc\"] {\n        scroll-snap-align: start;\n      }\n\n      // Hide navigation icon\n      .md-nav__icon {\n        display: none;\n      }\n    }\n  }\n\n  // [screen +]: Tree-like navigation\n  @include break-from-device(screen) {\n    transition: max-height 250ms cubic-bezier(0.86, 0, 0.07, 1);\n\n    // Navigation title\n    &--primary &__title {\n      position: sticky;\n      top: 0;\n      // Hack: because of the hack that we need to make .md-ellipsis work in\n      // Safari, we need to set `z-index` here as - see https://bit.ly/3s5M2jm\n      z-index: 1;\n      background: var(--md-default-bg-color);\n      box-shadow: 0 0 px2rem(8px) px2rem(8px) var(--md-default-bg-color);\n\n      // Adjust snapping behavior\n      &[for=\"__drawer\"] {\n        scroll-snap-align: start;\n      }\n\n      // Hide navigation icon\n      .md-nav__icon {\n        display: none;\n      }\n    }\n\n    // Hide toggle for nested navigation\n    &__toggle ~ & {\n      display: none;\n    }\n\n    // Show nested navigation when toggle is active or indeterminate\n    &__toggle:is(:checked, :indeterminate) ~ & {\n      display: block;\n    }\n\n    // Hide navigation title in nested navigation\n    &__item--nested > & > &__title {\n      display: none;\n    }\n\n    // Navigation section\n    &__item--section {\n      display: block;\n      margin: 1.25em 0;\n\n      // Adjust spacing on last child\n      &:last-child {\n        margin-bottom: 0;\n      }\n\n      // Show navigation link as title\n      > .md-nav__link {\n        font-weight: 700;\n        pointer-events: none;\n\n        // Make navigation link clickable\n        &--index [href] {\n          pointer-events: initial;\n        }\n\n        // Hide naviation icon\n        .md-nav__icon {\n          display: none;\n        }\n      }\n\n      // Navigation\n      > .md-nav {\n        display: block;\n\n        // Adjust spacing on next level item\n        > .md-nav__list > .md-nav__item {\n          padding: 0;\n        }\n      }\n    }\n\n    // Navigation icon\n    &__icon {\n      width: px2rem(18px);\n      height: px2rem(18px);\n      border-radius: 100%;\n      transition:\n        background-color 250ms,\n        transform        250ms;\n\n      // Adjust for right-to-left languages\n      [dir=\"rtl\"] & {\n        transform: rotate(180deg);\n      }\n\n      // Navigation icon on hover\n      &:hover {\n        background-color: var(--md-accent-fg-color--transparent);\n      }\n\n      // Navigation icon content\n      &::after {\n        display: inline-block;\n        width: 100%;\n        height: 100%;\n        vertical-align: px2rem(-2px);\n        background-color: currentcolor;\n        mask-image: var(--md-nav-icon--next);\n        mask-position: center;\n        mask-repeat: no-repeat;\n        mask-size: contain;\n        content: \"\";\n      }\n\n      // Navigation icon - rotate icon when toggle is active or indeterminate\n      .md-nav__item--nested .md-nav__toggle:checked ~ .md-nav__link &,\n      .md-nav__item--nested .md-nav__toggle:indeterminate ~ .md-nav__link & {\n        transform: rotate(90deg);\n      }\n    }\n\n    // Modifier for when navigation tabs are rendered\n    &--lifted {\n\n      // Hide nested level 0 navigation items and site title\n      > .md-nav__list > .md-nav__item--nested,\n      > .md-nav__title {\n        display: none;\n      }\n\n      // Hide level 0 navigation items\n      > .md-nav__list > .md-nav__item {\n        display: none;\n\n        // Active parent navigation item\n        &--active {\n          display: block;\n          padding: 0;\n\n          // Show navigation link as title\n          > .md-nav__link {\n            position: sticky;\n            top: 0;\n            z-index: var(--md-nav__sticky-zindex, 1);\n            margin-top: 0;\n            padding: 0 px2rem(12px);\n            font-weight: 700;\n            background: var(--md-default-bg-color);\n            box-shadow: 0 0 px2rem(8px) px2rem(8px) var(--md-default-bg-color);\n\n            // Non-index section should not be clickable\n            &:not(.md-nav__link--index) {\n              pointer-events: none;\n            }\n\n            // Hide naviation icon\n            .md-nav__icon {\n              display: none;\n            }\n          }\n        }\n      }\n\n      // Hack: Always show active navigation tab on breakpoint screen, despite\n      // of checkbox being checked or not. Fixes #1655.\n      .md-nav[data-md-level=\"1\"] {\n        display: block;\n\n        // Adjust spacing for level 1 navigation items\n        > .md-nav__list > .md-nav__item {\n          padding-inline-end: px2rem(12px);\n        }\n      }\n    }\n\n    // Modifier for when table of contents is rendered in primary navigation\n    &--integrated > .md-nav__list > .md-nav__item--active {\n\n      // Add spacing to container for non-nested navigation items\n      &:not(.md-nav__item--nested) {\n        padding: 0 px2rem(12px);\n\n        // Remove padding as it's given by container\n        > .md-nav__link {\n          padding: 0;\n        }\n      }\n\n      // Show integrated table of contents\n      .md-nav--secondary {\n        display: block;\n        margin-bottom: 1.25em;\n        border-inline-start: px2rem(1px) solid var(--md-primary-fg-color);\n\n        // Hide table of contents title\n        > .md-nav__title {\n          display: none;\n        }\n      }\n    }\n  }\n}\n", "////\n/// Copyright (c) 2016-2022 Martin Donath \n///\n/// Permission is hereby granted, free of charge, to any person obtaining a\n/// copy of this software and associated documentation files (the \"Software\"),\n/// to deal in the Software without restriction, including without limitation\n/// the rights to use, copy, modify, merge, publish, distribute, sublicense,\n/// and/or sell copies of the Software, and to permit persons to whom the\n/// Software is furnished to do so, subject to the following conditions:\n///\n/// The above copyright notice and this permission notice shall be included in\n/// all copies or substantial portions of the Software.\n///\n/// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n/// FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL\n/// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n/// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n/// DEALINGS\n////\n\n// ----------------------------------------------------------------------------\n// Rules\n// ----------------------------------------------------------------------------\n\n// Search variables\n:root {\n  --md-search-result-icon: svg-load(\"material/file-search-outline.svg\");\n}\n\n// ----------------------------------------------------------------------------\n\n// Search\n.md-search {\n  position: relative;\n\n  // [tablet landscape +]: Header-embedded search\n  @include break-from-device(tablet landscape) {\n    padding: px2rem(4px) 0;\n  }\n\n  // [no-js]: Hide search\n  .no-js & {\n    display: none;\n  }\n\n  // Search overlay\n  &__overlay {\n    z-index: 1;\n    opacity: 0;\n\n    // [tablet portrait -]: Search modal\n    @include break-to-device(tablet portrait) {\n      position: absolute;\n      top: px2rem(-20px);\n      inset-inline-start: px2rem(-44px);\n      width: px2rem(40px);\n      height: px2rem(40px);\n      overflow: hidden;\n      background-color: var(--md-default-bg-color);\n      border-radius: px2rem(20px);\n      transform-origin: center;\n      transition:\n        transform 300ms 100ms,\n        opacity   200ms 200ms;\n      pointer-events: none;\n\n      // Show overlay when search is active\n      [data-md-toggle=\"search\"]:checked ~ .md-header & {\n        opacity: 1;\n        transition:\n          transform 400ms,\n          opacity   100ms;\n      }\n    }\n\n    // [tablet landscape +]: Header-embedded search\n    @include break-from-device(tablet landscape) {\n      position: fixed;\n      top: 0;\n      inset-inline-start: 0;\n      width: 0;\n      height: 0;\n      background-color: hsla(0, 0%, 0%, 0.54);\n      cursor: pointer;\n      transition:\n        width     0ms 250ms,\n        height    0ms 250ms,\n        opacity 250ms;\n\n      // Show overlay when search is active\n      [data-md-toggle=\"search\"]:checked ~ .md-header & {\n        width: 100%;\n        // Hack: when the header is translated upon scrolling, a new layer is\n        // induced, which means that the height will now refer to the height of\n        // the header, albeit positioning is fixed. This should be mitigated\n        // in all cases when setting the height to 2x the viewport.\n        height: 200vh;\n        opacity: 1;\n        transition:\n          width     0ms,\n          height    0ms,\n          opacity 250ms;\n      }\n    }\n\n    // Adjust appearance when search is active\n    [data-md-toggle=\"search\"]:checked ~ .md-header & {\n\n      // [mobile portrait -]: Scale up 45 times\n      @include break-to-device(mobile portrait) {\n        transform: scale(45);\n      }\n\n      // [mobile landscape]: Scale up 60 times\n      @include break-at-device(mobile landscape) {\n        transform: scale(60);\n      }\n\n      // [tablet portrait]: Scale up 75 times\n      @include break-at-device(tablet portrait) {\n        transform: scale(75);\n      }\n    }\n  }\n\n  // Search wrapper\n  &__inner {\n    // Hack: promote to own layer to reduce jitter\n    backface-visibility: hidden;\n\n    // [tablet portrait -]: Search modal\n    @include break-to-device(tablet portrait) {\n      position: fixed;\n      top: 0;\n      inset-inline-start: 0;\n      z-index: 2;\n      width: 0;\n      height: 0;\n      overflow: hidden;\n      transform: translateX(5%);\n      opacity: 0;\n      transition:\n        width       0ms 300ms,\n        height      0ms 300ms,\n        transform 150ms 150ms cubic-bezier(0.4, 0, 0.2, 1),\n        opacity   150ms 150ms;\n\n      // Adjust for right-to-left languages\n      [dir=\"rtl\"] & {\n        transform: translateX(-5%);\n      }\n\n      // Adjust appearance when search is active\n      [data-md-toggle=\"search\"]:checked ~ .md-header & {\n        width: 100%;\n        height: 100%;\n        transform: translateX(0);\n        opacity: 1;\n        transition:\n          width       0ms   0ms,\n          height      0ms   0ms,\n          transform 150ms 150ms cubic-bezier(0.1, 0.7, 0.1, 1),\n          opacity   150ms 150ms;\n      }\n    }\n\n    // [tablet landscape +]: Header-embedded search\n    @include break-from-device(tablet landscape) {\n      position: relative;\n      float: inline-end;\n      width: px2rem(234px);\n      padding: px2rem(2px) 0;\n      transition: width 250ms cubic-bezier(0.1, 0.7, 0.1, 1);\n    }\n\n    // Adjust appearance when search is active\n    [data-md-toggle=\"search\"]:checked ~ .md-header & {\n\n      // [tablet landscape]: Omit overlaying header title\n      @include break-at-device(tablet landscape) {\n        width: px2rem(468px);\n      }\n\n      // [screen +]: Match width of content area\n      @include break-from-device(screen) {\n        width: px2rem(688px);\n      }\n    }\n  }\n\n  // Search form\n  &__form {\n    position: relative;\n    z-index: 2;\n    height: px2rem(48px);\n    background-color: var(--md-default-bg-color);\n    box-shadow: 0 0 px2rem(12px) transparent;\n    transition:\n      color            250ms,\n      background-color 250ms;\n\n    // [tablet landscape +]: Header-embedded search\n    @include break-from-device(tablet landscape) {\n      height: px2rem(36px);\n      background-color: hsla(0, 0%, 0%, 0.26);\n      border-radius: px2rem(2px);\n\n      // Search form on hover\n      &:hover {\n        background-color: hsla(0, 0%, 100%, 0.12);\n      }\n    }\n\n    // Adjust appearance when search is active\n    [data-md-toggle=\"search\"]:checked ~ .md-header & {\n      color: var(--md-default-fg-color);\n      background-color: var(--md-default-bg-color);\n      border-radius: px2rem(2px) px2rem(2px) 0 0;\n      box-shadow: 0 0 px2rem(12px) hsla(0, 0%, 0%, 0.07);\n    }\n  }\n\n  // Search input\n  &__input {\n    position: relative;\n    z-index: 2;\n    width: 100%;\n    height: 100%;\n    padding-inline: px2rem(72px) px2rem(44px);\n    font-size: px2rem(18px);\n    text-overflow: ellipsis;\n    background: transparent;\n\n    // Search placeholder\n    &::placeholder {\n      transition: color 250ms;\n    }\n\n    // Search icon and placeholder\n    ~ .md-search__icon,\n    &::placeholder {\n      color: var(--md-default-fg-color--light);\n    }\n\n    // Remove the \"x\" rendered by Internet Explorer\n    &::-ms-clear {\n      display: none;\n    }\n\n    // [tablet portrait -]: Search modal\n    @include break-to-device(tablet portrait) {\n      width: 100%;\n      height: px2rem(48px);\n      font-size: px2rem(18px);\n    }\n\n    // [tablet landscape +]: Header-embedded search\n    @include break-from-device(tablet landscape) {\n      padding-inline-start: px2rem(44px);\n      color: inherit;\n      font-size: px2rem(16px);\n\n      // Search placeholder\n      &::placeholder {\n        color: var(--md-primary-bg-color--light);\n      }\n\n      // Search icon\n      + .md-search__icon {\n        color: var(--md-primary-bg-color);\n      }\n\n      // Adjust appearance when search is active\n      [data-md-toggle=\"search\"]:checked ~ .md-header & {\n        text-overflow: clip;\n\n        // Search icon and placeholder\n        + .md-search__icon,\n        &::placeholder {\n          color: var(--md-default-fg-color--light);\n        }\n      }\n    }\n  }\n\n  // Search icon\n  &__icon {\n    display: inline-block;\n    width: px2rem(24px);\n    height: px2rem(24px);\n    cursor: pointer;\n    transition:\n      color   250ms,\n      opacity 250ms;\n\n    // Search icon on hover\n    &:hover {\n      opacity: 0.7;\n    }\n\n    // Search focus button\n    &[for=\"__search\"] {\n      position: absolute;\n      top: px2rem(6px);\n      inset-inline-start: px2rem(10px);\n      z-index: 2;\n\n      // Adjust for right-to-left languages\n      [dir=\"rtl\"] & svg {\n        transform: scaleX(-1);\n      }\n\n      // [tablet portrait -]: Search modal\n      @include break-to-device(tablet portrait) {\n        top: px2rem(12px);\n        inset-inline-start: px2rem(16px);\n\n        // Hide the magnifying glass\n        svg:first-child {\n          display: none;\n        }\n      }\n\n      // [tablet landscape +]: Header-embedded search\n      @include break-from-device(tablet landscape) {\n        pointer-events: none;\n\n        // Hide the back arrow\n        svg:last-child {\n          display: none;\n        }\n      }\n    }\n  }\n\n  // Search options\n  &__options {\n    position: absolute;\n    top: px2rem(6px);\n    inset-inline-end: px2rem(10px);\n    z-index: 2;\n    pointer-events: none;\n\n    // [tablet portrait -]: Search modal\n    @include break-to-device(tablet portrait) {\n      top: px2rem(12px);\n      inset-inline-end: px2rem(16px);\n    }\n\n    // Search option buttons\n    > * {\n      margin-inline-start: px2rem(4px);\n      color: var(--md-default-fg-color--light);\n      transform: scale(0.75);\n      opacity: 0;\n      transition:\n        transform 150ms cubic-bezier(0.1, 0.7, 0.1, 1),\n        opacity   150ms;\n\n      // Hide outline for pointer devices\n      &:not(.focus-visible) {\n        outline: none;\n        -webkit-tap-highlight-color: transparent;\n      }\n\n      // Show reset button when search is active and input non-empty\n      [data-md-toggle=\"search\"]:checked ~ .md-header\n      .md-search__input:valid ~ & {\n        transform: scale(1);\n        opacity: 1;\n        pointer-events: initial;\n\n        // Search focus icon\n        &:hover {\n          opacity: 0.7;\n        }\n      }\n    }\n  }\n\n  // Search suggestions\n  &__suggest {\n    position: absolute;\n    top: 0;\n    display: flex;\n    align-items: center;\n    width: 100%;\n    height: 100%;\n    padding-inline: px2rem(72px) px2rem(44px);\n    color: var(--md-default-fg-color--lighter);\n    font-size: px2rem(18px);\n    white-space: nowrap;\n    opacity: 0;\n    transition: opacity 50ms;\n\n    // [tablet landscape +]: Header-embedded search\n    @include break-from-device(tablet landscape) {\n      padding-inline-start: px2rem(44px);\n      font-size: px2rem(16px);\n    }\n\n    // Show suggestions when search is active\n    [data-md-toggle=\"search\"]:checked ~ .md-header & {\n      opacity: 1;\n      transition: opacity 300ms 100ms;\n    }\n  }\n\n  // Search output\n  &__output {\n    position: absolute;\n    z-index: 1;\n    width: 100%;\n    overflow: hidden;\n    border-end-start-radius: px2rem(2px);\n    border-end-end-radius: px2rem(2px);\n\n    // [tablet portrait -]: Search modal\n    @include break-to-device(tablet portrait) {\n      top: px2rem(48px);\n      bottom: 0;\n    }\n\n    // [tablet landscape +]: Header-embedded search\n    @include break-from-device(tablet landscape) {\n      top: px2rem(38px);\n      opacity: 0;\n      transition: opacity 400ms;\n\n      // Show output when search is active\n      [data-md-toggle=\"search\"]:checked ~ .md-header & {\n        box-shadow: var(--md-shadow-z3);\n        opacity: 1;\n      }\n    }\n  }\n\n  // Search scroll wrapper\n  &__scrollwrap {\n    height: 100%;\n    overflow-y: auto;\n    background-color: var(--md-default-bg-color);\n    // Hack: promote to own layer to reduce jitter\n    backface-visibility: hidden;\n    // Hack: Chrome 88+ has weird overscroll behavior. Overall, scroll snapping\n    // seems to be something that is not ready for prime time on some browsers.\n    // scroll-snap-type: y mandatory;\n    touch-action: pan-y;\n\n    // Mitigiate excessive repaints on non-retina devices\n    @media (max-resolution: 1dppx) {\n      transform: translateZ(0);\n    }\n\n    // [tablet landscape]: Set fixed width to omit unnecessary reflow\n    @include break-at-device(tablet landscape) {\n      width: px2rem(468px);\n    }\n\n    // [screen +]: Set fixed width to omit unnecessary reflow\n    @include break-from-device(screen) {\n      width: px2rem(688px);\n    }\n\n    // [tablet landscape +]: Limit height to viewport\n    @include break-from-device(tablet landscape) {\n      max-height: 0;\n      scrollbar-width: thin;\n      scrollbar-color: var(--md-default-fg-color--lighter) transparent;\n\n      // Show scroll wrapper when search is active\n      [data-md-toggle=\"search\"]:checked ~ .md-header & {\n        max-height: 75vh;\n      }\n\n      // Search scroll wrapper on hover\n      &:hover {\n        scrollbar-color: var(--md-accent-fg-color) transparent;\n      }\n\n      // Webkit scrollbar\n      &::-webkit-scrollbar {\n        width: px2rem(4px);\n        height: px2rem(4px);\n      }\n\n      // Webkit scrollbar thumb\n      &::-webkit-scrollbar-thumb {\n        background-color: var(--md-default-fg-color--lighter);\n\n        // Webkit scrollbar thumb on hover\n        &:hover {\n          background-color: var(--md-accent-fg-color);\n        }\n      }\n    }\n  }\n}\n\n// Search result\n.md-search-result {\n  color: var(--md-default-fg-color);\n  word-break: break-word;\n\n  // Search result metadata\n  &__meta {\n    padding: 0 px2rem(16px);\n    color: var(--md-default-fg-color--light);\n    font-size: px2rem(12.8px);\n    line-height: px2rem(36px);\n    background-color: var(--md-default-fg-color--lightest);\n    scroll-snap-align: start;\n\n    // [tablet landscape +]: Adjust spacing\n    @include break-from-device(tablet landscape) {\n      padding-inline-start: px2rem(44px);\n    }\n  }\n\n  // Search result list\n  &__list {\n    margin: 0;\n    padding: 0;\n    list-style: none;\n    // Hack: omit accidental text selection on fast toggle of more button\n    user-select: none;\n  }\n\n  // Search result item\n  &__item {\n    box-shadow: 0 px2rem(-1px) var(--md-default-fg-color--lightest);\n\n    // Omit border on first child\n    &:first-child {\n      box-shadow: none;\n    }\n  }\n\n  // Search result link\n  &__link {\n    display: block;\n    outline: none;\n    transition: background-color 250ms;\n    scroll-snap-align: start;\n\n    // Search result link on focus/hover\n    &:is(:focus, :hover) {\n      background-color: var(--md-accent-fg-color--transparent);\n    }\n\n    // Adjust spacing on last child of last link\n    &:last-child p:last-child {\n      margin-bottom: px2rem(12px);\n    }\n  }\n\n  // Search result more link\n  &__more summary {\n    display: block;\n    padding: px2em(12px) px2rem(16px);\n    color: var(--md-typeset-a-color);\n    font-size: px2rem(12.8px);\n    outline: none;\n    cursor: pointer;\n    transition:\n      color            250ms,\n      background-color 250ms;\n    scroll-snap-align: start;\n\n    // [tablet landscape +]: Adjust spacing\n    @include break-from-device(tablet landscape) {\n      padding-inline-start: px2rem(44px);\n    }\n\n    // Search result more link on focus/hover\n    &:is(:focus, :hover) {\n      color: var(--md-accent-fg-color);\n      background-color: var(--md-accent-fg-color--transparent);\n    }\n\n    // Hide native details marker - modern\n    &::marker {\n      display: none;\n    }\n\n    // Hide native details marker - legacy, must be split into a seprate rule,\n    // so older browsers don't consider the selector list as invalid\n    &::-webkit-details-marker {\n      display: none;\n    }\n\n    // Adjust transparency of less relevant results\n    ~ * > * {\n      opacity: 0.65;\n    }\n  }\n\n  // Search result article\n  &__article {\n    position: relative;\n    padding: 0 px2rem(16px);\n    overflow: hidden;\n\n    // [tablet landscape +]: Adjust spacing\n    @include break-from-device(tablet landscape) {\n      padding-inline-start: px2rem(44px);\n    }\n\n    // Search result article document\n    &--document {\n\n      // Search result title\n      .md-search-result__title {\n        margin: px2rem(11px) 0;\n        font-weight: 400;\n        font-size: px2rem(16px);\n        line-height: 1.4;\n      }\n    }\n  }\n\n  // Search result icon\n  &__icon {\n    position: absolute;\n    inset-inline-start: 0;\n    width: px2rem(24px);\n    height: px2rem(24px);\n    margin: px2rem(10px);\n    color: var(--md-default-fg-color--light);\n\n    // [tablet portrait -]: Hide icon\n    @include break-to-device(tablet portrait) {\n      display: none;\n    }\n\n    // Search result icon content\n    &::after {\n      display: inline-block;\n      width: 100%;\n      height: 100%;\n      background-color: currentcolor;\n      mask-image: var(--md-search-result-icon);\n      mask-position: center;\n      mask-repeat: no-repeat;\n      mask-size: contain;\n      content: \"\";\n\n      // Adjust for right-to-left languages\n      [dir=\"rtl\"] & {\n        transform: scaleX(-1);\n      }\n    }\n  }\n\n  // Search result title\n  &__title {\n    margin: 0.5em 0;\n    font-weight: 700;\n    font-size: px2rem(12.8px);\n    line-height: 1.6;\n  }\n\n  // Search result teaser\n  &__teaser {\n    display: -webkit-box;\n    max-height: px2rem(40px);\n    margin: 0.5em 0;\n    overflow: hidden;\n    color: var(--md-default-fg-color--light);\n    font-size: px2rem(12.8px);\n    line-height: 1.6;\n    text-overflow: ellipsis;\n    -webkit-box-orient: vertical;\n    -webkit-line-clamp: 2;\n\n    // [mobile -]: Adjust number of lines\n    @include break-to-device(mobile) {\n      max-height: px2rem(60px);\n      -webkit-line-clamp: 3;\n    }\n\n    // [tablet landscape]: Adjust number of lines\n    @include break-at-device(tablet landscape) {\n      max-height: px2rem(60px);\n      -webkit-line-clamp: 3;\n    }\n\n    // Search term highlighting\n    mark {\n      text-decoration: underline;\n      background-color: transparent;\n    }\n  }\n\n  // Search result terms\n  &__terms {\n    margin: 0.5em 0;\n    font-size: px2rem(12.8px);\n    font-style: italic;\n  }\n\n  // Search term highlighting\n  mark {\n    color: var(--md-accent-fg-color);\n    background-color: transparent;\n  }\n}\n", "////\n/// Copyright (c) 2016-2022 Martin Donath \n///\n/// Permission is hereby granted, free of charge, to any person obtaining a\n/// copy of this software and associated documentation files (the \"Software\"),\n/// to deal in the Software without restriction, including without limitation\n/// the rights to use, copy, modify, merge, publish, distribute, sublicense,\n/// and/or sell copies of the Software, and to permit persons to whom the\n/// Software is furnished to do so, subject to the following conditions:\n///\n/// The above copyright notice and this permission notice shall be included in\n/// all copies or substantial portions of the Software.\n///\n/// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n/// FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL\n/// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n/// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n/// DEALINGS\n////\n\n// ----------------------------------------------------------------------------\n// Rules\n// ----------------------------------------------------------------------------\n\n// Selection\n.md-select {\n  position: relative;\n  z-index: 1;\n\n  // Selection tooltip\n  &__inner {\n    position: absolute;\n    top: calc(100% - #{px2rem(4px)});\n    left: 50%;\n    max-height: 0;\n    margin-top: px2rem(4px);\n    color: var(--md-default-fg-color);\n    background-color: var(--md-default-bg-color);\n    border-radius: px2rem(2px);\n    box-shadow: var(--md-shadow-z2);\n    transform: translate3d(-50%, px2rem(6px), 0);\n    opacity: 0;\n    transition:\n      transform  250ms 375ms,\n      opacity    250ms 250ms,\n      max-height   0ms 500ms;\n\n    // Selection bubble on parent focus/hover\n    .md-select:is(:focus-within, :hover) & {\n      max-height: px2rem(200px);\n      transform: translate3d(-50%, 0, 0);\n      opacity: 1;\n      transition:\n        transform  250ms cubic-bezier(0.1, 0.7, 0.1, 1),\n        opacity    250ms,\n        max-height   0ms;\n    }\n\n    // Selection bubble handle\n    &::after {\n      position: absolute;\n      top: 0;\n      left: 50%;\n      width: 0;\n      height: 0;\n      margin-top: px2rem(-4px);\n      margin-left: px2rem(-4px);\n      border: px2rem(4px) solid transparent;\n      border-top: 0;\n      border-bottom-color: var(--md-default-bg-color);\n      content: \"\";\n    }\n  }\n\n  // Selection list\n  &__list {\n    max-height: inherit;\n    margin: 0;\n    padding: 0;\n    overflow: auto;\n    font-size: px2rem(16px);\n    list-style-type: none;\n    border-radius: px2rem(2px);\n  }\n\n  // Selection item\n  &__item {\n    line-height: px2rem(36px);\n  }\n\n  // Selection link\n  &__link {\n    display: block;\n    width: 100%;\n    padding-inline: px2rem(12px) px2rem(24px);\n    outline: none;\n    cursor: pointer;\n    transition:\n      background-color 250ms,\n      color            250ms;\n    scroll-snap-align: start;\n\n    // Link on focus/hover\n    &:is(:focus, :hover) {\n      color: var(--md-accent-fg-color);\n    }\n\n    // Link on focus\n    &:focus {\n      background-color: var(--md-default-fg-color--lightest);\n    }\n  }\n}\n", "////\n/// Copyright (c) 2016-2022 Martin Donath \n///\n/// Permission is hereby granted, free of charge, to any person obtaining a\n/// copy of this software and associated documentation files (the \"Software\"),\n/// to deal in the Software without restriction, including without limitation\n/// the rights to use, copy, modify, merge, publish, distribute, sublicense,\n/// and/or sell copies of the Software, and to permit persons to whom the\n/// Software is furnished to do so, subject to the following conditions:\n///\n/// The above copyright notice and this permission notice shall be included in\n/// all copies or substantial portions of the Software.\n///\n/// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n/// FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL\n/// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n/// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n/// DEALINGS\n////\n\n// ----------------------------------------------------------------------------\n// Rules\n// ----------------------------------------------------------------------------\n\n// Sidebar\n.md-sidebar {\n  position: sticky;\n  top: px2rem(48px);\n  flex-shrink: 0;\n  align-self: flex-start;\n  width: px2rem(242px);\n  padding: px2rem(24px) 0;\n\n  // [print]: Hide sidebar\n  @media print {\n    display: none;\n  }\n\n  // Primary sidebar with navigation\n  &--primary {\n\n    // [tablet -]: Show navigation as drawer\n    @include break-to-device(tablet) {\n      position: fixed;\n      top: 0;\n      inset-inline-start: px2rem(-242px);\n      z-index: 5;\n      display: block;\n      width: px2rem(242px);\n      height: 100%;\n      background-color: var(--md-default-bg-color);\n      transform: translateX(0);\n      transition:\n        transform  250ms cubic-bezier(0.4, 0, 0.2, 1),\n        box-shadow 250ms;\n\n      // Show sidebar when drawer is active\n      [data-md-toggle=\"drawer\"]:checked ~ .md-container & {\n        box-shadow: var(--md-shadow-z3);\n        transform: translateX(px2rem(242px));\n\n        // Adjust for right-to-left languages\n        [dir=\"rtl\"] & {\n          transform: translateX(px2rem(-242px));\n        }\n      }\n\n      // Stretch scroll wrapper for primary sidebar\n      .md-sidebar__scrollwrap {\n        position: absolute;\n        inset: 0;\n        margin: 0;\n        scroll-snap-type: none;\n        overflow: hidden;\n      }\n    }\n  }\n\n  // [screen +]: Show navigation as sidebar\n  @include break-from-device(screen) {\n    height: 0;\n\n    // [no-js]: Switch to native sticky behavior\n    .no-js & {\n      height: auto;\n    }\n\n    // Adjust spacing for sticky navigation tabs\n    .md-header--lifted ~ .md-container & {\n      top: px2rem(96px);\n    }\n  }\n\n  // Secondary sidebar with table of contents\n  &--secondary {\n    display: none;\n    order: 2;\n\n    // [tablet landscape +]: Show table of contents as sidebar\n    @include break-from-device(tablet landscape) {\n      height: 0;\n\n      // [no-js]: Switch to native sticky behavior\n      .no-js & {\n        height: auto;\n      }\n\n      // Sidebar is visible\n      &:not([hidden]) {\n        display: block;\n      }\n\n      // Ensure smooth scrolling on iOS\n      .md-sidebar__scrollwrap {\n        touch-action: pan-y;\n      }\n    }\n  }\n\n  // Sidebar scroll wrapper\n  &__scrollwrap {\n    margin: 0 px2rem(4px);\n    overflow-y: auto;\n    // Hack: promote to own layer to reduce jitter\n    backface-visibility: hidden;\n    // Hack: Chrome 81+ exhibits a strange bug, where it scrolls the container\n    // to the bottom if `scroll-snap-type` is set on the initial render. For\n    // this reason, we disable scroll snapping until this is resolved (#1667).\n    // scroll-snap-type: y mandatory;\n    scrollbar-width: thin;\n    scrollbar-gutter: stable;\n    scrollbar-color: var(--md-default-fg-color--lighter) transparent;\n\n    // Sidebar scroll wrapper on hover\n    &:hover {\n      scrollbar-color: var(--md-accent-fg-color) transparent;\n    }\n\n    // Webkit scrollbar\n    &::-webkit-scrollbar {\n      width: px2rem(4px);\n      height: px2rem(4px);\n    }\n\n    // Webkit scrollbar thumb\n    &::-webkit-scrollbar-thumb {\n      background-color: var(--md-default-fg-color--lighter);\n\n      // Webkit scrollbar thumb on hover\n      &:hover {\n        background-color: var(--md-accent-fg-color);\n      }\n    }\n  }\n\n  // Hack: the scrollbar is only visible when the sidebar's contents overflow,\n  // which is nice, but leads to the problem where the chevrons of expandable\n  // sections will jump by `4px` when the sidebar is shown. We wanted to fix\n  // this problem for so long, but haven't found a clean way of doing it.\n  // Until now. The following declaration is only applied to Webkit browsers\n  // (e.g. Chrome and Safari), which support styling of scrollbars. The trick\n  // is to add conditional padding on the side of the scrollbar only if the\n  // sidebar's content doesn't overflow. This hack is inspired and adapted\n  // from Ayke van La\u00ebthem's year old trick \u2013 see https://bit.ly/3Sb1qql\n  @supports selector(::-webkit-scrollbar) {\n\n    // Sidebar scroll wrapper\n    &__scrollwrap {\n      scrollbar-gutter: auto;\n    }\n\n    // Sidebar wrapper\n    &__inner {\n      padding-inline-end: calc(100% - #{px2rem(230px)});\n    }\n  }\n}\n\n// [tablet -]: Show overlay on active drawer\n@include break-to-device(tablet) {\n\n  // Drawer overlay\n  .md-overlay {\n    position: fixed;\n    top: 0;\n    z-index: 5;\n    width: 0;\n    height: 0;\n    background-color: hsla(0, 0%, 0%, 0.54);\n    opacity: 0;\n    transition:\n      width     0ms 250ms,\n      height    0ms 250ms,\n      opacity 250ms;\n\n    // Show overlay when drawer is active\n    [data-md-toggle=\"drawer\"]:checked ~ & {\n      width: 100%;\n      height: 100%;\n      opacity: 1;\n      transition:\n        width     0ms,\n        height    0ms,\n        opacity 250ms;\n    }\n  }\n}\n", "////\n/// Copyright (c) 2016-2022 Martin Donath \n///\n/// Permission is hereby granted, free of charge, to any person obtaining a\n/// copy of this software and associated documentation files (the \"Software\"),\n/// to deal in the Software without restriction, including without limitation\n/// the rights to use, copy, modify, merge, publish, distribute, sublicense,\n/// and/or sell copies of the Software, and to permit persons to whom the\n/// Software is furnished to do so, subject to the following conditions:\n///\n/// The above copyright notice and this permission notice shall be included in\n/// all copies or substantial portions of the Software.\n///\n/// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n/// FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL\n/// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n/// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n/// DEALINGS\n////\n\n// ----------------------------------------------------------------------------\n// Keyframes\n// ----------------------------------------------------------------------------\n\n// Show repository facts\n@keyframes facts {\n  0% {\n    height: 0;\n  }\n\n  100% {\n    height: px2rem(13px);\n  }\n}\n\n// Show repository fact\n@keyframes fact {\n  0% {\n    transform: translateY(100%);\n    opacity: 0;\n  }\n\n  50% {\n    opacity: 0;\n  }\n\n  100% {\n    transform: translateY(0%);\n    opacity: 1;\n  }\n}\n\n// ----------------------------------------------------------------------------\n// Rules\n// ----------------------------------------------------------------------------\n\n// Repository information variables\n:root {\n  --md-source-forks-icon: svg-load(\"octicons/repo-forked-16.svg\");\n  --md-source-repositories-icon: svg-load(\"octicons/repo-16.svg\");\n  --md-source-stars-icon: svg-load(\"octicons/star-16.svg\");\n  --md-source-version-icon: svg-load(\"octicons/tag-16.svg\");\n}\n\n// ----------------------------------------------------------------------------\n\n// Repository information\n.md-source {\n  display: block;\n  font-size: px2rem(13px);\n  line-height: 1.2;\n  white-space: nowrap;\n  outline-color: var(--md-accent-fg-color);\n  // Hack: promote to own layer to reduce jitter\n  backface-visibility: hidden;\n  transition: opacity 250ms;\n\n  // Repository information on hover\n  &:hover {\n    opacity: 0.7;\n  }\n\n  // Repository icon\n  &__icon {\n    display: inline-block;\n    width: px2rem(40px);\n    height: px2rem(48px);\n    vertical-align: middle;\n\n    // Align with margin only (as opposed to normal button alignment)\n    svg {\n      margin-top: px2rem(12px);\n      margin-inline-start: px2rem(12px);\n    }\n\n    // Adjust spacing if icon is present\n    + .md-source__repository {\n      margin-inline-start: px2rem(-40px);\n      padding-inline-start: px2rem(40px);\n    }\n  }\n\n  // Repository name\n  &__repository {\n    display: inline-block;\n    max-width: calc(100% - #{px2rem(24px)});\n    margin-inline-start: px2rem(12px);\n    overflow: hidden;\n    text-overflow: ellipsis;\n    vertical-align: middle;\n  }\n\n  // Repository facts\n  &__facts {\n    display: flex;\n    gap: px2rem(8px);\n    width: 100%;\n    margin: px2rem(2px) 0 0;\n    padding: 0;\n    overflow: hidden;\n    font-size: px2rem(11px);\n    list-style-type: none;\n    opacity: 0.75;\n\n    // Show after the data was loaded\n    .md-source__repository--active & {\n      animation: facts 250ms ease-in;\n    }\n  }\n\n  // Repository fact\n  &__fact {\n    overflow: hidden;\n    text-overflow: ellipsis;\n\n    // Show after the data was loaded\n    .md-source__repository--active & {\n      animation: fact 400ms ease-out;\n    }\n\n    // Repository fact icon\n    &::before {\n      display: inline-block;\n      width: px2rem(12px);\n      height: px2rem(12px);\n      margin-inline-end: px2rem(2px);\n      vertical-align: text-top;\n      background-color: currentcolor;\n      mask-position: center;\n      mask-repeat: no-repeat;\n      mask-size: contain;\n      content: \"\";\n    }\n\n    // Adjust spacing for 2nd+ fact\n    &:nth-child(1n+2) {\n      flex-shrink: 0;\n    }\n\n    // Repository fact: version\n    &--version::before {\n      mask-image: var(--md-source-version-icon);\n    }\n\n    // Repository fact: stars\n    &--stars::before {\n      mask-image: var(--md-source-stars-icon);\n    }\n\n    // Repository fact: forks\n    &--forks::before {\n      mask-image: var(--md-source-forks-icon);\n    }\n\n    // Repository fact: repositories\n    &--repositories::before {\n      mask-image: var(--md-source-repositories-icon);\n    }\n  }\n}\n", "////\n/// Copyright (c) 2016-2022 Martin Donath \n///\n/// Permission is hereby granted, free of charge, to any person obtaining a\n/// copy of this software and associated documentation files (the \"Software\"),\n/// to deal in the Software without restriction, including without limitation\n/// the rights to use, copy, modify, merge, publish, distribute, sublicense,\n/// and/or sell copies of the Software, and to permit persons to whom the\n/// Software is furnished to do so, subject to the following conditions:\n///\n/// The above copyright notice and this permission notice shall be included in\n/// all copies or substantial portions of the Software.\n///\n/// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n/// FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL\n/// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n/// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n/// DEALINGS\n////\n\n// ----------------------------------------------------------------------------\n// Rules\n// ----------------------------------------------------------------------------\n\n// Navigation tabs\n.md-tabs {\n  // Must be higher than the z-index of the back-to-top button, or the button\n  // will overlay the navigation tabs bar when scrolling up fast.\n  z-index: 3;\n  display: block;\n  width: 100%;\n  overflow: auto;\n  color: var(--md-primary-bg-color);\n  line-height: 1.3;\n  background-color: var(--md-primary-fg-color);\n\n  // [print]: Hide tabs\n  @media print {\n    display: none;\n  }\n\n  // [tablet -]: Hide tabs\n  @include break-to-device(tablet) {\n    display: none;\n  }\n\n  // Navigation tabs are hidden\n  &[hidden] {\n    pointer-events: none;\n  }\n\n  // Navigation tabs list\n  &__list {\n    margin: 0;\n    margin-inline-start: px2rem(4px);\n    padding: 0;\n    white-space: nowrap;\n    list-style: none;\n    contain: content;\n  }\n\n  // Navigation tabs item\n  &__item {\n    display: inline-block;\n    height: px2rem(48px);\n    padding-inline: px2rem(12px);\n  }\n\n  // Navigation tabs link - could be defined as block elements and aligned via\n  // line height, but this would imply more repaints when scrolling\n  &__link {\n    display: block;\n    margin-top: px2rem(16px);\n    font-size: px2rem(14px);\n    outline-color: var(--md-accent-fg-color);\n    outline-offset: px2rem(4px);\n    // Hack: save a repaint when tabs are appearing on scrolling up\n    backface-visibility: hidden;\n    opacity: 0.7;\n    transition:\n      transform 400ms cubic-bezier(0.1, 0.7, 0.1, 1),\n      opacity   250ms;\n\n    // Active link and link on focus/hover\n    &--active,\n    &:is(:focus, :hover) {\n      color: inherit;\n      opacity: 1;\n    }\n\n    // Delay transitions by a small amount\n    @for $i from 2 through 16 {\n      .md-tabs__item:nth-child(#{$i}) & {\n        transition-delay: 20ms * ($i - 1);\n      }\n    }\n\n    // Hide tabs upon scrolling - disable transition to minimizes repaints\n    // while scrolling down, while scrolling up seems to be okay\n    .md-tabs[hidden] & {\n      transform: translateY(50%);\n      opacity: 0;\n      transition:\n        transform 0ms 100ms,\n        opacity 100ms;\n    }\n  }\n}\n", "////\n/// Copyright (c) 2016-2022 Martin Donath \n///\n/// Permission is hereby granted, free of charge, to any person obtaining a\n/// copy of this software and associated documentation files (the \"Software\"),\n/// to deal in the Software without restriction, including without limitation\n/// the rights to use, copy, modify, merge, publish, distribute, sublicense,\n/// and/or sell copies of the Software, and to permit persons to whom the\n/// Software is furnished to do so, subject to the following conditions:\n///\n/// The above copyright notice and this permission notice shall be included in\n/// all copies or substantial portions of the Software.\n///\n/// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n/// FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL\n/// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n/// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n/// DEALINGS\n////\n\n// ----------------------------------------------------------------------------\n// Rules\n// ----------------------------------------------------------------------------\n\n// Tag variables\n:root {\n  --md-tag-icon: svg-load(\"material/pound.svg\");\n}\n\n// ----------------------------------------------------------------------------\n\n// Scoped in typesetted content to match specificity of regular content\n.md-typeset {\n\n  // Tag list\n  .md-tags {\n    margin-top: px2em(-2px);\n    margin-bottom: px2em(12px);\n  }\n\n  // Tag\n  .md-tag {\n    display: inline-block;\n    margin-inline-end: 0.5em;\n    margin-bottom: 0.5em;\n    padding: px2em(4px, 12.8px) px2em(12px, 12.8px);\n    font-weight: 700;\n    font-size: px2rem(12.8px);\n    line-height: 1.6;\n    letter-spacing: initial;\n    vertical-align: middle;\n    background: var(--md-default-fg-color--lightest);\n    border-radius: px2rem(48px);\n\n    // Linked tag\n    &[href] {\n      color: inherit;\n      outline: none;\n      -webkit-tap-highlight-color: transparent;\n      transition:\n        color            125ms,\n        background-color 125ms;\n\n      // Linked tag on focus/hover\n      &:focus,\n      &:hover {\n        color: var(--md-accent-bg-color);\n        background-color: var(--md-accent-fg-color);\n      }\n    }\n\n    // Tag inside headline\n    [id] > & {\n      vertical-align: text-top;\n    }\n  }\n\n  // Tag icon\n  .md-tag-icon {\n\n    // Tag icon content\n    &::before {\n      display: inline-block;\n      width: 1.2em;\n      height: 1.2em;\n      margin-right: 0.4em;\n      vertical-align: text-bottom;\n      background-color: var(--md-default-fg-color--lighter);\n      mask-image: var(--md-tag-icon);\n      mask-position: center;\n      mask-repeat: no-repeat;\n      mask-size: contain;\n      transition: background-color 125ms;\n      content: \"\";\n    }\n\n    // Linked tag on focus/hover\n    &:is(a:focus, a:hover)::before {\n      background-color: var(--md-accent-bg-color);\n    }\n  }\n}\n", "////\n/// Copyright (c) 2016-2022 Martin Donath \n///\n/// Permission is hereby granted, free of charge, to any person obtaining a\n/// copy of this software and associated documentation files (the \"Software\"),\n/// to deal in the Software without restriction, including without limitation\n/// the rights to use, copy, modify, merge, publish, distribute, sublicense,\n/// and/or sell copies of the Software, and to permit persons to whom the\n/// Software is furnished to do so, subject to the following conditions:\n///\n/// The above copyright notice and this permission notice shall be included in\n/// all copies or substantial portions of the Software.\n///\n/// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n/// FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL\n/// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n/// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n/// DEALINGS\n////\n\n// ----------------------------------------------------------------------------\n// Keyframes\n// ----------------------------------------------------------------------------\n\n// Continuous pulse animation\n@keyframes pulse {\n  0% {\n    box-shadow: 0 0 0 0 var(--md-default-fg-color--lightest);\n    transform: scale(0.95);\n  }\n\n  75% {\n    box-shadow: 0 0 0 px2em(10px) transparent;\n    transform: scale(1);\n  }\n\n  100% {\n    box-shadow: 0 0 0 0 transparent;\n    transform: scale(0.95);\n  }\n}\n\n// ----------------------------------------------------------------------------\n// Rules\n// ----------------------------------------------------------------------------\n\n// Tooltip variables\n:root {\n  --md-tooltip-width: #{px2rem(400px)};\n}\n\n// ----------------------------------------------------------------------------\n\n// Tooltip\n.md-tooltip {\n  position: absolute;\n  top: var(--md-tooltip-y);\n  left:\n    clamp(\n      var(--md-tooltip-0, #{px2rem(0px)}) + #{px2rem(16px)},\n      var(--md-tooltip-x),\n      100vw +\n      var(--md-tooltip-0, #{px2rem(0px)}) + #{px2rem(16px)} -\n      var(--md-tooltip-width) -\n      2 * #{px2rem(16px)}\n    );\n  // Hack: set an explicit `z-index` so we can transition it to ensure that any\n  // following elements are not overlaying the tooltip during the transition.\n  z-index: 0;\n  width: var(--md-tooltip-width);\n  max-width: calc(100vw - 2 * #{px2rem(16px)});\n  color: var(--md-default-fg-color);\n  font-family: var(--md-text-font-family);\n  background-color: var(--md-default-bg-color);\n  border-radius: px2rem(2px);\n  box-shadow: var(--md-shadow-z2);\n  transform: translateY(px2rem(-8px));\n  // Hack: promote to own layer to reduce jitter\n  backface-visibility: hidden;\n  opacity: 0;\n  transition:\n    transform 0ms 250ms,\n    opacity 250ms,\n    z-index 250ms;\n\n  // Active tooltip\n  &--active {\n    z-index: 2;\n    transform: translateY(0);\n    opacity: 1;\n    transition:\n      transform 250ms cubic-bezier(0.1, 0.7, 0.1, 1),\n      opacity   250ms,\n      z-index     0ms;\n  }\n\n  // Show outline on target and for keyboard devices\n  :is(.focus-visible > &, &:target) {\n    outline: var(--md-accent-fg-color) auto;\n  }\n\n  // Tooltip wrapper\n  &__inner {\n    padding: px2rem(16px);\n    font-size: px2rem(12.8px);\n\n    // Adjust spacing on first child\n    &.md-typeset > :first-child {\n      margin-top: 0;\n    }\n\n    // Adjust spacing on last child\n    &.md-typeset > :last-child {\n      margin-bottom: 0;\n    }\n  }\n}\n\n// ----------------------------------------------------------------------------\n\n// Annotation\n.md-annotation {\n  font-weight: 400;\n  white-space: normal;\n  outline: none;\n\n  // Adjust for right-to-left languages\n  [dir=\"rtl\"] & {\n    direction: rtl;\n  }\n\n  // Annotation is not hidden (e.g. when copying)\n  &:not([hidden]) {\n    display: inline-block;\n    // Hack: ensure that the line height doesn't exceed the line height of the\n    // hosting line, because it will lead to dancing pixels.\n    line-height: 1.325;\n  }\n\n  // Annotation index\n  &__index {\n    position: relative;\n    z-index: 0;\n    margin: 0 1ch;\n    font-size: px2em(13.6px, 16px);\n    font-family: var(--md-code-font-family);\n    outline: none;\n    cursor: pointer;\n    user-select: none;\n\n    // Hack: increase specificity to override default for anchors\n    .md-annotation & {\n      color: hsla(0, 0%, 100%, 1);\n      transition: z-index 250ms;\n\n      // Text link on focus/hover\n      &:is(:focus, :hover) {\n        color: hsla(0, 0%, 100%, 1);\n      }\n    }\n\n    // Annotation marker \u2013 the marker must be positioned absolutely behind\n    // the index, because it shouldn't impact the rendering of a code block.\n    // Otherwise, small rounding differences in browsers can sometimes mess up\n    // alignment of text following an annotation.\n    &::after {\n      position: absolute;\n      top: 0;\n      left: px2em(-2px);\n      z-index: -1;\n      // Hack: the first property is used as a fallback for older browsers\n      // which don't support the min/max/clamp math functions.\n      width: calc(100% + 1.2ch);\n      width: max(2.2ch, 100% + 1.2ch);\n      height: 2.2ch;\n      margin: 0 -0.4ch;\n      padding: 0 0.4ch;\n      background-color: var(--md-default-fg-color--lighter);\n      border-radius: 2ch;\n      transition:\n        color            250ms,\n        background-color 250ms;\n      content: \"\";\n\n      // [reduced motion]: Disable animation\n      @media not all and (prefers-reduced-motion) {\n\n        // Annotation marker is visible\n        [data-md-visible] > & {\n          animation: pulse 2000ms infinite;\n        }\n      }\n\n      // Annotation marker for active tooltip\n      .md-tooltip--active + & {\n        transition:\n          color            250ms,\n          background-color 250ms;\n        animation: none;\n      }\n    }\n\n    // Annotation index in code block\n    code & {\n      font-size: inherit;\n      font-family: var(--md-code-font-family);\n    }\n\n    // Annotation index for active tooltip or on hover\n    :is(.md-tooltip--active + &, :hover > &) {\n      color: var(--md-accent-bg-color);\n\n      // Annotation marker\n      &::after {\n        background-color: var(--md-accent-fg-color);\n      }\n    }\n\n    // Annotation index for active tooltip\n    .md-tooltip--active + & {\n      z-index: 2;\n      transition: none;\n      animation: none;\n    }\n\n    // Annotation marker\n    [data-md-annotation-id] {\n      display: inline-block;\n      line-height: 90%;\n\n      // Annotation marker content\n      &::before {\n        display: inline-block;\n        padding-bottom: 0.1em;\n        vertical-align: 0.065em;\n        transform: scale(1.15);\n        transition: transform 400ms cubic-bezier(0.1, 0.7, 0.1, 1);\n        content: attr(data-md-annotation-id);\n\n        // [not print]: if we're not in print mode, show a `+` sign instead of\n        // the original numbers, as context is already given by the position.\n        @media not print {\n          content: \"+\";\n\n          // Annotation marker content on focus\n          :focus-within > & {\n            transform: scale(1.25) rotate(45deg);\n          }\n        }\n      }\n    }\n  }\n}\n", "////\n/// Copyright (c) 2016-2022 Martin Donath \n///\n/// Permission is hereby granted, free of charge, to any person obtaining a\n/// copy of this software and associated documentation files (the \"Software\"),\n/// to deal in the Software without restriction, including without limitation\n/// the rights to use, copy, modify, merge, publish, distribute, sublicense,\n/// and/or sell copies of the Software, and to permit persons to whom the\n/// Software is furnished to do so, subject to the following conditions:\n///\n/// The above copyright notice and this permission notice shall be included in\n/// all copies or substantial portions of the Software.\n///\n/// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n/// FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL\n/// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n/// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n/// DEALINGS\n////\n\n// ----------------------------------------------------------------------------\n// Rules\n// ----------------------------------------------------------------------------\n\n// Back-to-top button\n.md-top {\n  position: fixed;\n  top: px2rem(48px + 16px);\n  z-index: 2;\n  display: block;\n  margin-inline-start: 50%;\n  padding: px2rem(8px) px2rem(16px);\n  color: var(--md-default-fg-color--light);\n  font-size: px2rem(14px);\n  background-color: var(--md-default-bg-color);\n  border-radius: px2rem(32px);\n  outline: none;\n  box-shadow: var(--md-shadow-z2);\n  transform: translate(-50%, 0);\n  transition:\n    color            125ms,\n    background-color 125ms,\n    transform        125ms cubic-bezier(0.4, 0, 0.2, 1),\n    opacity          125ms;\n\n  // [print]: Hide back-to-top button\n  @media print {\n    display: none;\n  }\n\n  // Adjust for right-to-left languages\n  [dir=\"rtl\"] & {\n    transform: translate(50%, 0);\n  }\n\n  // Back-to-top button is hidden\n  &[hidden] {\n    transform: translate(-50%, px2rem(4px));\n    opacity: 0;\n    transition-duration: 0ms;\n    pointer-events: none;\n\n    // Adjust for right-to-left languages\n    [dir=\"rtl\"] & {\n      transform: translate(50%, px2rem(4px));\n    }\n  }\n\n  // Back-to-top button on focus/hover\n  &:is(:focus, :hover) {\n    color: var(--md-accent-bg-color);\n    background-color: var(--md-accent-fg-color);\n  }\n\n  // Inline icon\n  svg {\n    display: inline-block;\n    vertical-align: -0.5em;\n  }\n}\n", "////\n/// Copyright (c) 2016-2022 Martin Donath \n///\n/// Permission is hereby granted, free of charge, to any person obtaining a\n/// copy of this software and associated documentation files (the \"Software\"),\n/// to deal in the Software without restriction, including without limitation\n/// the rights to use, copy, modify, merge, publish, distribute, sublicense,\n/// and/or sell copies of the Software, and to permit persons to whom the\n/// Software is furnished to do so, subject to the following conditions:\n///\n/// The above copyright notice and this permission notice shall be included in\n/// all copies or substantial portions of the Software.\n///\n/// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n/// FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL\n/// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n/// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n/// DEALINGS\n////\n\n// ----------------------------------------------------------------------------\n// Keyframes\n// ----------------------------------------------------------------------------\n\n// See https://github.com/squidfunk/mkdocs-material/issues/2429\n@keyframes hoverfix {\n  0% {\n    pointer-events: none;\n  }\n}\n\n// ----------------------------------------------------------------------------\n// Rules\n// ----------------------------------------------------------------------------\n\n// Version selection variables\n:root {\n  --md-version-icon: svg-load(\"fontawesome/solid/caret-down.svg\");\n}\n\n// ----------------------------------------------------------------------------\n\n// Version selection\n.md-version {\n  flex-shrink: 0;\n  height: px2rem(48px);\n  font-size: px2rem(16px);\n\n  // Current selection\n  &__current {\n    position: relative;\n    // Hack: in general, we would use `vertical-align` to align the version at\n    // the bottom with the title, but since the list uses absolute positioning,\n    // this won't work consistently. Furthermore, we would need to use inline\n    // positioning to align the links, which looks jagged.\n    top: px2rem(1px);\n    margin-inline: px2rem(28px) px2rem(8px);\n    color: inherit;\n    outline: none;\n    cursor: pointer;\n\n    // Version selection icon\n    &::after {\n      display: inline-block;\n      width: px2rem(8px);\n      height: px2rem(12px);\n      margin-inline-start: px2rem(8px);\n      background-color: currentcolor;\n      mask-image: var(--md-version-icon);\n      mask-position: center;\n      mask-repeat: no-repeat;\n      mask-size: contain;\n      content: \"\";\n    }\n  }\n\n  // Version selection list\n  &__list {\n    position: absolute;\n    top: px2rem(3px);\n    z-index: 3;\n    max-height: 0;\n    margin: px2rem(4px) px2rem(16px);\n    padding: 0;\n    overflow: auto;\n    color: var(--md-default-fg-color);\n    list-style-type: none;\n    background-color: var(--md-default-bg-color);\n    border-radius: px2rem(2px);\n    box-shadow: var(--md-shadow-z2);\n    opacity: 0;\n    transition:\n      max-height 0ms 500ms,\n      opacity  250ms 250ms;\n    scroll-snap-type: y mandatory;\n\n    // Version selection list on parent focus/hover\n    .md-version:is(:focus-within, :hover) & {\n      max-height: px2rem(200px);\n      opacity: 1;\n      transition:\n        max-height 0ms,\n        opacity  250ms;\n    }\n\n    // Fix hover on touch devices\n    @media (pointer: coarse) {\n\n      // Switch off on hover\n      .md-version:hover & {\n        animation: hoverfix 250ms forwards;\n      }\n\n      // Enable on focus\n      .md-version:focus-within & {\n        animation: none;\n      }\n    }\n  }\n\n  // Version selection item\n  &__item {\n    line-height: px2rem(36px);\n  }\n\n  // Version selection link\n  &__link {\n    display: block;\n    width: 100%;\n    padding-inline: px2rem(12px) px2rem(24px);\n    white-space: nowrap;\n    outline: none;\n    cursor: pointer;\n    transition:\n      color            250ms,\n      background-color 250ms;\n    scroll-snap-align: start;\n\n    // Link on focus/hover\n    &:is(:focus, :hover) {\n      color: var(--md-accent-fg-color);\n    }\n\n    // Link on focus\n    &:focus {\n      background-color: var(--md-default-fg-color--lightest);\n    }\n  }\n}\n", "////\n/// Copyright (c) 2016-2022 Martin Donath \n///\n/// Permission is hereby granted, free of charge, to any person obtaining a\n/// copy of this software and associated documentation files (the \"Software\"),\n/// to deal in the Software without restriction, including without limitation\n/// the rights to use, copy, modify, merge, publish, distribute, sublicense,\n/// and/or sell copies of the Software, and to permit persons to whom the\n/// Software is furnished to do so, subject to the following conditions:\n///\n/// The above copyright notice and this permission notice shall be included in\n/// all copies or substantial portions of the Software.\n///\n/// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n/// FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL\n/// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n/// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n/// DEALINGS\n////\n\n@use \"sass:color\";\n@use \"sass:list\";\n\n// ----------------------------------------------------------------------------\n// Variables\n// ----------------------------------------------------------------------------\n\n/// Admonition flavours\n$admonitions: (\n  note:                       pencil-circle $clr-blue-a200,\n  abstract summary tldr:      clipboard-text $clr-light-blue-a400,\n  info todo:                  information $clr-cyan-a700,\n  tip hint important:         fire $clr-teal-a700,\n  success check done:         check $clr-green-a700,\n  question help faq:          help-circle $clr-light-green-a700,\n  warning caution attention:  alert $clr-orange-a400,\n  failure fail missing:       close $clr-red-a200,\n  danger error:               lightning-bolt-circle $clr-red-a400,\n  bug:                        shield-bug $clr-pink-a400,\n  example:                    test-tube $clr-deep-purple-a200,\n  quote cite:                 format-quote-close $clr-grey\n) !default;\n\n// ----------------------------------------------------------------------------\n// Rules: layout\n// ----------------------------------------------------------------------------\n\n// Admonition variables\n:root {\n  @each $names, $props in $admonitions {\n    --md-admonition-icon--#{nth($names, 1)}:\n      svg-load(\"material/#{nth($props, 1)}.svg\");\n  }\n}\n\n// ----------------------------------------------------------------------------\n\n// Scoped in typesetted content to match specificity of regular content\n.md-typeset {\n\n  // Admonition - note that all styles also apply to details tags, which are\n  // rendered as collapsible admonitions with summary elements as titles.\n  .admonition,\n  details {\n    display: flow-root;\n    margin: px2em(20px, 12.8px) 0;\n    padding: 0 px2rem(12px);\n    color: var(--md-admonition-fg-color);\n    font-size: px2rem(12.8px);\n    page-break-inside: avoid;\n    background-color: var(--md-admonition-bg-color);\n    border: px2rem(1px) solid $clr-blue-a200;\n    border-radius: px2rem(4px);\n    box-shadow: var(--md-shadow-z1);\n\n    // [print]: Omit shadow as it may lead to rendering errors\n    @media print {\n      box-shadow: none;\n    }\n\n    // Hack: Chrome exhibits a weird issue where it will set nested elements to\n    // content-box. Doesn't happen in other browsers, so looks like a bug.\n    > * {\n      box-sizing: border-box;\n    }\n\n    // Adjust vertical spacing for nested admonitions\n    :is(.admonition, details) {\n      margin-top: 1em;\n      margin-bottom: 1em;\n    }\n\n    // Adjust spacing for contained table wrappers\n    .md-typeset__scrollwrap {\n      margin: 1em px2rem(-12px);\n    }\n\n    // Adjust spacing for contained tables\n    .md-typeset__table {\n      padding: 0 px2rem(12px);\n    }\n\n    // Adjust spacing for single-child tabbed block container\n    > .tabbed-set:only-child {\n      margin-top: 0;\n    }\n\n    // Adjust spacing on last child\n    html & > :last-child {\n      margin-bottom: px2rem(12px);\n    }\n  }\n\n  // Admonition title\n  .admonition-title,\n  summary {\n    position: relative;\n    margin-block: 0;\n    margin-inline: px2rem(-12px);\n    padding-block: px2rem(8px);\n    padding-inline: px2rem(40px) px2rem(12px);\n    font-weight: 700;\n    background-color: color.adjust($clr-blue-a200, $alpha: -0.9);\n    border: none;\n    border-inline-start-width: px2rem(4px);\n    border-start-start-radius: px2rem(2px);\n    border-start-end-radius: px2rem(2px);\n\n    // Adjust spacing for title-only admonitions\n    html &:last-child {\n      margin-bottom: 0;\n    }\n\n    // Admonition icon\n    &::before {\n      position: absolute;\n      top: px2em(10px);\n      inset-inline-start: px2rem(12px);\n      width: px2rem(20px);\n      height: px2rem(20px);\n      background-color: $clr-blue-a200;\n      mask-image: var(--md-admonition-icon--note);\n      mask-position: center;\n      mask-repeat: no-repeat;\n      mask-size: contain;\n      content: \"\";\n    }\n\n    // Inline code block\n    code {\n      box-shadow: 0 0 0 px2rem(1px) var(--md-default-fg-color--lightest);\n    }\n  }\n}\n\n// ----------------------------------------------------------------------------\n// Rules: flavours\n// ----------------------------------------------------------------------------\n\n// Define admonition flavors\n@each $names, $props in $admonitions {\n  $name: list.nth($names, 1);\n  $tint: list.nth($props, 2);\n\n  // Admonition flavour selectors\n  $flavours: ();\n  @each $name in $names {\n    $flavours: list.join($flavours, \".#{$name}\", $separator: comma);\n  }\n\n  // Admonition flavour\n  .md-typeset :is(.admonition, details):is(#{$flavours}) {\n    border-color: $tint;\n  }\n\n  // Admonition flavour title\n  .md-typeset :is(#{$flavours}) > :is(.admonition-title, summary) {\n    background-color: color.adjust($tint, $alpha: -0.9);\n\n    // Admonition icon\n    &::before {\n      background-color: $tint;\n      mask-image: var(--md-admonition-icon--#{$name});\n    }\n\n    // Details marker\n    &::after {\n      color: $tint;\n    }\n  }\n}\n", "// ==========================================================================\n//\n// Name:        UI Color Palette\n// Description: The color palette of material design.\n// Version:     2.3.1\n//\n// Author:      Denis Malinochkin\n// Git:         https://github.com/mrmlnc/material-color\n//\n// twitter:     @mrmlnc\n//\n// ==========================================================================\n\n\n//\n// List of base colors\n//\n\n// $clr-red\n// $clr-pink\n// $clr-purple\n// $clr-deep-purple\n// $clr-indigo\n// $clr-blue\n// $clr-light-blue\n// $clr-cyan\n// $clr-teal\n// $clr-green\n// $clr-light-green\n// $clr-lime\n// $clr-yellow\n// $clr-amber\n// $clr-orange\n// $clr-deep-orange\n// $clr-brown\n// $clr-grey\n// $clr-blue-grey\n// $clr-black\n// $clr-white\n\n\n//\n// Red\n//\n\n$clr-red-list: (\n  \"base\": #f44336,\n  \"50\":   #ffebee,\n  \"100\":  #ffcdd2,\n  \"200\":  #ef9a9a,\n  \"300\":  #e57373,\n  \"400\":  #ef5350,\n  \"500\":  #f44336,\n  \"600\":  #e53935,\n  \"700\":  #d32f2f,\n  \"800\":  #c62828,\n  \"900\":  #b71c1c,\n  \"a100\": #ff8a80,\n  \"a200\": #ff5252,\n  \"a400\": #ff1744,\n  \"a700\": #d50000\n);\n\n$clr-red:      map-get($clr-red-list, \"base\");\n\n$clr-red-50:   map-get($clr-red-list, \"50\");\n$clr-red-100:  map-get($clr-red-list, \"100\");\n$clr-red-200:  map-get($clr-red-list, \"200\");\n$clr-red-300:  map-get($clr-red-list, \"300\");\n$clr-red-400:  map-get($clr-red-list, \"400\");\n$clr-red-500:  map-get($clr-red-list, \"500\");\n$clr-red-600:  map-get($clr-red-list, \"600\");\n$clr-red-700:  map-get($clr-red-list, \"700\");\n$clr-red-800:  map-get($clr-red-list, \"800\");\n$clr-red-900:  map-get($clr-red-list, \"900\");\n$clr-red-a100: map-get($clr-red-list, \"a100\");\n$clr-red-a200: map-get($clr-red-list, \"a200\");\n$clr-red-a400: map-get($clr-red-list, \"a400\");\n$clr-red-a700: map-get($clr-red-list, \"a700\");\n\n\n//\n// Pink\n//\n\n$clr-pink-list: (\n  \"base\": #e91e63,\n  \"50\":   #fce4ec,\n  \"100\":  #f8bbd0,\n  \"200\":  #f48fb1,\n  \"300\":  #f06292,\n  \"400\":  #ec407a,\n  \"500\":  #e91e63,\n  \"600\":  #d81b60,\n  \"700\":  #c2185b,\n  \"800\":  #ad1457,\n  \"900\":  #880e4f,\n  \"a100\": #ff80ab,\n  \"a200\": #ff4081,\n  \"a400\": #f50057,\n  \"a700\": #c51162\n);\n\n$clr-pink:      map-get($clr-pink-list, \"base\");\n\n$clr-pink-50:   map-get($clr-pink-list, \"50\");\n$clr-pink-100:  map-get($clr-pink-list, \"100\");\n$clr-pink-200:  map-get($clr-pink-list, \"200\");\n$clr-pink-300:  map-get($clr-pink-list, \"300\");\n$clr-pink-400:  map-get($clr-pink-list, \"400\");\n$clr-pink-500:  map-get($clr-pink-list, \"500\");\n$clr-pink-600:  map-get($clr-pink-list, \"600\");\n$clr-pink-700:  map-get($clr-pink-list, \"700\");\n$clr-pink-800:  map-get($clr-pink-list, \"800\");\n$clr-pink-900:  map-get($clr-pink-list, \"900\");\n$clr-pink-a100: map-get($clr-pink-list, \"a100\");\n$clr-pink-a200: map-get($clr-pink-list, \"a200\");\n$clr-pink-a400: map-get($clr-pink-list, \"a400\");\n$clr-pink-a700: map-get($clr-pink-list, \"a700\");\n\n\n//\n// Purple\n//\n\n$clr-purple-list: (\n  \"base\": #9c27b0,\n  \"50\":   #f3e5f5,\n  \"100\":  #e1bee7,\n  \"200\":  #ce93d8,\n  \"300\":  #ba68c8,\n  \"400\":  #ab47bc,\n  \"500\":  #9c27b0,\n  \"600\":  #8e24aa,\n  \"700\":  #7b1fa2,\n  \"800\":  #6a1b9a,\n  \"900\":  #4a148c,\n  \"a100\": #ea80fc,\n  \"a200\": #e040fb,\n  \"a400\": #d500f9,\n  \"a700\": #aa00ff\n);\n\n$clr-purple:      map-get($clr-purple-list, \"base\");\n\n$clr-purple-50:   map-get($clr-purple-list, \"50\");\n$clr-purple-100:  map-get($clr-purple-list, \"100\");\n$clr-purple-200:  map-get($clr-purple-list, \"200\");\n$clr-purple-300:  map-get($clr-purple-list, \"300\");\n$clr-purple-400:  map-get($clr-purple-list, \"400\");\n$clr-purple-500:  map-get($clr-purple-list, \"500\");\n$clr-purple-600:  map-get($clr-purple-list, \"600\");\n$clr-purple-700:  map-get($clr-purple-list, \"700\");\n$clr-purple-800:  map-get($clr-purple-list, \"800\");\n$clr-purple-900:  map-get($clr-purple-list, \"900\");\n$clr-purple-a100: map-get($clr-purple-list, \"a100\");\n$clr-purple-a200: map-get($clr-purple-list, \"a200\");\n$clr-purple-a400: map-get($clr-purple-list, \"a400\");\n$clr-purple-a700: map-get($clr-purple-list, \"a700\");\n\n\n//\n// Deep purple\n//\n\n$clr-deep-purple-list: (\n  \"base\": #673ab7,\n  \"50\":   #ede7f6,\n  \"100\":  #d1c4e9,\n  \"200\":  #b39ddb,\n  \"300\":  #9575cd,\n  \"400\":  #7e57c2,\n  \"500\":  #673ab7,\n  \"600\":  #5e35b1,\n  \"700\":  #512da8,\n  \"800\":  #4527a0,\n  \"900\":  #311b92,\n  \"a100\": #b388ff,\n  \"a200\": #7c4dff,\n  \"a400\": #651fff,\n  \"a700\": #6200ea\n);\n\n$clr-deep-purple:      map-get($clr-deep-purple-list, \"base\");\n\n$clr-deep-purple-50:   map-get($clr-deep-purple-list, \"50\");\n$clr-deep-purple-100:  map-get($clr-deep-purple-list, \"100\");\n$clr-deep-purple-200:  map-get($clr-deep-purple-list, \"200\");\n$clr-deep-purple-300:  map-get($clr-deep-purple-list, \"300\");\n$clr-deep-purple-400:  map-get($clr-deep-purple-list, \"400\");\n$clr-deep-purple-500:  map-get($clr-deep-purple-list, \"500\");\n$clr-deep-purple-600:  map-get($clr-deep-purple-list, \"600\");\n$clr-deep-purple-700:  map-get($clr-deep-purple-list, \"700\");\n$clr-deep-purple-800:  map-get($clr-deep-purple-list, \"800\");\n$clr-deep-purple-900:  map-get($clr-deep-purple-list, \"900\");\n$clr-deep-purple-a100: map-get($clr-deep-purple-list, \"a100\");\n$clr-deep-purple-a200: map-get($clr-deep-purple-list, \"a200\");\n$clr-deep-purple-a400: map-get($clr-deep-purple-list, \"a400\");\n$clr-deep-purple-a700: map-get($clr-deep-purple-list, \"a700\");\n\n\n//\n// Indigo\n//\n\n$clr-indigo-list: (\n  \"base\": #3f51b5,\n  \"50\":   #e8eaf6,\n  \"100\":  #c5cae9,\n  \"200\":  #9fa8da,\n  \"300\":  #7986cb,\n  \"400\":  #5c6bc0,\n  \"500\":  #3f51b5,\n  \"600\":  #3949ab,\n  \"700\":  #303f9f,\n  \"800\":  #283593,\n  \"900\":  #1a237e,\n  \"a100\": #8c9eff,\n  \"a200\": #536dfe,\n  \"a400\": #3d5afe,\n  \"a700\": #304ffe\n);\n\n$clr-indigo:      map-get($clr-indigo-list, \"base\");\n\n$clr-indigo-50:   map-get($clr-indigo-list, \"50\");\n$clr-indigo-100:  map-get($clr-indigo-list, \"100\");\n$clr-indigo-200:  map-get($clr-indigo-list, \"200\");\n$clr-indigo-300:  map-get($clr-indigo-list, \"300\");\n$clr-indigo-400:  map-get($clr-indigo-list, \"400\");\n$clr-indigo-500:  map-get($clr-indigo-list, \"500\");\n$clr-indigo-600:  map-get($clr-indigo-list, \"600\");\n$clr-indigo-700:  map-get($clr-indigo-list, \"700\");\n$clr-indigo-800:  map-get($clr-indigo-list, \"800\");\n$clr-indigo-900:  map-get($clr-indigo-list, \"900\");\n$clr-indigo-a100: map-get($clr-indigo-list, \"a100\");\n$clr-indigo-a200: map-get($clr-indigo-list, \"a200\");\n$clr-indigo-a400: map-get($clr-indigo-list, \"a400\");\n$clr-indigo-a700: map-get($clr-indigo-list, \"a700\");\n\n\n//\n// Blue\n//\n\n$clr-blue-list: (\n  \"base\": #2196f3,\n  \"50\":   #e3f2fd,\n  \"100\":  #bbdefb,\n  \"200\":  #90caf9,\n  \"300\":  #64b5f6,\n  \"400\":  #42a5f5,\n  \"500\":  #2196f3,\n  \"600\":  #1e88e5,\n  \"700\":  #1976d2,\n  \"800\":  #1565c0,\n  \"900\":  #0d47a1,\n  \"a100\": #82b1ff,\n  \"a200\": #448aff,\n  \"a400\": #2979ff,\n  \"a700\": #2962ff\n);\n\n$clr-blue:      map-get($clr-blue-list, \"base\");\n\n$clr-blue-50:   map-get($clr-blue-list, \"50\");\n$clr-blue-100:  map-get($clr-blue-list, \"100\");\n$clr-blue-200:  map-get($clr-blue-list, \"200\");\n$clr-blue-300:  map-get($clr-blue-list, \"300\");\n$clr-blue-400:  map-get($clr-blue-list, \"400\");\n$clr-blue-500:  map-get($clr-blue-list, \"500\");\n$clr-blue-600:  map-get($clr-blue-list, \"600\");\n$clr-blue-700:  map-get($clr-blue-list, \"700\");\n$clr-blue-800:  map-get($clr-blue-list, \"800\");\n$clr-blue-900:  map-get($clr-blue-list, \"900\");\n$clr-blue-a100: map-get($clr-blue-list, \"a100\");\n$clr-blue-a200: map-get($clr-blue-list, \"a200\");\n$clr-blue-a400: map-get($clr-blue-list, \"a400\");\n$clr-blue-a700: map-get($clr-blue-list, \"a700\");\n\n\n//\n// Light Blue\n//\n\n$clr-light-blue-list: (\n  \"base\": #03a9f4,\n  \"50\":   #e1f5fe,\n  \"100\":  #b3e5fc,\n  \"200\":  #81d4fa,\n  \"300\":  #4fc3f7,\n  \"400\":  #29b6f6,\n  \"500\":  #03a9f4,\n  \"600\":  #039be5,\n  \"700\":  #0288d1,\n  \"800\":  #0277bd,\n  \"900\":  #01579b,\n  \"a100\": #80d8ff,\n  \"a200\": #40c4ff,\n  \"a400\": #00b0ff,\n  \"a700\": #0091ea\n);\n\n$clr-light-blue:      map-get($clr-light-blue-list, \"base\");\n\n$clr-light-blue-50:   map-get($clr-light-blue-list, \"50\");\n$clr-light-blue-100:  map-get($clr-light-blue-list, \"100\");\n$clr-light-blue-200:  map-get($clr-light-blue-list, \"200\");\n$clr-light-blue-300:  map-get($clr-light-blue-list, \"300\");\n$clr-light-blue-400:  map-get($clr-light-blue-list, \"400\");\n$clr-light-blue-500:  map-get($clr-light-blue-list, \"500\");\n$clr-light-blue-600:  map-get($clr-light-blue-list, \"600\");\n$clr-light-blue-700:  map-get($clr-light-blue-list, \"700\");\n$clr-light-blue-800:  map-get($clr-light-blue-list, \"800\");\n$clr-light-blue-900:  map-get($clr-light-blue-list, \"900\");\n$clr-light-blue-a100: map-get($clr-light-blue-list, \"a100\");\n$clr-light-blue-a200: map-get($clr-light-blue-list, \"a200\");\n$clr-light-blue-a400: map-get($clr-light-blue-list, \"a400\");\n$clr-light-blue-a700: map-get($clr-light-blue-list, \"a700\");\n\n\n//\n// Cyan\n//\n\n$clr-cyan-list: (\n  \"base\": #00bcd4,\n  \"50\":   #e0f7fa,\n  \"100\":  #b2ebf2,\n  \"200\":  #80deea,\n  \"300\":  #4dd0e1,\n  \"400\":  #26c6da,\n  \"500\":  #00bcd4,\n  \"600\":  #00acc1,\n  \"700\":  #0097a7,\n  \"800\":  #00838f,\n  \"900\":  #006064,\n  \"a100\": #84ffff,\n  \"a200\": #18ffff,\n  \"a400\": #00e5ff,\n  \"a700\": #00b8d4\n);\n\n$clr-cyan:      map-get($clr-cyan-list, \"base\");\n\n$clr-cyan-50:   map-get($clr-cyan-list, \"50\");\n$clr-cyan-100:  map-get($clr-cyan-list, \"100\");\n$clr-cyan-200:  map-get($clr-cyan-list, \"200\");\n$clr-cyan-300:  map-get($clr-cyan-list, \"300\");\n$clr-cyan-400:  map-get($clr-cyan-list, \"400\");\n$clr-cyan-500:  map-get($clr-cyan-list, \"500\");\n$clr-cyan-600:  map-get($clr-cyan-list, \"600\");\n$clr-cyan-700:  map-get($clr-cyan-list, \"700\");\n$clr-cyan-800:  map-get($clr-cyan-list, \"800\");\n$clr-cyan-900:  map-get($clr-cyan-list, \"900\");\n$clr-cyan-a100: map-get($clr-cyan-list, \"a100\");\n$clr-cyan-a200: map-get($clr-cyan-list, \"a200\");\n$clr-cyan-a400: map-get($clr-cyan-list, \"a400\");\n$clr-cyan-a700: map-get($clr-cyan-list, \"a700\");\n\n\n//\n// Teal\n//\n\n$clr-teal-list: (\n  \"base\": #009688,\n  \"50\":   #e0f2f1,\n  \"100\":  #b2dfdb,\n  \"200\":  #80cbc4,\n  \"300\":  #4db6ac,\n  \"400\":  #26a69a,\n  \"500\":  #009688,\n  \"600\":  #00897b,\n  \"700\":  #00796b,\n  \"800\":  #00695c,\n  \"900\":  #004d40,\n  \"a100\": #a7ffeb,\n  \"a200\": #64ffda,\n  \"a400\": #1de9b6,\n  \"a700\": #00bfa5\n);\n\n$clr-teal:      map-get($clr-teal-list, \"base\");\n\n$clr-teal-50:   map-get($clr-teal-list, \"50\");\n$clr-teal-100:  map-get($clr-teal-list, \"100\");\n$clr-teal-200:  map-get($clr-teal-list, \"200\");\n$clr-teal-300:  map-get($clr-teal-list, \"300\");\n$clr-teal-400:  map-get($clr-teal-list, \"400\");\n$clr-teal-500:  map-get($clr-teal-list, \"500\");\n$clr-teal-600:  map-get($clr-teal-list, \"600\");\n$clr-teal-700:  map-get($clr-teal-list, \"700\");\n$clr-teal-800:  map-get($clr-teal-list, \"800\");\n$clr-teal-900:  map-get($clr-teal-list, \"900\");\n$clr-teal-a100: map-get($clr-teal-list, \"a100\");\n$clr-teal-a200: map-get($clr-teal-list, \"a200\");\n$clr-teal-a400: map-get($clr-teal-list, \"a400\");\n$clr-teal-a700: map-get($clr-teal-list, \"a700\");\n\n\n//\n// Green\n//\n\n$clr-green-list: (\n  \"base\": #4caf50,\n  \"50\":   #e8f5e9,\n  \"100\":  #c8e6c9,\n  \"200\":  #a5d6a7,\n  \"300\":  #81c784,\n  \"400\":  #66bb6a,\n  \"500\":  #4caf50,\n  \"600\":  #43a047,\n  \"700\":  #388e3c,\n  \"800\":  #2e7d32,\n  \"900\":  #1b5e20,\n  \"a100\": #b9f6ca,\n  \"a200\": #69f0ae,\n  \"a400\": #00e676,\n  \"a700\": #00c853\n);\n\n$clr-green:      map-get($clr-green-list, \"base\");\n\n$clr-green-50:   map-get($clr-green-list, \"50\");\n$clr-green-100:  map-get($clr-green-list, \"100\");\n$clr-green-200:  map-get($clr-green-list, \"200\");\n$clr-green-300:  map-get($clr-green-list, \"300\");\n$clr-green-400:  map-get($clr-green-list, \"400\");\n$clr-green-500:  map-get($clr-green-list, \"500\");\n$clr-green-600:  map-get($clr-green-list, \"600\");\n$clr-green-700:  map-get($clr-green-list, \"700\");\n$clr-green-800:  map-get($clr-green-list, \"800\");\n$clr-green-900:  map-get($clr-green-list, \"900\");\n$clr-green-a100: map-get($clr-green-list, \"a100\");\n$clr-green-a200: map-get($clr-green-list, \"a200\");\n$clr-green-a400: map-get($clr-green-list, \"a400\");\n$clr-green-a700: map-get($clr-green-list, \"a700\");\n\n\n//\n// Light green\n//\n\n$clr-light-green-list: (\n  \"base\": #8bc34a,\n  \"50\":   #f1f8e9,\n  \"100\":  #dcedc8,\n  \"200\":  #c5e1a5,\n  \"300\":  #aed581,\n  \"400\":  #9ccc65,\n  \"500\":  #8bc34a,\n  \"600\":  #7cb342,\n  \"700\":  #689f38,\n  \"800\":  #558b2f,\n  \"900\":  #33691e,\n  \"a100\": #ccff90,\n  \"a200\": #b2ff59,\n  \"a400\": #76ff03,\n  \"a700\": #64dd17\n);\n\n$clr-light-green:      map-get($clr-light-green-list, \"base\");\n\n$clr-light-green-50:   map-get($clr-light-green-list, \"50\");\n$clr-light-green-100:  map-get($clr-light-green-list, \"100\");\n$clr-light-green-200:  map-get($clr-light-green-list, \"200\");\n$clr-light-green-300:  map-get($clr-light-green-list, \"300\");\n$clr-light-green-400:  map-get($clr-light-green-list, \"400\");\n$clr-light-green-500:  map-get($clr-light-green-list, \"500\");\n$clr-light-green-600:  map-get($clr-light-green-list, \"600\");\n$clr-light-green-700:  map-get($clr-light-green-list, \"700\");\n$clr-light-green-800:  map-get($clr-light-green-list, \"800\");\n$clr-light-green-900:  map-get($clr-light-green-list, \"900\");\n$clr-light-green-a100: map-get($clr-light-green-list, \"a100\");\n$clr-light-green-a200: map-get($clr-light-green-list, \"a200\");\n$clr-light-green-a400: map-get($clr-light-green-list, \"a400\");\n$clr-light-green-a700: map-get($clr-light-green-list, \"a700\");\n\n\n//\n// Lime\n//\n\n$clr-lime-list: (\n  \"base\": #cddc39,\n  \"50\":   #f9fbe7,\n  \"100\":  #f0f4c3,\n  \"200\":  #e6ee9c,\n  \"300\":  #dce775,\n  \"400\":  #d4e157,\n  \"500\":  #cddc39,\n  \"600\":  #c0ca33,\n  \"700\":  #afb42b,\n  \"800\":  #9e9d24,\n  \"900\":  #827717,\n  \"a100\": #f4ff81,\n  \"a200\": #eeff41,\n  \"a400\": #c6ff00,\n  \"a700\": #aeea00\n);\n\n$clr-lime:      map-get($clr-lime-list, \"base\");\n\n$clr-lime-50:   map-get($clr-lime-list, \"50\");\n$clr-lime-100:  map-get($clr-lime-list, \"100\");\n$clr-lime-200:  map-get($clr-lime-list, \"200\");\n$clr-lime-300:  map-get($clr-lime-list, \"300\");\n$clr-lime-400:  map-get($clr-lime-list, \"400\");\n$clr-lime-500:  map-get($clr-lime-list, \"500\");\n$clr-lime-600:  map-get($clr-lime-list, \"600\");\n$clr-lime-700:  map-get($clr-lime-list, \"700\");\n$clr-lime-800:  map-get($clr-lime-list, \"800\");\n$clr-lime-900:  map-get($clr-lime-list, \"900\");\n$clr-lime-a100: map-get($clr-lime-list, \"a100\");\n$clr-lime-a200: map-get($clr-lime-list, \"a200\");\n$clr-lime-a400: map-get($clr-lime-list, \"a400\");\n$clr-lime-a700: map-get($clr-lime-list, \"a700\");\n\n\n//\n// Yellow\n//\n\n$clr-yellow-list: (\n  \"base\": #ffeb3b,\n  \"50\":   #fffde7,\n  \"100\":  #fff9c4,\n  \"200\":  #fff59d,\n  \"300\":  #fff176,\n  \"400\":  #ffee58,\n  \"500\":  #ffeb3b,\n  \"600\":  #fdd835,\n  \"700\":  #fbc02d,\n  \"800\":  #f9a825,\n  \"900\":  #f57f17,\n  \"a100\": #ffff8d,\n  \"a200\": #ffff00,\n  \"a400\": #ffea00,\n  \"a700\": #ffd600\n);\n\n$clr-yellow:      map-get($clr-yellow-list, \"base\");\n\n$clr-yellow-50:   map-get($clr-yellow-list, \"50\");\n$clr-yellow-100:  map-get($clr-yellow-list, \"100\");\n$clr-yellow-200:  map-get($clr-yellow-list, \"200\");\n$clr-yellow-300:  map-get($clr-yellow-list, \"300\");\n$clr-yellow-400:  map-get($clr-yellow-list, \"400\");\n$clr-yellow-500:  map-get($clr-yellow-list, \"500\");\n$clr-yellow-600:  map-get($clr-yellow-list, \"600\");\n$clr-yellow-700:  map-get($clr-yellow-list, \"700\");\n$clr-yellow-800:  map-get($clr-yellow-list, \"800\");\n$clr-yellow-900:  map-get($clr-yellow-list, \"900\");\n$clr-yellow-a100: map-get($clr-yellow-list, \"a100\");\n$clr-yellow-a200: map-get($clr-yellow-list, \"a200\");\n$clr-yellow-a400: map-get($clr-yellow-list, \"a400\");\n$clr-yellow-a700: map-get($clr-yellow-list, \"a700\");\n\n\n//\n// amber\n//\n\n$clr-amber-list: (\n  \"base\": #ffc107,\n  \"50\":   #fff8e1,\n  \"100\":  #ffecb3,\n  \"200\":  #ffe082,\n  \"300\":  #ffd54f,\n  \"400\":  #ffca28,\n  \"500\":  #ffc107,\n  \"600\":  #ffb300,\n  \"700\":  #ffa000,\n  \"800\":  #ff8f00,\n  \"900\":  #ff6f00,\n  \"a100\": #ffe57f,\n  \"a200\": #ffd740,\n  \"a400\": #ffc400,\n  \"a700\": #ffab00\n);\n\n$clr-amber:      map-get($clr-amber-list, \"base\");\n\n$clr-amber-50:   map-get($clr-amber-list, \"50\");\n$clr-amber-100:  map-get($clr-amber-list, \"100\");\n$clr-amber-200:  map-get($clr-amber-list, \"200\");\n$clr-amber-300:  map-get($clr-amber-list, \"300\");\n$clr-amber-400:  map-get($clr-amber-list, \"400\");\n$clr-amber-500:  map-get($clr-amber-list, \"500\");\n$clr-amber-600:  map-get($clr-amber-list, \"600\");\n$clr-amber-700:  map-get($clr-amber-list, \"700\");\n$clr-amber-800:  map-get($clr-amber-list, \"800\");\n$clr-amber-900:  map-get($clr-amber-list, \"900\");\n$clr-amber-a100: map-get($clr-amber-list, \"a100\");\n$clr-amber-a200: map-get($clr-amber-list, \"a200\");\n$clr-amber-a400: map-get($clr-amber-list, \"a400\");\n$clr-amber-a700: map-get($clr-amber-list, \"a700\");\n\n\n//\n// Orange\n//\n\n$clr-orange-list: (\n  \"base\": #ff9800,\n  \"50\":   #fff3e0,\n  \"100\":  #ffe0b2,\n  \"200\":  #ffcc80,\n  \"300\":  #ffb74d,\n  \"400\":  #ffa726,\n  \"500\":  #ff9800,\n  \"600\":  #fb8c00,\n  \"700\":  #f57c00,\n  \"800\":  #ef6c00,\n  \"900\":  #e65100,\n  \"a100\": #ffd180,\n  \"a200\": #ffab40,\n  \"a400\": #ff9100,\n  \"a700\": #ff6d00\n);\n\n$clr-orange:      map-get($clr-orange-list, \"base\");\n\n$clr-orange-50:   map-get($clr-orange-list, \"50\");\n$clr-orange-100:  map-get($clr-orange-list, \"100\");\n$clr-orange-200:  map-get($clr-orange-list, \"200\");\n$clr-orange-300:  map-get($clr-orange-list, \"300\");\n$clr-orange-400:  map-get($clr-orange-list, \"400\");\n$clr-orange-500:  map-get($clr-orange-list, \"500\");\n$clr-orange-600:  map-get($clr-orange-list, \"600\");\n$clr-orange-700:  map-get($clr-orange-list, \"700\");\n$clr-orange-800:  map-get($clr-orange-list, \"800\");\n$clr-orange-900:  map-get($clr-orange-list, \"900\");\n$clr-orange-a100: map-get($clr-orange-list, \"a100\");\n$clr-orange-a200: map-get($clr-orange-list, \"a200\");\n$clr-orange-a400: map-get($clr-orange-list, \"a400\");\n$clr-orange-a700: map-get($clr-orange-list, \"a700\");\n\n\n//\n// Deep orange\n//\n\n$clr-deep-orange-list: (\n  \"base\": #ff5722,\n  \"50\":   #fbe9e7,\n  \"100\":  #ffccbc,\n  \"200\":  #ffab91,\n  \"300\":  #ff8a65,\n  \"400\":  #ff7043,\n  \"500\":  #ff5722,\n  \"600\":  #f4511e,\n  \"700\":  #e64a19,\n  \"800\":  #d84315,\n  \"900\":  #bf360c,\n  \"a100\": #ff9e80,\n  \"a200\": #ff6e40,\n  \"a400\": #ff3d00,\n  \"a700\": #dd2c00\n);\n\n$clr-deep-orange:      map-get($clr-deep-orange-list, \"base\");\n\n$clr-deep-orange-50:   map-get($clr-deep-orange-list, \"50\");\n$clr-deep-orange-100:  map-get($clr-deep-orange-list, \"100\");\n$clr-deep-orange-200:  map-get($clr-deep-orange-list, \"200\");\n$clr-deep-orange-300:  map-get($clr-deep-orange-list, \"300\");\n$clr-deep-orange-400:  map-get($clr-deep-orange-list, \"400\");\n$clr-deep-orange-500:  map-get($clr-deep-orange-list, \"500\");\n$clr-deep-orange-600:  map-get($clr-deep-orange-list, \"600\");\n$clr-deep-orange-700:  map-get($clr-deep-orange-list, \"700\");\n$clr-deep-orange-800:  map-get($clr-deep-orange-list, \"800\");\n$clr-deep-orange-900:  map-get($clr-deep-orange-list, \"900\");\n$clr-deep-orange-a100: map-get($clr-deep-orange-list, \"a100\");\n$clr-deep-orange-a200: map-get($clr-deep-orange-list, \"a200\");\n$clr-deep-orange-a400: map-get($clr-deep-orange-list, \"a400\");\n$clr-deep-orange-a700: map-get($clr-deep-orange-list, \"a700\");\n\n\n//\n// Brown\n//\n\n$clr-brown-list: (\n  \"base\": #795548,\n  \"50\":   #efebe9,\n  \"100\":  #d7ccc8,\n  \"200\":  #bcaaa4,\n  \"300\":  #a1887f,\n  \"400\":  #8d6e63,\n  \"500\":  #795548,\n  \"600\":  #6d4c41,\n  \"700\":  #5d4037,\n  \"800\":  #4e342e,\n  \"900\":  #3e2723,\n);\n\n$clr-brown:     map-get($clr-brown-list, \"base\");\n\n$clr-brown-50:  map-get($clr-brown-list, \"50\");\n$clr-brown-100: map-get($clr-brown-list, \"100\");\n$clr-brown-200: map-get($clr-brown-list, \"200\");\n$clr-brown-300: map-get($clr-brown-list, \"300\");\n$clr-brown-400: map-get($clr-brown-list, \"400\");\n$clr-brown-500: map-get($clr-brown-list, \"500\");\n$clr-brown-600: map-get($clr-brown-list, \"600\");\n$clr-brown-700: map-get($clr-brown-list, \"700\");\n$clr-brown-800: map-get($clr-brown-list, \"800\");\n$clr-brown-900: map-get($clr-brown-list, \"900\");\n\n\n//\n// Grey\n//\n\n$clr-grey-list: (\n  \"base\": #9e9e9e,\n  \"50\":   #fafafa,\n  \"100\":  #f5f5f5,\n  \"200\":  #eeeeee,\n  \"300\":  #e0e0e0,\n  \"400\":  #bdbdbd,\n  \"500\":  #9e9e9e,\n  \"600\":  #757575,\n  \"700\":  #616161,\n  \"800\":  #424242,\n  \"900\":  #212121,\n);\n\n$clr-grey:     map-get($clr-grey-list, \"base\");\n\n$clr-grey-50:  map-get($clr-grey-list, \"50\");\n$clr-grey-100: map-get($clr-grey-list, \"100\");\n$clr-grey-200: map-get($clr-grey-list, \"200\");\n$clr-grey-300: map-get($clr-grey-list, \"300\");\n$clr-grey-400: map-get($clr-grey-list, \"400\");\n$clr-grey-500: map-get($clr-grey-list, \"500\");\n$clr-grey-600: map-get($clr-grey-list, \"600\");\n$clr-grey-700: map-get($clr-grey-list, \"700\");\n$clr-grey-800: map-get($clr-grey-list, \"800\");\n$clr-grey-900: map-get($clr-grey-list, \"900\");\n\n\n//\n// Blue grey\n//\n\n$clr-blue-grey-list: (\n  \"base\": #607d8b,\n  \"50\":   #eceff1,\n  \"100\":  #cfd8dc,\n  \"200\":  #b0bec5,\n  \"300\":  #90a4ae,\n  \"400\":  #78909c,\n  \"500\":  #607d8b,\n  \"600\":  #546e7a,\n  \"700\":  #455a64,\n  \"800\":  #37474f,\n  \"900\":  #263238,\n);\n\n$clr-blue-grey:     map-get($clr-blue-grey-list, \"base\");\n\n$clr-blue-grey-50:  map-get($clr-blue-grey-list, \"50\");\n$clr-blue-grey-100: map-get($clr-blue-grey-list, \"100\");\n$clr-blue-grey-200: map-get($clr-blue-grey-list, \"200\");\n$clr-blue-grey-300: map-get($clr-blue-grey-list, \"300\");\n$clr-blue-grey-400: map-get($clr-blue-grey-list, \"400\");\n$clr-blue-grey-500: map-get($clr-blue-grey-list, \"500\");\n$clr-blue-grey-600: map-get($clr-blue-grey-list, \"600\");\n$clr-blue-grey-700: map-get($clr-blue-grey-list, \"700\");\n$clr-blue-grey-800: map-get($clr-blue-grey-list, \"800\");\n$clr-blue-grey-900: map-get($clr-blue-grey-list, \"900\");\n\n\n//\n// Black\n//\n\n$clr-black-list: (\n  \"base\": #000\n);\n\n$clr-black: map-get($clr-black-list, \"base\");\n\n\n//\n// White\n//\n\n$clr-white-list: (\n  \"base\": #fff\n);\n\n$clr-white: map-get($clr-white-list, \"base\");\n\n\n//\n// List for all Colors for looping\n//\n\n$clr-list-all: (\n  \"red\":         $clr-red-list,\n  \"pink\":        $clr-pink-list,\n  \"purple\":      $clr-purple-list,\n  \"deep-purple\": $clr-deep-purple-list,\n  \"indigo\":      $clr-indigo-list,\n  \"blue\":        $clr-blue-list,\n  \"light-blue\":  $clr-light-blue-list,\n  \"cyan\":        $clr-cyan-list,\n  \"teal\":        $clr-teal-list,\n  \"green\":       $clr-green-list,\n  \"light-green\": $clr-light-green-list,\n  \"lime\":        $clr-lime-list,\n  \"yellow\":      $clr-yellow-list,\n  \"amber\":       $clr-amber-list,\n  \"orange\":      $clr-orange-list,\n  \"deep-orange\": $clr-deep-orange-list,\n  \"brown\":       $clr-brown-list,\n  \"grey\":        $clr-grey-list,\n  \"blue-grey\":   $clr-blue-grey-list,\n  \"black\":       $clr-black-list,\n  \"white\":       $clr-white-list\n);\n\n\n//\n// Typography\n//\n\n$clr-ui-display-4: $clr-grey-600;\n$clr-ui-display-3: $clr-grey-600;\n$clr-ui-display-2: $clr-grey-600;\n$clr-ui-display-1: $clr-grey-600;\n$clr-ui-headline:  $clr-grey-900;\n$clr-ui-title:     $clr-grey-900;\n$clr-ui-subhead-1: $clr-grey-900;\n$clr-ui-body-2:    $clr-grey-900;\n$clr-ui-body-1:    $clr-grey-900;\n$clr-ui-caption:   $clr-grey-600;\n$clr-ui-menu:      $clr-grey-900;\n$clr-ui-button:    $clr-grey-900;\n", "////\n/// Copyright (c) 2016-2022 Martin Donath \n///\n/// Permission is hereby granted, free of charge, to any person obtaining a\n/// copy of this software and associated documentation files (the \"Software\"),\n/// to deal in the Software without restriction, including without limitation\n/// the rights to use, copy, modify, merge, publish, distribute, sublicense,\n/// and/or sell copies of the Software, and to permit persons to whom the\n/// Software is furnished to do so, subject to the following conditions:\n///\n/// The above copyright notice and this permission notice shall be included in\n/// all copies or substantial portions of the Software.\n///\n/// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n/// FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL\n/// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n/// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n/// DEALINGS\n////\n\n// ----------------------------------------------------------------------------\n// Rules\n// ----------------------------------------------------------------------------\n\n// Footnotes variables\n:root {\n  --md-footnotes-icon: svg-load(\"material/keyboard-return.svg\");\n}\n\n// ----------------------------------------------------------------------------\n\n// Scoped in typesetted content to match specificity of regular content\n.md-typeset {\n\n  // Footnote container\n  .footnote {\n    color: var(--md-default-fg-color--light);\n    font-size: px2rem(12.8px);\n\n    // Footnote list - omit left indentation\n    > ol {\n      margin-inline-start: 0;\n\n      // Footnote item - footnote items can contain lists, so we need to scope\n      // the spacing adjustments to the top-level footnote item.\n      > li {\n        transition: color 125ms;\n\n        // Darken color on target\n        &:target {\n          color: var(--md-default-fg-color);\n        }\n\n        // Show backreferences on footnote focus without transition\n        &:focus-within .footnote-backref {\n          transform: translateX(0);\n          opacity: 1;\n          transition: none;\n        }\n\n        // Show backreferences on footnote hover/target\n        &:is(:hover, :target) .footnote-backref {\n          transform: translateX(0);\n          opacity: 1;\n        }\n\n        // Adjust spacing on first child\n        > :first-child {\n          margin-top: 0;\n        }\n      }\n    }\n  }\n\n  // Footnote reference\n  .footnote-ref {\n    font-weight: 700;\n    font-size: px2em(12px, 16px);\n\n    // Hack: increase specificity to override default\n    html & {\n      outline-offset: px2rem(2px);\n    }\n  }\n\n  // Show outline for all devices\n  [id^=\"fnref:\"]:target > .footnote-ref {\n    outline: auto;\n  }\n\n  // Footnote backreference\n  .footnote-backref {\n    display: inline-block;\n    color: var(--md-typeset-a-color);\n    // Hack: omit Unicode arrow for replacement with icon\n    font-size: 0;\n    vertical-align: text-bottom;\n    transform: translateX(px2rem(5px));\n    opacity: 0;\n    transition:\n      color     250ms,\n      transform 250ms 250ms,\n      opacity   125ms 250ms;\n\n    // [print]: Show footnote backreferences\n    @media print {\n      color: var(--md-typeset-a-color);\n      transform: translateX(0);\n      opacity: 1;\n    }\n\n    // Adjust for right-to-left languages\n    [dir=\"rtl\"] & {\n      transform: translateX(px2rem(-5px));\n    }\n\n    // Adjust color on hover\n    &:hover {\n      color: var(--md-accent-fg-color);\n    }\n\n    // Footnote backreference icon\n    &::before {\n      display: inline-block;\n      width: px2rem(16px);\n      height: px2rem(16px);\n      background-color: currentcolor;\n      mask-image: var(--md-footnotes-icon);\n      mask-position: center;\n      mask-repeat: no-repeat;\n      mask-size: contain;\n      content: \"\";\n\n      // Adjust for right-to-left languages\n      [dir=\"rtl\"] & {\n\n        // Flip icon vertically\n        svg {\n          transform: scaleX(-1);\n        }\n      }\n    }\n  }\n}\n", "////\n/// Copyright (c) 2016-2022 Martin Donath \n///\n/// Permission is hereby granted, free of charge, to any person obtaining a\n/// copy of this software and associated documentation files (the \"Software\"),\n/// to deal in the Software without restriction, including without limitation\n/// the rights to use, copy, modify, merge, publish, distribute, sublicense,\n/// and/or sell copies of the Software, and to permit persons to whom the\n/// Software is furnished to do so, subject to the following conditions:\n///\n/// The above copyright notice and this permission notice shall be included in\n/// all copies or substantial portions of the Software.\n///\n/// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n/// FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL\n/// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n/// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n/// DEALINGS\n////\n\n// ----------------------------------------------------------------------------\n// Rules\n// ----------------------------------------------------------------------------\n\n// Scoped in typesetted content to match specificity of regular content\n.md-typeset {\n\n  // Headerlink\n  .headerlink {\n    display: inline-block;\n    margin-inline-start: px2rem(10px);\n    color: var(--md-default-fg-color--lighter);\n    opacity: 0;\n    transition:\n      color   250ms,\n      opacity 125ms;\n\n    // [print]: Hide headerlinks\n    @media print {\n      display: none;\n    }\n  }\n\n  // Show headerlinks on parent hover\n  :is(:hover, :target) > .headerlink,\n  .headerlink:focus {\n    opacity: 1;\n    transition:\n      color   250ms,\n      opacity 125ms;\n  }\n\n  // Adjust color on parent target or focus/hover\n  :target > .headerlink,\n  .headerlink:is(:focus, :hover) {\n    color: var(--md-accent-fg-color);\n  }\n\n  // Adjust scroll margin for all elements with `id` attributes\n  :target {\n    --md-scroll-margin: #{px2rem(48px + 24px)};\n    --md-scroll-offset: #{px2rem(0px)};\n    // Scroll margin is finally ready for prime time - before, we used a hack\n    // for anchor correction based on pseudo elements but those times are gone.\n    scroll-margin-top:\n      calc(\n        var(--md-scroll-margin) -\n        var(--md-scroll-offset)\n      );\n\n    // [screen +]: Sticky navigation tabs\n    @include break-from-device(screen) {\n\n      // Adjust scroll margin for sticky navigation tabs\n      .md-header--lifted ~ .md-container & {\n        --md-scroll-margin: #{px2rem(96px + 24px)};\n      }\n    }\n  }\n\n  // Adjust scroll offset for headlines of level 1-3\n  :is(h1, h2, h3):target {\n    --md-scroll-offset: #{px2rem(4px)};\n  }\n\n  // Adjust scroll offset for headlines of level 4\n  h4:target {\n    --md-scroll-offset: #{px2rem(3px)};\n  }\n}\n", "////\n/// Copyright (c) 2016-2022 Martin Donath \n///\n/// Permission is hereby granted, free of charge, to any person obtaining a\n/// copy of this software and associated documentation files (the \"Software\"),\n/// to deal in the Software without restriction, including without limitation\n/// the rights to use, copy, modify, merge, publish, distribute, sublicense,\n/// and/or sell copies of the Software, and to permit persons to whom the\n/// Software is furnished to do so, subject to the following conditions:\n///\n/// The above copyright notice and this permission notice shall be included in\n/// all copies or substantial portions of the Software.\n///\n/// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n/// FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL\n/// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n/// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n/// DEALINGS\n////\n\n// ----------------------------------------------------------------------------\n// Rules\n// ----------------------------------------------------------------------------\n\n// Scoped in typesetted content to match specificity of regular content\n.md-typeset {\n\n  // Arithmatex container\n  div.arithmatex {\n    overflow: auto;\n\n    // [mobile -]: Align with body copy\n    @include break-to-device(mobile) {\n      margin: 0 px2rem(-16px);\n    }\n\n    // Arithmatex content\n    > * {\n      width: min-content;\n      margin-inline: auto !important; // stylelint-disable-line\n      padding: 0 px2rem(16px);\n      touch-action: auto;\n\n      // MathJax container - see https://bit.ly/3HR8YJ5\n      mjx-container {\n        margin: 0 !important; // stylelint-disable-line\n      }\n    }\n  }\n}\n", "////\n/// Copyright (c) 2016-2022 Martin Donath \n///\n/// Permission is hereby granted, free of charge, to any person obtaining a\n/// copy of this software and associated documentation files (the \"Software\"),\n/// to deal in the Software without restriction, including without limitation\n/// the rights to use, copy, modify, merge, publish, distribute, sublicense,\n/// and/or sell copies of the Software, and to permit persons to whom the\n/// Software is furnished to do so, subject to the following conditions:\n///\n/// The above copyright notice and this permission notice shall be included in\n/// all copies or substantial portions of the Software.\n///\n/// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n/// FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL\n/// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n/// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n/// DEALINGS\n////\n\n// ----------------------------------------------------------------------------\n// Rules\n// ----------------------------------------------------------------------------\n\n// Scoped in typesetted content to match specificity of regular content\n.md-typeset {\n\n  // Deletion, addition or comment\n  :is(del, ins, .comment).critic {\n    box-decoration-break: clone;\n  }\n\n  // Deletion\n  del.critic {\n    background-color: var(--md-typeset-del-color);\n  }\n\n  // Addition\n  ins.critic {\n    background-color: var(--md-typeset-ins-color);\n  }\n\n  // Comment\n  .critic.comment {\n    color: var(--md-code-hl-comment-color);\n\n    // Comment opening mark\n    &::before {\n      content: \"/* \";\n    }\n\n    // Comment closing mark\n    &::after {\n      content: \" */\";\n    }\n  }\n\n  // Critic block\n  .critic.block {\n    display: block;\n    margin: 1em 0;\n    padding-inline: px2rem(16px);\n    overflow: auto;\n    box-shadow: none;\n\n    // Adjust spacing on first child\n    > :first-child {\n      margin-top: 0.5em;\n    }\n\n    // Adjust spacing on last child\n    > :last-child {\n      margin-bottom: 0.5em;\n    }\n  }\n}\n", "////\n/// Copyright (c) 2016-2022 Martin Donath \n///\n/// Permission is hereby granted, free of charge, to any person obtaining a\n/// copy of this software and associated documentation files (the \"Software\"),\n/// to deal in the Software without restriction, including without limitation\n/// the rights to use, copy, modify, merge, publish, distribute, sublicense,\n/// and/or sell copies of the Software, and to permit persons to whom the\n/// Software is furnished to do so, subject to the following conditions:\n///\n/// The above copyright notice and this permission notice shall be included in\n/// all copies or substantial portions of the Software.\n///\n/// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n/// FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL\n/// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n/// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n/// DEALINGS\n////\n\n// ----------------------------------------------------------------------------\n// Rules\n// ----------------------------------------------------------------------------\n\n// Details variables\n:root {\n  --md-details-icon: svg-load(\"material/chevron-right.svg\");\n}\n\n// ----------------------------------------------------------------------------\n\n// Scoped in typesetted content to match specificity of regular content\n.md-typeset {\n\n  // Details\n  details {\n    display: flow-root;\n    padding-top: 0;\n    overflow: visible;\n\n    // Details title icon - rotate icon on transition to open state\n    &[open] > summary::after {\n      transform: rotate(90deg);\n    }\n\n    // Adjust spacing for details in closed state\n    &:not([open]) {\n      padding-bottom: 0;\n      box-shadow: none;\n\n      // Hack: we cannot set `overflow: hidden` on the `details` element (which\n      // is why we set it to `overflow: visible`, as the outline would not be\n      // visible when focusing. Therefore, we must set the border radius on the\n      // summary explicitly.\n      > summary {\n        border-radius: px2rem(2px);\n      }\n    }\n  }\n\n  // Details title\n  summary {\n    display: block;\n    min-height: px2rem(20px);\n    padding-inline-end: px2rem(36px);\n    border-start-start-radius: px2rem(2px);\n    border-start-end-radius: px2rem(2px);\n    cursor: pointer;\n\n    // Show outline for keyboard devices\n    &.focus-visible {\n      outline-color: var(--md-accent-fg-color);\n      outline-offset: px2rem(4px);\n    }\n\n    // Hide outline for pointer devices\n    &:not(.focus-visible) {\n      outline: none;\n      -webkit-tap-highlight-color: transparent;\n    }\n\n    // Details marker\n    &::after {\n      position: absolute;\n      top: px2em(10px);\n      inset-inline-end: px2rem(8px);\n      width: px2rem(20px);\n      height: px2rem(20px);\n      background-color: currentcolor;\n      mask-image: var(--md-details-icon);\n      mask-position: center;\n      mask-repeat: no-repeat;\n      mask-size: contain;\n      transform: rotate(0deg);\n      transition: transform 250ms;\n      content: \"\";\n\n      // Adjust for right-to-left languages\n      [dir=\"rtl\"] & {\n        transform: rotate(180deg);\n      }\n    }\n\n    // Hide native details marker - modern\n    &::marker {\n      display: none;\n    }\n\n    // Hide native details marker - legacy, must be split into a seprate rule,\n    // so older browsers don't consider the selector list as invalid\n    &::-webkit-details-marker {\n      display: none;\n    }\n  }\n}\n", "////\n/// Copyright (c) 2016-2022 Martin Donath \n///\n/// Permission is hereby granted, free of charge, to any person obtaining a\n/// copy of this software and associated documentation files (the \"Software\"),\n/// to deal in the Software without restriction, including without limitation\n/// the rights to use, copy, modify, merge, publish, distribute, sublicense,\n/// and/or sell copies of the Software, and to permit persons to whom the\n/// Software is furnished to do so, subject to the following conditions:\n///\n/// The above copyright notice and this permission notice shall be included in\n/// all copies or substantial portions of the Software.\n///\n/// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n/// FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL\n/// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n/// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n/// DEALINGS\n////\n\n// ----------------------------------------------------------------------------\n// Rules\n// ----------------------------------------------------------------------------\n\n// Scoped in typesetted content to match specificity of regular content\n.md-typeset {\n\n  // Emoji and icon container\n  :is(.emojione, .twemoji, .gemoji) {\n    display: inline-flex;\n    height: px2em(18px);\n    vertical-align: text-top;\n\n    // Icon - inlined via mkdocs-material-extensions\n    svg {\n      width: px2em(18px);\n      max-height: 100%;\n      fill: currentcolor;\n    }\n  }\n}\n", "////\n/// Copyright (c) 2016-2022 Martin Donath \n///\n/// Permission is hereby granted, free of charge, to any person obtaining a\n/// copy of this software and associated documentation files (the \"Software\"),\n/// to deal in the Software without restriction, including without limitation\n/// the rights to use, copy, modify, merge, publish, distribute, sublicense,\n/// and/or sell copies of the Software, and to permit persons to whom the\n/// Software is furnished to do so, subject to the following conditions:\n///\n/// The above copyright notice and this permission notice shall be included in\n/// all copies or substantial portions of the Software.\n///\n/// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n/// FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL\n/// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n/// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n/// DEALINGS\n////\n\n// ----------------------------------------------------------------------------\n// Rules: syntax highlighting\n// ----------------------------------------------------------------------------\n\n// Code block\n.highlight {\n\n  // .o  = Operator\n  // .ow = Operator, word\n  :is(.o, .ow) {\n    color: var(--md-code-hl-operator-color);\n  }\n\n  .p {  // Punctuation\n    color: var(--md-code-hl-punctuation-color);\n  }\n\n  // .cpf = Comment, preprocessor file\n  // .l   = Literal\n  // .s   = Literal, string\n  // .sb  = Literal, string backticks\n  // .sc  = Literal, string char\n  // .s2  = Literal, string double\n  // .si  = Literal, string interpol\n  // .s1  = Literal, string single\n  // .ss  = Literal, string symbol\n  :is(.cpf, .l, .s, .sb, .sc, .s2, .si, .s1, .ss) {\n    color: var(--md-code-hl-string-color);\n  }\n\n  // .cp = Comment, pre-processor\n  // .se = Literal, string escape\n  // .sh = Literal, string heredoc\n  // .sr = Literal, string regex\n  // .sx = Literal, string other\n  :is(.cp, .se, .sh, .sr, .sx) {\n    color: var(--md-code-hl-special-color);\n  }\n\n  // .m  = Number\n  // .mb = Number, binary\n  // .mf = Number, float\n  // .mh = Number, hex\n  // .mi = Number, integer\n  // .il = Number, integer long\n  // .mo = Number, octal\n  :is(.m, .mb, .mf, .mh, .mi, .il, .mo) {\n    color: var(--md-code-hl-number-color);\n  }\n\n  // .k  = Keyword,\n  // .kd = Keyword, declaration\n  // .kn = Keyword, namespace\n  // .kp = Keyword, pseudo\n  // .kr = Keyword, reserved\n  // .kt = Keyword, type\n  :is(.k, .kd, .kn, .kp, .kr, .kt) {\n    color: var(--md-code-hl-keyword-color);\n  }\n\n  // .n  = Name\n  :is(.n) {\n    color: var(--md-code-hl-name-color);\n  }\n\n  // .kc = Keyword, constant\n  // .no = Name, constant\n  // .nb = Name, builtin\n  // .bp = Name, builtin pseudo\n  :is(.kc, .no, .nb, .bp) {\n    color: var(--md-code-hl-constant-color);\n  }\n\n  // .nc = Name, class\n  // .ne = Name, exception\n  // .nf = Name, function\n  // .nn = Name, namespace\n  :is(.nc, .ne, .nf, .nn) {\n    color: var(--md-code-hl-function-color);\n  }\n\n  // .nd = Name, decorator\n  // .ni = Name, entity\n  // .nl = Name, label\n  // .nt = Name, tag\n  :is(.nd, .ni, .nl, .nt) {\n    color: var(--md-code-hl-keyword-color);\n  }\n\n  // .c  = Comment\n  // .cm = Comment, multiline\n  // .c1 = Comment, single\n  // .ch = Comment, shebang\n  // .cs = Comment, special\n  // .sd = Literal, string doc\n  :is(.c, .cm, .c1, .ch, .cs, .sd) {\n    color: var(--md-code-hl-comment-color);\n  }\n\n  // .na = Name, attribute\n  // .nv = Variable,\n  // .vc = Variable, class\n  // .vg = Variable, global\n  // .vi = Variable, instance\n  :is(.na, .nv, .vc, .vg, .vi) {\n    color: var(--md-code-hl-variable-color);\n  }\n\n  // .ge = Generic, emph\n  // .gr = Generic, error\n  // .gh = Generic, heading\n  // .go = Generic, output\n  // .gp = Generic, prompt\n  // .gs = Generic, strong\n  // .gu = Generic, subheading\n  // .gt = Generic, traceback\n  :is(.ge, .gr, .gh, .go, .gp, .gs, .gu, .gt) {\n    color: var(--md-code-hl-generic-color);\n  }\n\n  // .gd = Diff, delete\n  // .gi = Diff, insert\n  :is(.gd, .gi) {\n    margin: 0 px2em(-2px);\n    padding: 0 px2em(2px);\n    border-radius: px2rem(2px);\n  }\n\n  .gd { // Diff, delete\n    background-color: var(--md-typeset-del-color);\n  }\n\n  .gi { // Diff, insert\n    background-color: var(--md-typeset-ins-color);\n  }\n\n  // Highlighted line\n  .hll {\n    display: block;\n    margin: 0 px2em(-16px, 13.6px);\n    padding: 0 px2em(16px, 13.6px);\n    background-color: var(--md-code-hl-color);\n  }\n\n  // Code block title\n  span.filename {\n    position: relative;\n    display: flow-root;\n    margin-top: 1em;\n    padding: px2em(9px, 13.6px) px2em(16px, 13.6px);\n    font-weight: 700;\n    font-size: px2em(13.6px);\n    background-color: var(--md-code-bg-color);\n    border-bottom: px2rem(1px) solid var(--md-default-fg-color--lightest);\n    border-top-left-radius: px2rem(2px);\n    border-top-right-radius: px2rem(2px);\n\n    // Adjust spacing for code block\n    + pre {\n      margin-top: 0;\n\n      // Remove rounded border on top side\n      > code {\n        border-top-left-radius: 0;\n        border-top-right-radius: 0;\n      }\n    }\n  }\n\n  // Code block line numbers (pymdownx-inline)\n  [data-linenos]::before {\n    position: sticky;\n    left: px2em(-16px, 13.6px);\n    // A `z-index` of 3 is necessary for ensuring that code block annotations\n    // don't overlay line numbers, as active annotations have a `z-index` of 2.\n    z-index: 3;\n    float: left;\n    margin-right: px2em(16px, 13.6px);\n    margin-left: px2em(-16px, 13.6px);\n    padding-left: px2em(16px, 13.6px);\n    color: var(--md-default-fg-color--light);\n    background-color: var(--md-code-bg-color);\n    box-shadow: px2rem(-1px) 0 var(--md-default-fg-color--lightest) inset;\n    content: attr(data-linenos);\n    user-select: none;\n  }\n\n  // Code block line anchors - Chrome and Safari seem to have a strange bug\n  // where scroll margin is not applied to anchors inside code blocks. Setting\n  // positioning to absolute seems to fix the problem. Interestingly, this does\n  // not happen in Firefox. Furthermore we must set `visibility: hidden` or\n  // the copy to clipboard functionality will include an empty line between\n  // each set of lines.\n  code a[id] {\n    position: absolute;\n    visibility: hidden;\n  }\n\n  // Copying in progress - this class is set before the content is copied and\n  // removed after copying is done to mitigate whitespace-related issues.\n  code[data-md-copying] {\n\n    // Temporarily remove highlighted lines - see https://bit.ly/32iVGWh\n    .hll {\n      display: contents;\n    }\n\n    // Temporarily remove annotations\n    .md-annotation {\n      display: none;\n    }\n  }\n}\n\n// ----------------------------------------------------------------------------\n// Rules: layout\n// ----------------------------------------------------------------------------\n\n// Code block with line numbers\n.highlighttable {\n  display: flow-root;\n\n  // Set table elements to block layout, because otherwise the whole flexbox\n  // hacking won't work correctly\n  :is(tbody, td) {\n    display: block;\n    padding: 0;\n  }\n\n  // We need to use flexbox layout, because otherwise it's not possible to\n  // make the code container scroll while keeping the line numbers static\n  tr {\n    display: flex;\n  }\n\n  // The pre tags are nested inside a table, so we need to omit the margin\n  // because it collapses below all the overflows\n  pre {\n    margin: 0;\n  }\n\n  // Code block title container\n  th.filename {\n    flex-grow: 1;\n    padding: 0;\n    text-align: left;\n\n    // Adjust spacing\n    span.filename {\n      margin-top: 0;\n    }\n  }\n\n  // Code block line numbers - disable user selection, so code can be easily\n  // copied without accidentally also copying the line numbers\n  .linenos {\n    padding: px2em(10.5px, 13.6px) px2em(16px, 13.6px);\n    padding-right: 0;\n    font-size: px2em(13.6px);\n    background-color: var(--md-code-bg-color);\n    border-top-left-radius: px2rem(2px);\n    border-bottom-left-radius: px2rem(2px);\n    user-select: none;\n  }\n\n  // Code block line numbers container\n  .linenodiv {\n    padding-right: px2em(8px, 13.6px);\n    box-shadow: px2rem(-1px) 0 var(--md-default-fg-color--lightest) inset;\n\n    // Adjust colors and alignment\n    pre {\n      color: var(--md-default-fg-color--light);\n      text-align: right;\n    }\n  }\n\n  // Code block container - stretch to remaining space\n  .code {\n    flex: 1;\n    min-width: 0;\n  }\n}\n\n// Code block line numbers container\n.linenodiv a {\n  color: inherit;\n}\n\n// ----------------------------------------------------------------------------\n\n// Scoped in typesetted content to match specificity of regular content\n.md-typeset {\n\n  // Code block with line numbers - unfortunately, these selectors need to be\n  // overly specific so they don't bleed into code blocks in annotations.\n  .highlighttable {\n    margin: 1em 0;\n    direction: ltr;\n\n    // Remove rounded borders on code blocks\n    > tbody > tr > .code > div > pre > code {\n      border-top-left-radius: 0;\n      border-bottom-left-radius: 0;\n    }\n  }\n\n  // Code block result container\n  // sphinx-immaterial: altered to support\n  // 1. docutils classes (.literal-block-wrapper, div[class^=\"highlight-\"])\n  // 2. rst-result directive's output-prefix (.results-prefix)\n  :is(.highlight, .highlighttable, .literal-block-wrapper, div[class^=\"highlight-\"], .results-prefix) + .result {\n    margin-top: calc(-1em + #{px2em(-2px)});\n    padding: 0 px2em(16px);\n    overflow: visible;\n    border: px2rem(1px) solid var(--md-code-bg-color);\n    border-top-width: px2rem(2px);\n    border-bottom-right-radius: px2rem(2px);\n    border-bottom-left-radius: px2rem(2px);\n\n    // Clearfix, because we can't use overflow: auto\n    &::after {\n      display: block;\n      clear: both;\n      content: \"\";\n    }\n  }\n\n  // sphinx-immaterial: reset margin for rst-result directive's output-prefix\n  .results .results-prefix + .result {\n    margin-top: 0;\n  }\n\n  // sphinx-immaterial: use modified style from span.filename (see above)\n  .results .results-prefix {\n    margin-top: -1em;\n    padding: px2em(9px, 13.6px) px2em(16px, 13.6px);\n    font-weight: 700;\n    font-size: px2em(13.6px);\n    background-color: var(--md-code-bg-color);\n  }\n}\n\n// ----------------------------------------------------------------------------\n// Rules: top-level\n// ----------------------------------------------------------------------------\n\n// [mobile -]: Align with body copy\n@include break-to-device(mobile) {\n\n  // Top-level code block\n  .md-content__inner > .highlight {\n    margin: 1em px2rem(-16px);\n\n    // Remove rounded borders\n    > .filename,\n    > pre > code {\n      border-radius: 0;\n    }\n\n    // Code block with line numbers - unfortunately, these selectors need to be\n    // overly specific so they don't bleed into code blocks in annotations.\n    > .highlighttable > tbody > tr > .filename span.filename,\n    > .highlighttable > tbody > tr > .linenos,\n    > .highlighttable > tbody > tr > .code > div > pre > code {\n      border-radius: 0;\n    }\n\n    // Code block result container\n    + .result {\n      margin-inline: px2rem(-16px);\n      border-inline-width: 0;\n      border-radius: 0;\n    }\n  }\n}\n", "////\n/// Copyright (c) 2016-2022 Martin Donath \n///\n/// Permission is hereby granted, free of charge, to any person obtaining a\n/// copy of this software and associated documentation files (the \"Software\"),\n/// to deal in the Software without restriction, including without limitation\n/// the rights to use, copy, modify, merge, publish, distribute, sublicense,\n/// and/or sell copies of the Software, and to permit persons to whom the\n/// Software is furnished to do so, subject to the following conditions:\n///\n/// The above copyright notice and this permission notice shall be included in\n/// all copies or substantial portions of the Software.\n///\n/// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n/// FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL\n/// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n/// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n/// DEALINGS\n////\n\n// ----------------------------------------------------------------------------\n// Rules\n// ----------------------------------------------------------------------------\n\n// Tabbed variables\n:root {\n  --md-tabbed-icon--prev: svg-load(\"material/chevron-left.svg\");\n  --md-tabbed-icon--next: svg-load(\"material/chevron-right.svg\");\n}\n\n// ----------------------------------------------------------------------------\n\n// Scoped in typesetted content to match specificity of regular content\n.md-typeset {\n\n  // Tabbed container\n  .tabbed-set {\n    position: relative;\n    display: flex;\n    flex-flow: column wrap;\n    margin: 1em 0;\n    border-radius: px2rem(2px);\n\n    // Tab radio button - the Tabbed extension will generate radio buttons with\n    // labels, so tabs can be triggered without the necessity for JavaScript.\n    // This is pretty cool, as it has great accessibility out-of-the box, so\n    // we just hide the radio button and toggle the label color for indication.\n    > input {\n      position: absolute;\n      width: 0;\n      height: 0;\n      opacity: 0;\n\n      // Adjust scroll margin\n      &:target {\n        --md-scroll-offset: #{px2em(10px, 16px)};\n      }\n\n      // Tab label states\n      @for $i from 20 through 1 {\n        &:nth-child(#{$i}) {\n\n          // Tab is active\n          &:checked {\n\n            // Tab label\n            ~ .tabbed-labels > :nth-child(#{$i}) {\n              @extend %tabbed-label;\n            }\n\n            // Tab content\n            ~ .tabbed-content > :nth-child(#{$i}) {\n              @extend %tabbed-content;\n            }\n          }\n\n          // Tab label on keyboard focus\n          &.focus-visible ~ .tabbed-labels > :nth-child(#{$i}) {\n            @extend %tabbed-label-focus-visible;\n          }\n        }\n      }\n    }\n  }\n\n  // Tabbed labels\n  .tabbed-labels {\n    display: flex;\n    max-width: 100%;\n    overflow: auto;\n    box-shadow: 0 px2rem(-1px) var(--md-default-fg-color--lightest) inset;\n    -ms-overflow-style: none;          // IE, Edge\n    scrollbar-width: none;             // Firefox\n\n    // [print]: Move one layer up for ordering\n    @media print {\n      display: contents;\n    }\n\n    // [screen and no reduced motion]: Disable animation\n    @media screen {\n\n      // [js]: Show animated tab indicator\n      .js & {\n        position: relative;\n\n        // Tab indicator\n        &::before {\n          position: absolute;\n          bottom: 0;\n          left: 0;\n          display: block;\n          width: var(--md-indicator-width);\n          height: 2px;\n          background: var(--md-accent-fg-color);\n          transform: translateX(var(--md-indicator-x));\n          transition:\n            width     225ms,\n            transform 250ms;\n          transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n          content: \"\";\n        }\n      }\n    }\n\n    // Webkit scrollbar\n    &::-webkit-scrollbar {\n      display: none;                   // Chrome, Safari\n    }\n\n    // Tab label\n    > label {\n      flex-shrink: 0;\n      width: auto;\n      padding: px2em(10px, 12.8px) 1.25em px2em(8px, 12.8px);\n      color: var(--md-default-fg-color--light);\n      font-weight: 700;\n      font-size: px2rem(12.8px);\n      white-space: nowrap;\n      border-bottom: px2rem(2px) solid transparent;\n      border-radius: px2rem(2px) px2rem(2px) 0 0;\n      cursor: pointer;\n      transition:\n        background-color 250ms,\n        color            250ms;\n      scroll-margin-inline-start: px2rem(20px);\n\n      // [print]: Intersperse labels with containers\n      @media print {\n\n        // Ensure correct order of labels\n        @for $i from 1 through 20 {\n          &:nth-child(#{$i}) {\n            order: $i;\n          }\n        }\n      }\n\n      // Tab label on hover\n      &:hover {\n        color: var(--md-accent-fg-color);\n      }\n    }\n  }\n\n  // Tabbed content\n  .tabbed-content {\n    width: 100%;\n\n    // [print]: Move one layer up for ordering\n    @media print {\n      display: contents;\n    }\n  }\n\n  // Tabbed block\n  .tabbed-block {\n    display: none;\n\n    // [print]: Intersperse labels with containers\n    @media print {\n      display: block;\n\n      // Ensure correct order of containers\n      @for $i from 1 through 20 {\n        &:nth-child(#{$i}) {\n          order: $i;\n        }\n      }\n    }\n\n    // Code block is the first child of a tab - remove margin and mirror\n    // previous (now deprecated) SuperFences code block grouping behavior\n    > pre:first-child,\n    > .highlight:first-child > pre {\n      margin: 0;\n\n      // Remove rounded borders on code block\n      > code {\n        border-top-left-radius: 0;\n        border-top-right-radius: 0;\n      }\n    }\n\n    // Code block is the first child of a tab - remove margin and mirror\n    // previous (now deprecated) SuperFences code block grouping behavior\n    > .highlight:first-child {\n\n      // Code block title - remove spacing and rounded borders\n      > .filename {\n        margin: 0;\n        border-top-left-radius: 0;\n        border-top-right-radius: 0;\n      }\n\n      // Code block with line numbers - unfortunately, these selectors need to\n      // be overly specific so they don't bleed into code blocks in annotations.\n      > .highlighttable {\n        margin: 0;\n\n        // Remove rounded borders on line numbers and titles\n        > tbody > tr > .filename span.filename,\n        > tbody > tr > .linenos {\n          margin: 0;\n          border-top-left-radius: 0;\n          border-top-right-radius: 0;\n        }\n\n        // Remove rounded borders on code blocks\n        > tbody > tr > .code > div > pre > code {\n          border-top-left-radius: 0;\n          border-top-right-radius: 0;\n        }\n      }\n\n      // Code block result container - adjust spacing\n      + .result {\n        margin-top: px2em(-2px);\n      }\n    }\n\n    // Adjust spacing for nested tabbed container\n    > .tabbed-set {\n      margin: 0;\n    }\n  }\n\n  // Tabbed button\n  .tabbed-button {\n    display: block;\n    align-self: center;\n    width: px2rem(18px);\n    height: px2rem(18px);\n    margin-top: px2rem(2px);\n    color: var(--md-default-fg-color--light);\n    border-radius: 100%;\n    cursor: pointer;\n    transition: background-color 250ms;\n    pointer-events: initial;\n\n    // Tabbed button on hover\n    &:hover {\n      color: var(--md-accent-fg-color);\n      background-color: var(--md-accent-fg-color--transparent);\n    }\n\n    // Tabbed button icon\n    &::after {\n      display: block;\n      width: 100%;\n      height: 100%;\n      background-color: currentcolor;\n      transition:\n        background-color 250ms,\n        transform        250ms;\n      mask-image: var(--md-tabbed-icon--prev);\n      mask-position: center;\n      mask-repeat: no-repeat;\n      mask-size: contain;\n      content: \"\";\n    }\n  }\n\n  // Tabbed control\n  .tabbed-control {\n    position: absolute;\n    display: flex;\n    justify-content: start;\n    width: px2rem(24px);\n    height: px2rem(38px);\n    background:\n      linear-gradient(\n        to right,\n        var(--md-default-bg-color) 60%,\n        transparent\n      );\n    transition: opacity 125ms;\n    pointer-events: none;\n\n    // Adjust for right-to-left languages\n    [dir=\"rtl\"] & {\n      transform: rotate(180deg);\n    }\n\n    // Tabbed control is hidden\n    &[hidden] {\n      opacity: 0;\n    }\n\n    // Tabbed control next\n    &--next {\n      right: 0;\n      justify-content: end;\n      background:\n        linear-gradient(\n          to left,\n          var(--md-default-bg-color) 60%,\n          transparent\n        );\n\n      // Tabbed button icon content\n      .tabbed-button::after {\n        mask-image: var(--md-tabbed-icon--next);\n      }\n    }\n  }\n}\n\n// ----------------------------------------------------------------------------\n// Rules: top-level\n// ----------------------------------------------------------------------------\n\n// [mobile -]: Align with body copy\n@include break-to-device(mobile) {\n\n  // Top-level tabbed labels\n  .md-content__inner > .tabbed-set .tabbed-labels {\n    max-width: 100vw;\n    margin: 0 px2rem(-16px);\n    padding-inline-start: px2rem(16px);\n    scroll-padding-inline-start: px2rem(16px);\n\n    // Hack: some browsers ignore the right padding on flex containers,\n    // see https://bit.ly/3lsPS3S\n    &::after {\n      padding-inline-end: px2rem(16px);\n      content: \"\";\n    }\n\n    // Tabbed control previous\n    ~ .tabbed-control--prev {\n      width: px2rem(40px);\n      margin-inline-start: px2rem(-16px);\n      padding-inline-start: px2rem(16px);\n    }\n\n    // Tabbed control next\n    ~ .tabbed-control--next {\n      width: px2rem(40px);\n      margin-inline-end: px2rem(-16px);\n      padding-inline-end: px2rem(16px);\n    }\n  }\n}\n\n// ----------------------------------------------------------------------------\n// Placeholders: improve colocation for better compression\n// ----------------------------------------------------------------------------\n\n// Tab label placeholder\n%tabbed-label {\n\n  // [screen]: Show active state\n  @media screen {\n    color: var(--md-accent-fg-color);\n\n    // [no-js]: Show border (indicator is animated with JavaScript)\n    .no-js & {\n      border-color: var(--md-accent-fg-color);\n    }\n  }\n}\n\n// Tab label on keyboard focus placeholder\n%tabbed-label-focus-visible {\n  background-color: var(--md-accent-fg-color--transparent);\n}\n\n// Tab content placeholder\n%tabbed-content {\n  display: block;\n}\n", "////\n/// Copyright (c) 2016-2022 Martin Donath \n///\n/// Permission is hereby granted, free of charge, to any person obtaining a\n/// copy of this software and associated documentation files (the \"Software\"),\n/// to deal in the Software without restriction, including without limitation\n/// the rights to use, copy, modify, merge, publish, distribute, sublicense,\n/// and/or sell copies of the Software, and to permit persons to whom the\n/// Software is furnished to do so, subject to the following conditions:\n///\n/// The above copyright notice and this permission notice shall be included in\n/// all copies or substantial portions of the Software.\n///\n/// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n/// FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL\n/// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n/// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n/// DEALINGS\n////\n\n// ----------------------------------------------------------------------------\n// Rules\n// ----------------------------------------------------------------------------\n\n// Tasklist variables\n:root {\n  --md-tasklist-icon:\n    svg-load(\"octicons/check-circle-fill-24.svg\");\n  --md-tasklist-icon--checked:\n    svg-load(\"octicons/check-circle-fill-24.svg\");\n}\n\n// ----------------------------------------------------------------------------\n\n// Scoped in typesetted content to match specificity of regular content\n.md-typeset {\n\n  // Tasklist item\n  .task-list-item {\n    position: relative;\n    list-style-type: none;\n\n    // Make checkbox items align with normal list items, but position\n    // everything in ems for correct layout at smaller font sizes\n    [type=\"checkbox\"] {\n      position: absolute;\n      top: 0.45em;\n      inset-inline-start: -2em;\n    }\n  }\n\n  // Hide native checkbox, when custom classes are enabled\n  .task-list-control [type=\"checkbox\"] {\n    z-index: -1;\n    opacity: 0;\n  }\n\n  // Tasklist indicator in unchecked state\n  .task-list-indicator::before {\n    position: absolute;\n    top: 0.15em;\n    inset-inline-start: px2em(-24px);\n    width: px2em(20px);\n    height: px2em(20px);\n    background-color: var(--md-default-fg-color--lightest);\n    mask-image: var(--md-tasklist-icon);\n    mask-position: center;\n    mask-repeat: no-repeat;\n    mask-size: contain;\n    content: \"\";\n  }\n\n  // Tasklist indicator in checked state\n  [type=\"checkbox\"]:checked + .task-list-indicator::before {\n    background-color: $clr-green-a400;\n    mask-image: var(--md-tasklist-icon--checked);\n  }\n}\n", "// css overrides for the readthedocs-sphinx-ext that\n// is automatically appended to projects built/hosted on RTD\n\n.rst-versions {\n  font-family: var(--md-text-font-family);\n\n  &.rst-badge {\n    top: 50px;\n    // stylelint-disable-next-line declaration-no-important\n    bottom: inherit !important;\n    height: auto;\n    font-size: 0.85rem;\n  }\n}\n", "////\n/// Copyright (c) 2016-2022 Martin Donath \n///\n/// Permission is hereby granted, free of charge, to any person obtaining a\n/// copy of this software and associated documentation files (the \"Software\"),\n/// to deal in the Software without restriction, including without limitation\n/// the rights to use, copy, modify, merge, publish, distribute, sublicense,\n/// and/or sell copies of the Software, and to permit persons to whom the\n/// Software is furnished to do so, subject to the following conditions:\n///\n/// The above copyright notice and this permission notice shall be included in\n/// all copies or substantial portions of the Software.\n///\n/// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n/// FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL\n/// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n/// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n/// DEALINGS\n////\n\n// ----------------------------------------------------------------------------\n// Rules\n// ----------------------------------------------------------------------------\n\n// All definitions\n:root > * {\n  --md-mermaid-font-family:            var(--md-text-font-family), sans-serif;\n\n  // Colors\n  --md-mermaid-edge-color:             var(--md-code-fg-color);\n  --md-mermaid-node-bg-color:          var(--md-accent-fg-color--transparent);\n  --md-mermaid-node-fg-color:          var(--md-accent-fg-color);\n  --md-mermaid-label-bg-color:         var(--md-default-bg-color);\n  --md-mermaid-label-fg-color:         var(--md-code-fg-color);\n}\n\n// Mermaid container\n.mermaid {\n  margin: 1em 0;\n  line-height: normal;\n}\n", "// All definitions\n:root > * {\n  // Colors\n  --md-graphviz-edge-color:             var(--md-default-fg-color);\n  --md-graphviz-node-bg-color:          var(--md-accent-fg-color--transparent);\n  --md-graphviz-node-fg-color:          var(--md-accent-fg-color);\n  --md-graphviz-label-bg-color:         var(--md-default-bg-color);\n  --md-graphviz-label-fg-color:         var(--md-code-fg-color);\n  --md-graphviz-a-hover-color:          var(--md-primary-fg-color);\n}\n\n// Mermaid container\n.graphviz {\n  margin: 1em 0;\n}\n\n.graphviz a:hover > text {\n  fill: var(--md-graphviz-hover-color) !important; // stylelint-disable-line declaration-no-important\n}\n", "////\n/// Copyright (c) 2016-2022 Martin Donath \n///\n/// Permission is hereby granted, free of charge, to any person obtaining a\n/// copy of this software and associated documentation files (the \"Software\"),\n/// to deal in the Software without restriction, including without limitation\n/// the rights to use, copy, modify, merge, publish, distribute, sublicense,\n/// and/or sell copies of the Software, and to permit persons to whom the\n/// Software is furnished to do so, subject to the following conditions:\n///\n/// The above copyright notice and this permission notice shall be included in\n/// all copies or substantial portions of the Software.\n///\n/// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n/// FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL\n/// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n/// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n/// DEALINGS\n////\n\n// ----------------------------------------------------------------------------\n// Rules\n// ----------------------------------------------------------------------------\n\n// Scoped in typesetted content to match specificity of regular content\n.md-typeset {\n\n  // [tablet +]: Allow for rendering content as sidebars\n  @include break-from-device(tablet) {\n\n    // Modifier to float block elements\n    .inline {\n      float: inline-start;\n      width: px2rem(234px);\n      margin-top: 0;\n      margin-inline-end: px2rem(16px);\n      margin-bottom: px2rem(16px);\n\n      // Modifier to move to end (ltr: right, rtl: left)\n      &.end {\n        float: inline-end;\n        margin-inline: px2rem(16px) 0;\n      }\n    }\n  }\n}\n", "// Additional styles expected by sphinx.\n\n.md-typeset {\n\n  // alignment of text and inline objects inside block objects\n  .align-left {\n    text-align: left;\n  }\n\n  .align-right {\n    text-align: right;\n  }\n\n  .align-center {\n    clear: both;\n    text-align: center;\n  }\n\n  .align-top {\n    vertical-align: top;\n  }\n\n  .align-middle {\n    vertical-align: middle;\n  }\n\n  .align-bottom {\n    vertical-align: bottom;\n  }\n\n  // Figures, Images, and Tables\n  .figure.align-left,\n  figure.align-left,\n  img.align-left,\n  object.align-left,\n  table.align-left {\n    margin-right: auto;\n  }\n\n  .figure.align-center,\n  figure.align-center,\n  img.align-center,\n  object.align-center,\n  table.align-center {\n    margin-right: auto;\n    margin-left: auto;\n  }\n\n  .figure.align-right,\n  figure.align-right,\n  img.align-right,\n  object.align-right,\n  table.align-right {\n    margin-left: auto;\n  }\n\n  .figure.align-center,\n  .figure.align-right,\n  figure.align-center,\n  figure.align-right,\n  img.align-center,\n  img.align-right,\n  object.align-center,\n  object.align-right {\n    display: block;\n  }\n\n  // reset inner alignment in figures and tables\n  .figure.align-left,\n  .figure.align-right,\n  figure.align-left,\n  figure.align-right,\n  table.align-left,\n  table.align-center,\n  table.align-right {\n    text-align: inherit;\n  }\n\n  .rubric {\n    font-weight: 700;\n  }\n\n  .viewcode-block .viewcode-back {\n    float: right;\n  }\n\n  .versionmodified {\n    font-style: italic;\n  }\n\n  // Indentation of line blocks\n  div.line-block {\n    display: block;\n  }\n\n  div.line-block div.line-block {\n    margin-left: 1.5em;\n  }\n}\n", "$api-color-header-bg: var(--md-code-bg-color);\n$api-color-keyword: var(--md-code-hl-keyword-color);\n$api-color-name: var(--md-code-hl-name-color);\n$api-color-pre-name: var(--md-code-hl-name-color);\n$api-color-type: var(--md-code-hl-special-color);\n$api-color-param-name: var(--md-default-fg-color--light);\n$objinfo-icon-size: 16px;\n\n// Wrap in .md-typeset to ensure rules below have higher selectivity\n// than those in _typeset.scss.\n.md-typeset {\n  :is(dl.objdesc, dl.api-field) > dt {\n    font-family: var(--md-code-font-family);\n    background: $api-color-header-bg;\n\n    // Eliminate the normal padding for inline code blocks\n    code {\n      padding: 0;\n      border-radius: 0;\n    }\n\n    .sig-name:not(.sig-name-nonprimary) {\n      padding: 0;\n      color: $api-color-name;\n      font-weight: 700;\n    }\n\n    .sig-param {\n      font-style: normal;\n    }\n\n    .sig-param .n:not(.desctype) {\n      color: $api-color-param-name;\n    }\n\n    .sig-param a.reference .n:not(.desctype):hover {\n      color: var(--md-accent-fg-color);\n    }\n\n    // Ensure each parameter starts on a new line and is indented.\n    &.sig-wrap {\n      .sig-param-decl {\n        &::before {\n          white-space: pre;\n          // 5 spaces below result in 4 spaces of indent.\n          // For some reason one space is lost.\n          content: \"\\A     \";\n        }\n      }\n\n      // Note: It would be nice to have something like\n      // `:last-of-class` here, but that doesn't exist.\n      .sig-paren ~ .sig-paren {\n        // Ensure the final paren starts on a new line\n        &::before {\n          white-space: pre;\n          content: \"\\A\";\n        }\n      }\n    }\n  }\n\n  // Hide the colon added in docutils 0.18\n  dl.objdesc > dd > dl.field-list > dt > .colon {\n    display: none;\n  }\n\n  // Rules for coloring cross-references in signatures.\n  :is(dl.objdesc, dl.api-field) > dt,\n  .sig-inline {\n    a.reference > .sig-name,\n    a.reference.sig-name,\n    a.reference:not(.desctype) > .n {\n      color: var(--md-typeset-a-color);\n\n      &:hover {\n        color: var(--md-accent-fg-color);\n      }\n    }\n\n    .desctype {\n      &,\n      > a.reference {\n        color: $api-color-type;\n        // Prevent pygments highlight rules from taking precedence.\n        .n {\n          color: inherit;\n        }\n      }\n\n      &:is(a.reference):hover,\n      > a.reference:hover {\n        color: var(--md-accent-fg-color);\n      }\n    }\n  }\n\n  dl.objdesc {\n    > dt {\n      padding-top: 0.5em;\n      padding-right: 0.5em;\n      padding-left: 0.5em;\n      font-family: var(--md-code-font-family);\n      background: $api-color-header-bg;\n\n      &,\n      code {\n        font-size: 0.75rem;\n      }\n\n      // Prefix like \"class\", \"staticmethod\".\n      .property {\n        color: $api-color-keyword;\n        font-weight: 700;\n        font-style: normal;\n      }\n\n      .sig-prename {\n        padding: 0;\n        color: $api-color-pre-name;\n      }\n\n      .viewcode-link,\n      .viewcode-back {\n        float: right;\n        text-align: right;\n      }\n\n      &.api-include-path {\n        &,\n        code {\n          font-size: 0.65rem;\n        }\n      }\n    }\n\n    > dt:first-child {\n      padding-top: 0.5em;\n    }\n\n    > dt:last-of-type {\n      padding-bottom: 0.5em;\n    }\n\n    > dd {\n      // Heading like \"Parameters\" or \"Returns\"\n      dl.field-list {\n        > dt {\n          margin-bottom: 1em;\n          font-weight: 700;\n          font-size: 1em;\n        }\n      }\n      // JSON domain uses noindent class to avoid an extra level of\n      // nesting.\n      dd.noindent {\n        margin-left: 0;\n      }\n    }\n  }\n\n  dl.api-field {\n    > dt {\n\n      // Display as table so that background is just the width of the\n      // content.\n      display: table;\n\n      // Prevent permalink symbol from having a background color of $api-color-header-bg.\n      a.headerlink {\n        position: relative;\n        left: 0.5em;\n        width: 0;\n        margin-left: 0;\n      }\n\n      &,\n      code {\n        font-size: 0.65rem;\n      }\n\n      &.api-parameter-kind {\n        float: right;\n        font-family: var(--md-text-font-family);\n\n        &::before {\n          content: \"[\";\n        }\n\n        &::after {\n          content: \"]\";\n        }\n      }\n    }\n  }\n\n  // Make object summaries more compact\n  dl.objdesc.summary > dd {\n    &,\n    > p:first-child {\n      margin-top: 0;\n    }\n  }\n\n  // C/C++ inline \"text\" expressions: should have regular, rather than\n  // \"code\", font face.\n  .sig-inline:is(.c-texpr, .cpp-texpr) {\n    font-family: unset;\n    background-color: unset;\n  }\n}\n\n.md-nav__link {\n  white-space: nowrap;\n}\n\n:root {\n  > * {\n    --objinfo-icon-fg-alias: #{$clr-orange-900};\n    --objinfo-icon-fg-default: #{$clr-grey-800};\n    --objinfo-icon-fg-data: #{$clr-blue-800};\n    --objinfo-icon-fg-procedure: #{$clr-purple-800};\n    --objinfo-icon-fg-sub-data: #{$clr-green-800};\n    --objinfo-icon-bg-default: var(--md-default-bg-color);\n  }\n}\n\n// Only use dark mode on screens\n@media screen {\n\n  // Slate theme, i.e. dark mode\n  [data-md-color-scheme=\"slate\"] {\n    --objinfo-icon-fg-alias: #{$clr-orange-300};\n    --objinfo-icon-fg-default: #{$clr-grey-300};\n    --objinfo-icon-fg-data: #{$clr-blue-300};\n    --objinfo-icon-fg-procedure: #{$clr-purple-200};\n    --objinfo-icon-fg-sub-data: #{$clr-green-300};\n  }\n}\n\n.objinfo-icon {\n  display: inline-block;\n  flex-shrink: 0;\n  width: $objinfo-icon-size;\n  height: $objinfo-icon-size;\n  margin-right: 8px;\n  color: var(--objinfo-icon-fg-default);\n  font-weight: 500;\n  font-family: var(--md-text-font-family);\n  line-height: $objinfo-icon-size;\n  text-align: center;\n  vertical-align: middle;\n  background-color: var(--objinfo-icon-bg-default);\n  border: 1px solid var(--objinfo-icon-fg-default);\n  border-radius: 2px;\n\n  @each $objclass in (alias, procedure, data, sub-data) {\n    &__#{$objclass} {\n      color: var(--objinfo-icon-bg-default);\n      background-color: var(--objinfo-icon-fg-#{$objclass});\n      border: 1px solid var(--objinfo-icon-fg-#{$objclass});\n    }\n  }\n}\n\n.search-result-objlabel {\n  float: right;\n  padding: 2px;\n  border: 1px solid var(--md-default-fg-color--light);\n  border-radius: 2px;\n}\n\n// a rule specifically designed for autosummary tables\n// this overrides `.md-typeset code { word-break: break-word; }`\ntable.longtable.docutils.data.align-default {\n  tbody > tr > td > p > a.reference.internal {\n    > code.xref.py.py-obj.docutils.literal.notranslate {\n      > span.pre {\n        word-break: normal;\n      }\n    }\n  }\n}\n"]}}, {"offset": {"line": 1, "column": 0}, "map": {"version": 3, "sources": ["src/assets/stylesheets/palette/_scheme.scss", "../../../src/assets/stylesheets/palette.scss", "src/assets/stylesheets/palette/_accent.scss", "src/assets/stylesheets/palette/_primary.scss", "src/assets/stylesheets/utilities/_break.scss"], "names": [], "mappings": "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", "file": "palette.css", "sourcesContent": ["////\n/// Copyright (c) 2016-2022 Martin Donath \n///\n/// Permission is hereby granted, free of charge, to any person obtaining a\n/// copy of this software and associated documentation files (the \"Software\"),\n/// to deal in the Software without restriction, including without limitation\n/// the rights to use, copy, modify, merge, publish, distribute, sublicense,\n/// and/or sell copies of the Software, and to permit persons to whom the\n/// Software is furnished to do so, subject to the following conditions:\n///\n/// The above copyright notice and this permission notice shall be included in\n/// all copies or substantial portions of the Software.\n///\n/// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n/// FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL\n/// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n/// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n/// DEALINGS\n////\n\n// ----------------------------------------------------------------------------\n// Rules\n// ----------------------------------------------------------------------------\n\n// Only use dark mode on screens\n@media screen {\n\n  // Slate theme, i.e. dark mode\n  [data-md-color-scheme=\"slate\"] {\n\n    // Slate's hue in the range [0,360] - change this variable to alter the tone\n    // of the theme, e.g. to make it more redish or greenish. This is a slate-\n    // specific variable, but the same approach may be adapted to custom themes.\n    --md-hue: 232;\n\n    // Default color shades\n    --md-default-fg-color:             hsla(var(--md-hue), 75%, 95%, 1);\n    --md-default-fg-color--light:      hsla(var(--md-hue), 75%, 90%, 0.62);\n    --md-default-fg-color--lighter:    hsla(var(--md-hue), 75%, 90%, 0.32);\n    --md-default-fg-color--lightest:   hsla(var(--md-hue), 75%, 90%, 0.12);\n    --md-default-bg-color:             hsla(var(--md-hue), 15%, 21%, 1);\n    --md-default-bg-color--light:      hsla(var(--md-hue), 15%, 21%, 0.54);\n    --md-default-bg-color--lighter:    hsla(var(--md-hue), 15%, 21%, 0.26);\n    --md-default-bg-color--lightest:   hsla(var(--md-hue), 15%, 21%, 0.07);\n\n    // Code color shades\n    --md-code-fg-color:                hsla(var(--md-hue), 18%, 86%, 1);\n    --md-code-bg-color:                hsla(var(--md-hue), 15%, 15%, 1);\n\n    // Code highlighting color shades\n    --md-code-hl-color:                hsla(#{hex2hsl($clr-blue-a200)}, 0.15);\n    --md-code-hl-number-color:         hsla(6, 74%, 63%, 1);\n    --md-code-hl-special-color:        hsla(340, 83%, 66%, 1);\n    --md-code-hl-function-color:       hsla(291, 57%, 65%, 1);\n    --md-code-hl-constant-color:       hsla(250, 62%, 70%, 1);\n    --md-code-hl-keyword-color:        hsla(219, 66%, 64%, 1);\n    --md-code-hl-string-color:         hsla(150, 58%, 44%, 1);\n    --md-code-hl-name-color:           var(--md-code-fg-color);\n    --md-code-hl-operator-color:       var(--md-default-fg-color--light);\n    --md-code-hl-punctuation-color:    var(--md-default-fg-color--light);\n    --md-code-hl-comment-color:        var(--md-default-fg-color--light);\n    --md-code-hl-generic-color:        var(--md-default-fg-color--light);\n    --md-code-hl-variable-color:       var(--md-default-fg-color--light);\n\n    // Typeset color shades\n    --md-typeset-color:                var(--md-default-fg-color);\n\n    // Typeset `a` color shades\n    --md-typeset-a-color:              var(--md-primary-fg-color);\n\n    // Typeset `mark` color shades\n    --md-typeset-mark-color:           hsla(#{hex2hsl($clr-blue-a200)}, 0.3);\n\n    // Typeset `kbd` color shades\n    --md-typeset-kbd-color:            hsla(var(--md-hue), 15%, 94%, 0.12);\n    --md-typeset-kbd-accent-color:     hsla(var(--md-hue), 15%, 94%, 0.2);\n    --md-typeset-kbd-border-color:     hsla(var(--md-hue), 15%, 14%, 1);\n\n    // Typeset `table` color shades\n    --md-typeset-table-color:          hsla(var(--md-hue), 75%, 95%, 0.12);\n\n    // Admonition color shades\n    --md-admonition-fg-color:          var(--md-default-fg-color);\n    --md-admonition-bg-color:          var(--md-default-bg-color);\n\n    // Footer color shades\n    --md-footer-bg-color:              hsla(var(--md-hue), 15%, 12%, 0.87);\n    --md-footer-bg-color--dark:        hsla(var(--md-hue), 15%, 10%, 1);\n\n    // Shadow depth 1\n    --md-shadow-z1:\n      0 #{px2rem(4px)} #{px2rem(10px)} hsla(0, 0%, 0%, 0.2),\n      0 0              #{px2rem(1px)}  hsla(0, 0%, 0%, 0.1);\n\n    // Shadow depth 2\n    --md-shadow-z2:\n      0 #{px2rem(4px)} #{px2rem(10px)} hsla(0, 0%, 0%, 0.3),\n      0 0              #{px2rem(1px)}  hsla(0, 0%, 0%, 0.25);\n\n    // Shadow depth 3\n    --md-shadow-z3:\n      0 #{px2rem(4px)} #{px2rem(10px)} hsla(0, 0%, 0%, 0.4),\n      0 0              #{px2rem(1px)}  hsla(0, 0%, 0%, 0.35);\n\n    // Hide images for light mode\n    img[src$=\"#only-light\"],\n    img[src$=\"#gh-light-mode-only\"] {\n      display: none;\n    }\n\n    // Show images for dark mode\n    img[src$=\"#only-dark\"],\n    img[src$=\"#gh-dark-mode-only\"] {\n      display: initial;\n    }\n  }\n\n  // --------------------------------------------------------------------------\n\n  // Adjust link colors for dark primary colors\n  @each $name, $color in (\n    \"pink\":                            hsl(340, 81%, 63%),\n    \"purple\":                          hsl(291, 43%, 63%),\n    \"deep-purple\":                     hsl(262, 63%, 70%),\n    \"indigo\":                          hsl(219, 56%, 63%),\n    \"teal\":                            hsl(174, 100%, 40%),\n    \"green\":                           hsl(122, 39%, 60%),\n    \"deep-orange\":                     hsl(14, 100%, 73%),\n    \"brown\":                           hsl(16, 45%, 60%),\n\n    // Set neutral colors to indigo\n    \"grey\":                            hsl(219, 56%, 63%),\n    \"blue-grey\":                       hsl(219, 56%, 63%),\n    \"white\":                           hsl(219, 56%, 63%),\n    \"black\":                           hsl(219, 56%, 63%)\n  ) {\n    [data-md-color-scheme=\"slate\"][data-md-color-primary=\"#{$name}\"] {\n      --md-typeset-a-color: #{$color};\n    }\n  }\n\n  // --------------------------------------------------------------------------\n\n  // Switching in progress - disable all transitions temporarily\n  [data-md-color-switching] *,\n  [data-md-color-switching] *::before,\n  [data-md-color-switching] *::after {\n    transition-duration: 0ms !important; // stylelint-disable-line\n  }\n}\n", "@media screen {\n  [data-md-color-scheme=slate] {\n    --md-hue: 232;\n    --md-default-fg-color: hsla(var(--md-hue), 75%, 95%, 1);\n    --md-default-fg-color--light: hsla(var(--md-hue), 75%, 90%, 0.62);\n    --md-default-fg-color--lighter: hsla(var(--md-hue), 75%, 90%, 0.32);\n    --md-default-fg-color--lightest: hsla(var(--md-hue), 75%, 90%, 0.12);\n    --md-default-bg-color: hsla(var(--md-hue), 15%, 21%, 1);\n    --md-default-bg-color--light: hsla(var(--md-hue), 15%, 21%, 0.54);\n    --md-default-bg-color--lighter: hsla(var(--md-hue), 15%, 21%, 0.26);\n    --md-default-bg-color--lightest: hsla(var(--md-hue), 15%, 21%, 0.07);\n    --md-code-fg-color: hsla(var(--md-hue), 18%, 86%, 1);\n    --md-code-bg-color: hsla(var(--md-hue), 15%, 15%, 1);\n    --md-code-hl-color: hsla(218, 100%, 63%, 0.15);\n    --md-code-hl-number-color: hsla(6, 74%, 63%, 1);\n    --md-code-hl-special-color: hsla(340, 83%, 66%, 1);\n    --md-code-hl-function-color: hsla(291, 57%, 65%, 1);\n    --md-code-hl-constant-color: hsla(250, 62%, 70%, 1);\n    --md-code-hl-keyword-color: hsla(219, 66%, 64%, 1);\n    --md-code-hl-string-color: hsla(150, 58%, 44%, 1);\n    --md-code-hl-name-color: var(--md-code-fg-color);\n    --md-code-hl-operator-color: var(--md-default-fg-color--light);\n    --md-code-hl-punctuation-color: var(--md-default-fg-color--light);\n    --md-code-hl-comment-color: var(--md-default-fg-color--light);\n    --md-code-hl-generic-color: var(--md-default-fg-color--light);\n    --md-code-hl-variable-color: var(--md-default-fg-color--light);\n    --md-typeset-color: var(--md-default-fg-color);\n    --md-typeset-a-color: var(--md-primary-fg-color);\n    --md-typeset-mark-color: hsla(218, 100%, 63%, 0.3);\n    --md-typeset-kbd-color: hsla(var(--md-hue), 15%, 94%, 0.12);\n    --md-typeset-kbd-accent-color: hsla(var(--md-hue), 15%, 94%, 0.2);\n    --md-typeset-kbd-border-color: hsla(var(--md-hue), 15%, 14%, 1);\n    --md-typeset-table-color: hsla(var(--md-hue), 75%, 95%, 0.12);\n    --md-admonition-fg-color: var(--md-default-fg-color);\n    --md-admonition-bg-color: var(--md-default-bg-color);\n    --md-footer-bg-color: hsla(var(--md-hue), 15%, 12%, 0.87);\n    --md-footer-bg-color--dark: hsla(var(--md-hue), 15%, 10%, 1);\n    --md-shadow-z1:\n      0 0.2rem 0.5rem hsla(0, 0%, 0%, 0.2),\n      0 0 0.05rem hsla(0, 0%, 0%, 0.1);\n    --md-shadow-z2:\n      0 0.2rem 0.5rem hsla(0, 0%, 0%, 0.3),\n      0 0 0.05rem hsla(0, 0%, 0%, 0.25);\n    --md-shadow-z3:\n      0 0.2rem 0.5rem hsla(0, 0%, 0%, 0.4),\n      0 0 0.05rem hsla(0, 0%, 0%, 0.35);\n  }\n  [data-md-color-scheme=slate] img[src$=\"#only-light\"],\n[data-md-color-scheme=slate] img[src$=\"#gh-light-mode-only\"] {\n    display: none;\n  }\n  [data-md-color-scheme=slate] img[src$=\"#only-dark\"],\n[data-md-color-scheme=slate] img[src$=\"#gh-dark-mode-only\"] {\n    display: initial;\n  }\n  [data-md-color-scheme=slate][data-md-color-primary=pink] {\n    --md-typeset-a-color: hsl(340deg, 81%, 63%);\n  }\n  [data-md-color-scheme=slate][data-md-color-primary=purple] {\n    --md-typeset-a-color: hsl(291deg, 43%, 63%);\n  }\n  [data-md-color-scheme=slate][data-md-color-primary=deep-purple] {\n    --md-typeset-a-color: hsl(262deg, 63%, 70%);\n  }\n  [data-md-color-scheme=slate][data-md-color-primary=indigo] {\n    --md-typeset-a-color: hsl(219deg, 56%, 63%);\n  }\n  [data-md-color-scheme=slate][data-md-color-primary=teal] {\n    --md-typeset-a-color: hsl(174deg, 100%, 40%);\n  }\n  [data-md-color-scheme=slate][data-md-color-primary=green] {\n    --md-typeset-a-color: hsl(122deg, 39%, 60%);\n  }\n  [data-md-color-scheme=slate][data-md-color-primary=deep-orange] {\n    --md-typeset-a-color: hsl(14deg, 100%, 73%);\n  }\n  [data-md-color-scheme=slate][data-md-color-primary=brown] {\n    --md-typeset-a-color: hsl(16deg, 45%, 60%);\n  }\n  [data-md-color-scheme=slate][data-md-color-primary=grey] {\n    --md-typeset-a-color: hsl(219deg, 56%, 63%);\n  }\n  [data-md-color-scheme=slate][data-md-color-primary=blue-grey] {\n    --md-typeset-a-color: hsl(219deg, 56%, 63%);\n  }\n  [data-md-color-scheme=slate][data-md-color-primary=white] {\n    --md-typeset-a-color: hsl(219deg, 56%, 63%);\n  }\n  [data-md-color-scheme=slate][data-md-color-primary=black] {\n    --md-typeset-a-color: hsl(219deg, 56%, 63%);\n  }\n  [data-md-color-switching] *,\n[data-md-color-switching] *::before,\n[data-md-color-switching] *::after {\n    transition-duration: 0ms !important;\n  }\n}\n[data-md-color-accent=red] {\n  --md-accent-fg-color: hsla(348, 100%, 55%, 1);\n  --md-accent-fg-color--transparent: hsla(348, 100%, 55%, 0.1);\n  --md-accent-bg-color: hsla(0, 0%, 100%, 1);\n  --md-accent-bg-color--light: hsla(0, 0%, 100%, 0.7);\n}\n\n[data-md-color-accent=pink] {\n  --md-accent-fg-color: hsla(339, 100%, 48%, 1);\n  --md-accent-fg-color--transparent: hsla(339, 100%, 48%, 0.1);\n  --md-accent-bg-color: hsla(0, 0%, 100%, 1);\n  --md-accent-bg-color--light: hsla(0, 0%, 100%, 0.7);\n}\n\n[data-md-color-accent=purple] {\n  --md-accent-fg-color: hsla(291, 96%, 62%, 1);\n  --md-accent-fg-color--transparent: hsla(291, 96%, 62%, 0.1);\n  --md-accent-bg-color: hsla(0, 0%, 100%, 1);\n  --md-accent-bg-color--light: hsla(0, 0%, 100%, 0.7);\n}\n\n[data-md-color-accent=deep-purple] {\n  --md-accent-fg-color: hsla(256, 100%, 65%, 1);\n  --md-accent-fg-color--transparent: hsla(256, 100%, 65%, 0.1);\n  --md-accent-bg-color: hsla(0, 0%, 100%, 1);\n  --md-accent-bg-color--light: hsla(0, 0%, 100%, 0.7);\n}\n\n[data-md-color-accent=indigo] {\n  --md-accent-fg-color: hsla(231, 99%, 66%, 1);\n  --md-accent-fg-color--transparent: hsla(231, 99%, 66%, 0.1);\n  --md-accent-bg-color: hsla(0, 0%, 100%, 1);\n  --md-accent-bg-color--light: hsla(0, 0%, 100%, 0.7);\n}\n\n[data-md-color-accent=blue] {\n  --md-accent-fg-color: hsla(218, 100%, 63%, 1);\n  --md-accent-fg-color--transparent: hsla(218, 100%, 63%, 0.1);\n  --md-accent-bg-color: hsla(0, 0%, 100%, 1);\n  --md-accent-bg-color--light: hsla(0, 0%, 100%, 0.7);\n}\n\n[data-md-color-accent=light-blue] {\n  --md-accent-fg-color: hsla(203, 100%, 46%, 1);\n  --md-accent-fg-color--transparent: hsla(203, 100%, 46%, 0.1);\n  --md-accent-bg-color: hsla(0, 0%, 100%, 1);\n  --md-accent-bg-color--light: hsla(0, 0%, 100%, 0.7);\n}\n\n[data-md-color-accent=cyan] {\n  --md-accent-fg-color: hsla(188, 100%, 42%, 1);\n  --md-accent-fg-color--transparent: hsla(188, 100%, 42%, 0.1);\n  --md-accent-bg-color: hsla(0, 0%, 100%, 1);\n  --md-accent-bg-color--light: hsla(0, 0%, 100%, 0.7);\n}\n\n[data-md-color-accent=teal] {\n  --md-accent-fg-color: hsla(172, 100%, 37%, 1);\n  --md-accent-fg-color--transparent: hsla(172, 100%, 37%, 0.1);\n  --md-accent-bg-color: hsla(0, 0%, 100%, 1);\n  --md-accent-bg-color--light: hsla(0, 0%, 100%, 0.7);\n}\n\n[data-md-color-accent=green] {\n  --md-accent-fg-color: hsla(145, 100%, 39%, 1);\n  --md-accent-fg-color--transparent: hsla(145, 100%, 39%, 0.1);\n  --md-accent-bg-color: hsla(0, 0%, 100%, 1);\n  --md-accent-bg-color--light: hsla(0, 0%, 100%, 0.7);\n}\n\n[data-md-color-accent=light-green] {\n  --md-accent-fg-color: hsla(97, 81%, 48%, 1);\n  --md-accent-fg-color--transparent: hsla(97, 81%, 48%, 0.1);\n  --md-accent-bg-color: hsla(0, 0%, 100%, 1);\n  --md-accent-bg-color--light: hsla(0, 0%, 100%, 0.7);\n}\n\n[data-md-color-accent=lime] {\n  --md-accent-fg-color: hsla(75, 100%, 46%, 1);\n  --md-accent-fg-color--transparent: hsla(75, 100%, 46%, 0.1);\n  --md-accent-bg-color: hsla(0, 0%, 0%, 0.87);\n  --md-accent-bg-color--light: hsla(0, 0%, 0%, 0.54);\n}\n\n[data-md-color-accent=yellow] {\n  --md-accent-fg-color: hsla(50, 100%, 50%, 1);\n  --md-accent-fg-color--transparent: hsla(50, 100%, 50%, 0.1);\n  --md-accent-bg-color: hsla(0, 0%, 0%, 0.87);\n  --md-accent-bg-color--light: hsla(0, 0%, 0%, 0.54);\n}\n\n[data-md-color-accent=amber] {\n  --md-accent-fg-color: hsla(40, 100%, 50%, 1);\n  --md-accent-fg-color--transparent: hsla(40, 100%, 50%, 0.1);\n  --md-accent-bg-color: hsla(0, 0%, 0%, 0.87);\n  --md-accent-bg-color--light: hsla(0, 0%, 0%, 0.54);\n}\n\n[data-md-color-accent=orange] {\n  --md-accent-fg-color: hsla(34, 100%, 50%, 1);\n  --md-accent-fg-color--transparent: hsla(34, 100%, 50%, 0.1);\n  --md-accent-bg-color: hsla(0, 0%, 0%, 0.87);\n  --md-accent-bg-color--light: hsla(0, 0%, 0%, 0.54);\n}\n\n[data-md-color-accent=deep-orange] {\n  --md-accent-fg-color: hsla(14, 100%, 63%, 1);\n  --md-accent-fg-color--transparent: hsla(14, 100%, 63%, 0.1);\n  --md-accent-bg-color: hsla(0, 0%, 100%, 1);\n  --md-accent-bg-color--light: hsla(0, 0%, 100%, 0.7);\n}\n\n[data-md-color-primary=red] {\n  --md-primary-fg-color: hsl(1, 83%, 63%);\n  --md-primary-fg-color--light: hsl(0, 69%, 67%);\n  --md-primary-fg-color--dark: hsl(1, 77%, 55%);\n  --md-primary-bg-color: hsla(0, 0%, 100%, 1);\n  --md-primary-bg-color--light: hsla(0, 0%, 100%, 0.7);\n}\n\n[data-md-color-primary=pink] {\n  --md-primary-fg-color: hsl(340, 82%, 52%);\n  --md-primary-fg-color--light: hsl(340, 82%, 59%);\n  --md-primary-fg-color--dark: hsl(336, 78%, 43%);\n  --md-primary-bg-color: hsla(0, 0%, 100%, 1);\n  --md-primary-bg-color--light: hsla(0, 0%, 100%, 0.7);\n}\n\n[data-md-color-primary=purple] {\n  --md-primary-fg-color: hsl(291, 47%, 51%);\n  --md-primary-fg-color--light: hsl(291, 47%, 60%);\n  --md-primary-fg-color--dark: hsl(287, 65%, 40%);\n  --md-primary-bg-color: hsla(0, 0%, 100%, 1);\n  --md-primary-bg-color--light: hsla(0, 0%, 100%, 0.7);\n}\n\n[data-md-color-primary=deep-purple] {\n  --md-primary-fg-color: hsl(262, 47%, 55%);\n  --md-primary-fg-color--light: hsl(262, 47%, 63%);\n  --md-primary-fg-color--dark: hsl(262, 52%, 47%);\n  --md-primary-bg-color: hsla(0, 0%, 100%, 1);\n  --md-primary-bg-color--light: hsla(0, 0%, 100%, 0.7);\n}\n\n[data-md-color-primary=indigo] {\n  --md-primary-fg-color: hsl(231, 48%, 48%);\n  --md-primary-fg-color--light: hsl(231, 44%, 56%);\n  --md-primary-fg-color--dark: hsl(232, 54%, 41%);\n  --md-primary-bg-color: hsla(0, 0%, 100%, 1);\n  --md-primary-bg-color--light: hsla(0, 0%, 100%, 0.7);\n}\n\n[data-md-color-primary=blue] {\n  --md-primary-fg-color: hsl(207, 90%, 54%);\n  --md-primary-fg-color--light: hsl(207, 90%, 61%);\n  --md-primary-fg-color--dark: hsl(210, 79%, 46%);\n  --md-primary-bg-color: hsla(0, 0%, 100%, 1);\n  --md-primary-bg-color--light: hsla(0, 0%, 100%, 0.7);\n}\n\n[data-md-color-primary=light-blue] {\n  --md-primary-fg-color: hsl(199, 98%, 48%);\n  --md-primary-fg-color--light: hsl(199, 92%, 56%);\n  --md-primary-fg-color--dark: hsl(201, 98%, 41%);\n  --md-primary-bg-color: hsla(0, 0%, 100%, 1);\n  --md-primary-bg-color--light: hsla(0, 0%, 100%, 0.7);\n}\n\n[data-md-color-primary=cyan] {\n  --md-primary-fg-color: hsl(187, 100%, 42%);\n  --md-primary-fg-color--light: hsl(187, 71%, 50%);\n  --md-primary-fg-color--dark: hsl(186, 100%, 33%);\n  --md-primary-bg-color: hsla(0, 0%, 100%, 1);\n  --md-primary-bg-color--light: hsla(0, 0%, 100%, 0.7);\n}\n\n[data-md-color-primary=teal] {\n  --md-primary-fg-color: hsl(174, 100%, 29%);\n  --md-primary-fg-color--light: hsl(174, 63%, 40%);\n  --md-primary-fg-color--dark: hsl(173, 100%, 24%);\n  --md-primary-bg-color: hsla(0, 0%, 100%, 1);\n  --md-primary-bg-color--light: hsla(0, 0%, 100%, 0.7);\n}\n\n[data-md-color-primary=green] {\n  --md-primary-fg-color: hsl(122, 39%, 49%);\n  --md-primary-fg-color--light: hsl(123, 38%, 57%);\n  --md-primary-fg-color--dark: hsl(123, 43%, 39%);\n  --md-primary-bg-color: hsla(0, 0%, 100%, 1);\n  --md-primary-bg-color--light: hsla(0, 0%, 100%, 0.7);\n}\n\n[data-md-color-primary=light-green] {\n  --md-primary-fg-color: hsl(88, 50%, 53%);\n  --md-primary-fg-color--light: hsl(88, 50%, 60%);\n  --md-primary-fg-color--dark: hsl(92, 48%, 42%);\n  --md-primary-bg-color: hsla(0, 0%, 100%, 1);\n  --md-primary-bg-color--light: hsla(0, 0%, 100%, 0.7);\n}\n\n[data-md-color-primary=lime] {\n  --md-primary-fg-color: hsl(66, 70%, 54%);\n  --md-primary-fg-color--light: hsl(66, 70%, 61%);\n  --md-primary-fg-color--dark: hsl(62, 61%, 44%);\n  --md-primary-bg-color: hsla(0, 0%, 0%, 0.87);\n  --md-primary-bg-color--light: hsla(0, 0%, 0%, 0.54);\n}\n\n[data-md-color-primary=yellow] {\n  --md-primary-fg-color: hsl(54, 100%, 62%);\n  --md-primary-fg-color--light: hsl(54, 100%, 67%);\n  --md-primary-fg-color--dark: hsl(43, 96%, 58%);\n  --md-primary-bg-color: hsla(0, 0%, 0%, 0.87);\n  --md-primary-bg-color--light: hsla(0, 0%, 0%, 0.54);\n}\n\n[data-md-color-primary=amber] {\n  --md-primary-fg-color: hsl(45, 100%, 51%);\n  --md-primary-fg-color--light: hsl(45, 100%, 58%);\n  --md-primary-fg-color--dark: hsl(38, 100%, 50%);\n  --md-primary-bg-color: hsla(0, 0%, 0%, 0.87);\n  --md-primary-bg-color--light: hsla(0, 0%, 0%, 0.54);\n}\n\n[data-md-color-primary=orange] {\n  --md-primary-fg-color: hsl(36, 100%, 57%);\n  --md-primary-fg-color--light: hsl(36, 100%, 57%);\n  --md-primary-fg-color--dark: hsl(33, 100%, 49%);\n  --md-primary-bg-color: hsla(0, 0%, 0%, 0.87);\n  --md-primary-bg-color--light: hsla(0, 0%, 0%, 0.54);\n}\n\n[data-md-color-primary=deep-orange] {\n  --md-primary-fg-color: hsl(14, 100%, 63%);\n  --md-primary-fg-color--light: hsl(14, 100%, 70%);\n  --md-primary-fg-color--dark: hsl(14, 91%, 54%);\n  --md-primary-bg-color: hsla(0, 0%, 100%, 1);\n  --md-primary-bg-color--light: hsla(0, 0%, 100%, 0.7);\n}\n\n[data-md-color-primary=brown] {\n  --md-primary-fg-color: hsl(16, 25%, 38%);\n  --md-primary-fg-color--light: hsl(16, 18%, 47%);\n  --md-primary-fg-color--dark: hsl(14, 26%, 29%);\n  --md-primary-bg-color: hsla(0, 0%, 100%, 1);\n  --md-primary-bg-color--light: hsla(0, 0%, 100%, 0.7);\n}\n\n[data-md-color-primary=grey] {\n  --md-primary-fg-color: hsl(0, 0%, 46%);\n  --md-primary-fg-color--light: hsl(0, 0%, 62%);\n  --md-primary-fg-color--dark: hsl(0, 0%, 38%);\n  --md-primary-bg-color: hsla(0, 0%, 100%, 1);\n  --md-primary-bg-color--light: hsla(0, 0%, 100%, 0.7);\n  --md-typeset-a-color: hsl(231, 48%, 48%);\n}\n\n[data-md-color-primary=blue-grey] {\n  --md-primary-fg-color: hsl(199, 18%, 40%);\n  --md-primary-fg-color--light: hsl(200, 18%, 46%);\n  --md-primary-fg-color--dark: hsl(199, 18%, 33%);\n  --md-primary-bg-color: hsla(0, 0%, 100%, 1);\n  --md-primary-bg-color--light: hsla(0, 0%, 100%, 0.7);\n  --md-typeset-a-color: hsl(231, 48%, 48%);\n}\n\n[data-md-color-primary=light-green]:not([data-md-color-scheme=slate]) {\n  --md-typeset-a-color: hsl(88deg, 58%, 43%);\n}\n\n[data-md-color-primary=lime]:not([data-md-color-scheme=slate]) {\n  --md-typeset-a-color: hsl(66deg, 88%, 32%);\n}\n\n[data-md-color-primary=yellow]:not([data-md-color-scheme=slate]) {\n  --md-typeset-a-color: hsl(54deg, 100%, 36%);\n}\n\n[data-md-color-primary=amber]:not([data-md-color-scheme=slate]) {\n  --md-typeset-a-color: hsl(45deg, 100%, 41%);\n}\n\n[data-md-color-primary=orange]:not([data-md-color-scheme=slate]) {\n  --md-typeset-a-color: hsl(36deg, 100%, 45%);\n}\n\n[data-md-color-primary=white] {\n  --md-primary-fg-color: hsla(0, 0%, 100%, 1);\n  --md-primary-fg-color--light: hsla(0, 0%, 100%, 0.7);\n  --md-primary-fg-color--dark: hsla(0, 0%, 0%, 0.07);\n  --md-primary-bg-color: hsla(0, 0%, 0%, 0.87);\n  --md-primary-bg-color--light: hsla(0, 0%, 0%, 0.54);\n  --md-typeset-a-color: hsl(231, 48%, 48%);\n}\n[data-md-color-primary=white] .md-hero--expand {\n  border-bottom: 0.05rem solid hsla(0deg, 0%, 0%, 0.07);\n}\n@media screen and (max-width: 76.1875em) {\n  [data-md-color-primary=white] .md-hero {\n    border-bottom: 0.05rem solid hsla(0deg, 0%, 0%, 0.07);\n  }\n}\n@media screen and (min-width: 60em) {\n  [data-md-color-primary=white] .md-search__form {\n    background-color: hsla(0deg, 0%, 0%, 0.07);\n  }\n  [data-md-color-primary=white] .md-search__form:hover {\n    background-color: hsla(0deg, 0%, 0%, 0.32);\n  }\n  [data-md-color-primary=white] .md-search__input + .md-search__icon {\n    color: hsla(0deg, 0%, 0%, 0.87);\n  }\n}\n@media screen and (min-width: 76.25em) {\n  [data-md-color-primary=white] .md-tabs {\n    border-bottom: 0.05rem solid hsla(0deg, 0%, 0%, 0.07);\n  }\n}\n\n[data-md-color-primary=black] {\n  --md-primary-fg-color: hsla(0, 0%, 0%, 1);\n  --md-primary-fg-color--light: hsla(0, 0%, 0%, 0.54);\n  --md-primary-fg-color--dark: hsla(0, 0%, 0%, 1);\n  --md-primary-bg-color: hsla(0, 0%, 100%, 1);\n  --md-primary-bg-color--light: hsla(0, 0%, 100%, 0.7);\n  --md-typeset-a-color: hsl(231, 48%, 48%);\n}\n[data-md-color-primary=black] .md-header {\n  background-color: hsl(0deg, 0%, 0%);\n}\n[data-md-color-primary=black] .md-hero {\n  background-color: hsl(0deg, 0%, 0%);\n}\n@media screen and (max-width: 59.9375em) {\n  [data-md-color-primary=black] .md-nav__source {\n    background-color: hsla(0deg, 0%, 0%, 0.87);\n  }\n}\n@media screen and (min-width: 60em) {\n  [data-md-color-primary=black] .md-search__form {\n    background-color: hsla(0deg, 0%, 100%, 0.12);\n  }\n  [data-md-color-primary=black] .md-search__form:hover {\n    background-color: hsla(0deg, 0%, 100%, 0.3);\n  }\n}\n@media screen and (max-width: 76.1875em) {\n  html [data-md-color-primary=black] .md-nav--primary .md-nav__title[for=__drawer] {\n    background-color: hsl(0deg, 0%, 0%);\n  }\n}\n@media screen and (min-width: 76.25em) {\n  [data-md-color-primary=black] .md-tabs {\n    background-color: hsl(0deg, 0%, 0%);\n  }\n}", "////\n/// Copyright (c) 2016-2022 Martin Donath \n///\n/// Permission is hereby granted, free of charge, to any person obtaining a\n/// copy of this software and associated documentation files (the \"Software\"),\n/// to deal in the Software without restriction, including without limitation\n/// the rights to use, copy, modify, merge, publish, distribute, sublicense,\n/// and/or sell copies of the Software, and to permit persons to whom the\n/// Software is furnished to do so, subject to the following conditions:\n///\n/// The above copyright notice and this permission notice shall be included in\n/// all copies or substantial portions of the Software.\n///\n/// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n/// FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL\n/// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n/// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n/// DEALINGS\n////\n\n// ----------------------------------------------------------------------------\n// Rules\n// ----------------------------------------------------------------------------\n\n// Define accent colors\n@each $name, $color in (\n  \"red\":         $clr-red-a400,\n  \"pink\":        $clr-pink-a400,\n  \"purple\":      $clr-purple-a200,\n  \"deep-purple\": $clr-deep-purple-a200,\n  \"indigo\":      $clr-indigo-a200,\n  \"blue\":        $clr-blue-a200,\n  \"light-blue\":  $clr-light-blue-a700,\n  \"cyan\":        $clr-cyan-a700,\n  \"teal\":        $clr-teal-a700,\n  \"green\":       $clr-green-a700,\n  \"light-green\": $clr-light-green-a700,\n  \"lime\":        $clr-lime-a700,\n  \"yellow\":      $clr-yellow-a700,\n  \"amber\":       $clr-amber-a700,\n  \"orange\":      $clr-orange-a400,\n  \"deep-orange\": $clr-deep-orange-a200\n) {\n\n  // Color palette\n  [data-md-color-accent=\"#{$name}\"] {\n    --md-accent-fg-color:              hsla(#{hex2hsl($color)}, 1);\n    --md-accent-fg-color--transparent: hsla(#{hex2hsl($color)}, 0.1);\n\n    // Inverted text for lighter shades\n    @if index(\"lime\" \"yellow\" \"amber\" \"orange\", $name) {\n      --md-accent-bg-color:           hsla(0, 0%, 0%, 0.87);\n      --md-accent-bg-color--light:    hsla(0, 0%, 0%, 0.54);\n    } @else {\n      --md-accent-bg-color:           hsla(0, 0%, 100%, 1);\n      --md-accent-bg-color--light:    hsla(0, 0%, 100%, 0.7);\n    }\n  }\n}\n", "////\n/// Copyright (c) 2016-2022 Martin Donath \n///\n/// Permission is hereby granted, free of charge, to any person obtaining a\n/// copy of this software and associated documentation files (the \"Software\"),\n/// to deal in the Software without restriction, including without limitation\n/// the rights to use, copy, modify, merge, publish, distribute, sublicense,\n/// and/or sell copies of the Software, and to permit persons to whom the\n/// Software is furnished to do so, subject to the following conditions:\n///\n/// The above copyright notice and this permission notice shall be included in\n/// all copies or substantial portions of the Software.\n///\n/// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n/// FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL\n/// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n/// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n/// DEALINGS\n////\n\n@use \"sass:list\";\n\n// ----------------------------------------------------------------------------\n// Rules\n// ----------------------------------------------------------------------------\n\n// Define primary colors\n@each $name, $colors in (\n  \"red\":         $clr-red-400         $clr-red-300         $clr-red-600,\n  \"pink\":        $clr-pink-500        $clr-pink-400        $clr-pink-700,\n  \"purple\":      $clr-purple-400      $clr-purple-300      $clr-purple-600,\n  \"deep-purple\": $clr-deep-purple-400 $clr-deep-purple-300 $clr-deep-purple-500,\n  \"indigo\":      $clr-indigo-500      $clr-indigo-400      $clr-indigo-700,\n  \"blue\":        $clr-blue-500        $clr-blue-400        $clr-blue-700,\n  \"light-blue\":  $clr-light-blue-500  $clr-light-blue-400  $clr-light-blue-700,\n  \"cyan\":        $clr-cyan-500        $clr-cyan-400        $clr-cyan-700,\n  \"teal\":        $clr-teal-500        $clr-teal-400        $clr-teal-700,\n  \"green\":       $clr-green-500       $clr-green-400       $clr-green-700,\n  \"light-green\": $clr-light-green-500 $clr-light-green-400 $clr-light-green-700,\n  \"lime\":        $clr-lime-500        $clr-lime-400        $clr-lime-700,\n  \"yellow\":      $clr-yellow-500      $clr-yellow-400      $clr-yellow-700,\n  \"amber\":       $clr-amber-500       $clr-amber-400       $clr-amber-700,\n  \"orange\":      $clr-orange-400      $clr-orange-400      $clr-orange-600,\n  \"deep-orange\": $clr-deep-orange-400 $clr-deep-orange-300 $clr-deep-orange-600,\n  \"brown\":       $clr-brown-500       $clr-brown-400       $clr-brown-700,\n  \"grey\":        $clr-grey-600        $clr-grey-500        $clr-grey-700,\n  \"blue-grey\":   $clr-blue-grey-600   $clr-blue-grey-500   $clr-blue-grey-700\n) {\n\n  // Color palette\n  [data-md-color-primary=\"#{$name}\"] {\n    --md-primary-fg-color:             hsl(#{hex2hsl(list.nth($colors, 1))});\n    --md-primary-fg-color--light:      hsl(#{hex2hsl(list.nth($colors, 2))});\n    --md-primary-fg-color--dark:       hsl(#{hex2hsl(list.nth($colors, 3))});\n\n    // Inverted text for lighter shades\n    @if index(\"lime\" \"yellow\" \"amber\" \"orange\", $name) {\n      --md-primary-bg-color:           hsla(0, 0%, 0%, 0.87);\n      --md-primary-bg-color--light:    hsla(0, 0%, 0%, 0.54);\n    } @else {\n      --md-primary-bg-color:           hsla(0, 0%, 100%, 1);\n      --md-primary-bg-color--light:    hsla(0, 0%, 100%, 0.7);\n    }\n\n    // Typeset color shades\n    @if index(\"grey\" \"blue-grey\", $name) {\n      --md-typeset-a-color:            hsl(#{hex2hsl($clr-indigo-500)});\n    }\n  }\n}\n\n// ----------------------------------------------------------------------------\n\n// Adjust link colors for light primary colors\n@each $name, $color in (\n  \"light-green\":                       hsl(88, 58%, 43%),\n  \"lime\":                              hsl(66, 88%, 32%),\n  \"yellow\":                            hsl(54, 100%, 36%),\n  \"amber\":                             hsl(45, 100%, 41%),\n  \"orange\":                            hsl(36, 100%, 45%)\n) {\n  [data-md-color-primary=\"#{$name}\"]:not([data-md-color-scheme=\"slate\"]) {\n    --md-typeset-a-color: #{$color};\n  }\n}\n\n// ----------------------------------------------------------------------------\n// Rules: white\n// ----------------------------------------------------------------------------\n\n// Define primary colors for white\n[data-md-color-primary=\"white\"] {\n  --md-primary-fg-color:               hsla(0, 0%, 100%, 1);\n  --md-primary-fg-color--light:        hsla(0, 0%, 100%, 0.7);\n  --md-primary-fg-color--dark:         hsla(0, 0%, 0%, 0.07);\n  --md-primary-bg-color:               hsla(0, 0%, 0%, 0.87);\n  --md-primary-bg-color--light:        hsla(0, 0%, 0%, 0.54);\n\n  // Typeset `a` color shades\n  --md-typeset-a-color:                hsl(#{hex2hsl($clr-indigo-500)});\n\n  // Add a border if there are no tabs\n  .md-hero--expand {\n    border-bottom: px2rem(1px) solid hsla(0, 0%, 0%, 0.07);\n  }\n\n  // [tablet -]: Set bottom border for hero\n  @include break-to-device(tablet) {\n\n    // Hero teaser\n    .md-hero {\n      border-bottom: px2rem(1px) solid hsla(0, 0%, 0%, 0.07);\n    }\n  }\n\n  // [tablet portrait +]: Header-embedded search\n  @include break-from-device(tablet landscape) {\n\n    // Search form\n    .md-search__form {\n      background-color: hsla(0, 0%, 0%, 0.07);\n\n      // Search form on hover\n      &:hover {\n        background-color: hsla(0, 0%, 0%, 0.32);\n      }\n    }\n\n    // Search icon\n    .md-search__input + .md-search__icon {\n      color: hsla(0, 0%, 0%, 0.87);\n    }\n  }\n\n  // [screen +]: Add bottom border for tabs\n  @include break-from-device(screen) {\n\n    // Navigation tabs\n    .md-tabs {\n      border-bottom: px2rem(1px) solid hsla(0, 0%, 0%, 0.07);\n    }\n  }\n}\n\n// ----------------------------------------------------------------------------\n// Rules: black\n// ----------------------------------------------------------------------------\n\n// Define primary colors for black\n[data-md-color-primary=\"black\"] {\n  --md-primary-fg-color:               hsla(0, 0%, 0%, 1);\n  --md-primary-fg-color--light:        hsla(0, 0%, 0%, 0.54);\n  --md-primary-fg-color--dark:         hsla(0, 0%, 0%, 1);\n  --md-primary-bg-color:               hsla(0, 0%, 100%, 1);\n  --md-primary-bg-color--light:        hsla(0, 0%, 100%, 0.7);\n\n  // Typeset `a` color shades\n  --md-typeset-a-color:                hsl(#{hex2hsl($clr-indigo-500)});\n\n  // Header\n  .md-header {\n    background-color: hsla(0, 0%, 0%, 1);\n  }\n\n  // Hero teaser\n  .md-hero {\n    background-color: hsla(0, 0%, 0%, 1);\n  }\n\n  // [tablet portrait -]: Layered navigation\n  @include break-to-device(tablet portrait) {\n\n    // Repository information container\n    .md-nav__source {\n      background-color: hsla(0, 0%, 0%, 0.87);\n    }\n  }\n\n  // [tablet landscape +]: Header-embedded search\n  @include break-from-device(tablet landscape) {\n\n    // Search form\n    .md-search__form {\n      background-color: hsla(0, 0%, 100%, 0.12);\n\n      // Search form on hover\n      &:hover {\n        background-color: hsla(0, 0%, 100%, 0.3);\n      }\n    }\n  }\n\n  // [tablet -]: Layered navigation\n  @include break-to-device(tablet) {\n\n    // Site title in main navigation\n    html & .md-nav--primary .md-nav__title[for=\"__drawer\"] {\n      background-color: hsla(0, 0%, 0%, 1);\n    }\n  }\n\n  // [screen +]: Set background color for tabs\n  @include break-from-device(screen) {\n\n    // Navigation tabs\n    .md-tabs {\n      background-color: hsla(0, 0%, 0%, 1);\n    }\n  }\n}\n", "////\n/// Copyright (c) 2016-2022 Martin Donath \n///\n/// Permission is hereby granted, free of charge, to any person obtaining a\n/// copy of this software and associated documentation files (the \"Software\"),\n/// to deal in the Software without restriction, including without limitation\n/// the rights to use, copy, modify, merge, publish, distribute, sublicense,\n/// and/or sell copies of the Software, and to permit persons to whom the\n/// Software is furnished to do so, subject to the following conditions:\n///\n/// The above copyright notice and this permission notice shall be included in\n/// all copies or substantial portions of the Software.\n///\n/// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n/// FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL\n/// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n/// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n/// DEALINGS\n////\n\n@use \"sass:list\";\n@use \"sass:map\";\n@use \"sass:math\";\n\n// ----------------------------------------------------------------------------\n// Variables\n// ----------------------------------------------------------------------------\n\n///\n/// Device-specific breakpoints\n///\n/// @example\n///   $break-devices: (\n///     mobile: (\n///       portrait:  220px  479px,\n///       landscape: 480px  719px\n///     ),\n///     tablet: (\n///       portrait:  720px  959px,\n///       landscape: 960px  1219px\n///     ),\n///     screen: (\n///       small:     1220px 1599px,\n///       medium:    1600px 1999px,\n///       large:     2000px\n///     )\n///   );\n///\n$break-devices: () !default;\n\n// ----------------------------------------------------------------------------\n// Helpers\n// ----------------------------------------------------------------------------\n\n///\n/// Choose minimum and maximum device widths\n///\n@function break-select-min-max($devices) {\n  $min: 1000000;\n  $max: 0;\n  @each $key, $value in $devices {\n    @while type-of($value) == map {\n      $value: break-select-min-max($value);\n    }\n    @if type-of($value) == list {\n      @each $number in $value {\n        @if type-of($number) == number {\n          $min: math.min($number, $min);\n          @if $max {\n            $max: math.max($number, $max);\n          }\n        } @else {\n          @error \"Invalid number: #{$number}\";\n        }\n      }\n    } @else if type-of($value) == number {\n      $min: math.min($value, $min);\n      $max: null;\n    } @else {\n      @error \"Invalid value: #{$value}\";\n    }\n  }\n  @return $min, $max;\n}\n\n///\n/// Select minimum and maximum widths for a device breakpoint\n///\n@function break-select-device($device) {\n  $current: $break-devices;\n  @for $n from 1 through length($device) {\n    @if type-of($current) == map {\n      $current: map.get($current, list.nth($device, $n));\n    } @else {\n      @error \"Invalid device map: #{$devices}\";\n    }\n  }\n  @if type-of($current) == list or type-of($current) == number {\n    $current: (default: $current);\n  }\n  @return break-select-min-max($current);\n}\n\n// ----------------------------------------------------------------------------\n// Mixins\n// ----------------------------------------------------------------------------\n\n///\n/// A minimum-maximum media query breakpoint\n///\n@mixin break-at($breakpoint) {\n  @if type-of($breakpoint) == number {\n    @media screen and (min-width: $breakpoint) {\n      @content;\n    }\n  } @else if type-of($breakpoint) == list {\n    $min: list.nth($breakpoint, 1);\n    $max: list.nth($breakpoint, 2);\n    @if type-of($min) == number and type-of($max) == number {\n      @media screen and (min-width: $min) and (max-width: $max) {\n        @content;\n      }\n    } @else {\n      @error \"Invalid breakpoint: #{$breakpoint}\";\n    }\n  } @else {\n    @error \"Invalid breakpoint: #{$breakpoint}\";\n  }\n}\n\n///\n/// An orientation media query breakpoint\n///\n@mixin break-at-orientation($breakpoint) {\n  @if type-of($breakpoint) == string {\n    @media screen and (orientation: $breakpoint) {\n      @content;\n    }\n  } @else {\n    @error \"Invalid breakpoint: #{$breakpoint}\";\n  }\n}\n\n///\n/// A maximum-aspect-ratio media query breakpoint\n///\n@mixin break-at-ratio($breakpoint) {\n  @if type-of($breakpoint) == number {\n    @media screen and (max-aspect-ratio: $breakpoint) {\n      @content;\n    }\n  } @else {\n    @error \"Invalid breakpoint: #{$breakpoint}\";\n  }\n}\n\n///\n/// A minimum-maximum media query device breakpoint\n///\n@mixin break-at-device($device) {\n  @if type-of($device) == string {\n    $device: $device,;\n  }\n  @if type-of($device) == list {\n    $breakpoint: break-select-device($device);\n    @if list.nth($breakpoint, 2) {\n      $min: list.nth($breakpoint, 1);\n      $max: list.nth($breakpoint, 2);\n\n      @media screen and (min-width: $min) and (max-width: $max) {\n        @content;\n      }\n    } @else {\n      @error \"Invalid device: #{$device}\";\n    }\n  } @else {\n    @error \"Invalid device: #{$device}\";\n  }\n}\n\n///\n/// A minimum media query device breakpoint\n///\n@mixin break-from-device($device) {\n  @if type-of($device) == string {\n    $device: $device,;\n  }\n  @if type-of($device) == list {\n    $breakpoint: break-select-device($device);\n    $min: list.nth($breakpoint, 1);\n\n    @media screen and (min-width: $min) {\n      @content;\n    }\n  } @else {\n    @error \"Invalid device: #{$device}\";\n  }\n}\n\n///\n/// A maximum media query device breakpoint\n///\n@mixin break-to-device($device) {\n  @if type-of($device) == string {\n    $device: $device,;\n  }\n  @if type-of($device) == list {\n    $breakpoint: break-select-device($device);\n    $max: list.nth($breakpoint, 2);\n\n    @media screen and (max-width: $max) {\n      @content;\n    }\n  } @else {\n    @error \"Invalid device: #{$device}\";\n  }\n}\n"]}}]}
\ No newline at end of file
+{"version": 3, "sections": [{"offset": {"line": 0, "column": 0}, "map": {"version": 3, "sources": ["src/assets/stylesheets/main/extensions/pymdownx/_keys.scss", "../../../src/assets/stylesheets/main.scss", "src/assets/stylesheets/main/_resets.scss", "src/assets/stylesheets/main/_colors.scss", "src/assets/stylesheets/main/_icons.scss", "src/assets/stylesheets/main/_typeset.scss", "src/assets/stylesheets/utilities/_break.scss", "src/assets/stylesheets/main/layout/_banner.scss", "src/assets/stylesheets/main/layout/_base.scss", "src/assets/stylesheets/main/layout/_clipboard.scss", "src/assets/stylesheets/main/layout/_consent.scss", "src/assets/stylesheets/main/layout/_content.scss", "src/assets/stylesheets/main/layout/_dialog.scss", "src/assets/stylesheets/main/layout/_feedback.scss", "src/assets/stylesheets/main/layout/_footer.scss", "src/assets/stylesheets/main/layout/_form.scss", "src/assets/stylesheets/main/layout/_header.scss", "src/assets/stylesheets/main/layout/_hero.scss", "src/assets/stylesheets/main/layout/_nav.scss", "src/assets/stylesheets/main/layout/_search.scss", "src/assets/stylesheets/main/layout/_select.scss", "src/assets/stylesheets/main/layout/_sidebar.scss", "src/assets/stylesheets/main/layout/_source.scss", "src/assets/stylesheets/main/layout/_tabs.scss", "src/assets/stylesheets/main/layout/_tag.scss", "src/assets/stylesheets/main/layout/_tooltip.scss", "src/assets/stylesheets/main/layout/_top.scss", "src/assets/stylesheets/main/layout/_version.scss", "src/assets/stylesheets/main/extensions/markdown/_admonition.scss", "node_modules/material-design-color/material-color.scss", "src/assets/stylesheets/main/extensions/markdown/_footnotes.scss", "src/assets/stylesheets/main/extensions/markdown/_toc.scss", "src/assets/stylesheets/main/extensions/pymdownx/_arithmatex.scss", "src/assets/stylesheets/main/extensions/pymdownx/_critic.scss", "src/assets/stylesheets/main/extensions/pymdownx/_details.scss", "src/assets/stylesheets/main/extensions/pymdownx/_emoji.scss", "src/assets/stylesheets/main/extensions/pymdownx/_highlight.scss", "src/assets/stylesheets/main/extensions/pymdownx/_tabbed.scss", "src/assets/stylesheets/main/extensions/pymdownx/_tasklist.scss", "src/assets/stylesheets/main/extensions/readthedocs/_readthedocs.scss", "src/assets/stylesheets/main/integrations/_mermaid.scss", "src/assets/stylesheets/main/integrations/_graphviz.scss", "src/assets/stylesheets/main/_modifiers.scss", "src/assets/stylesheets/main/_sphinx.scss", "src/assets/stylesheets/main/_api.scss"], "names": [], "mappings": "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C2B/3FE,wEACE,oC3Bk4FJ,C2Bn4FE,kEACE,oC3Bk4FJ,C2Bn4FE,sDACE,oC3Bk4FJ,C2B/3FI,+EACE,wBAnBG,CAoBH,kDAAA,CAAA,0C3Bi4FN,C2Bn4FI,yEACE,wBAnBG,CAoBH,0C3Bi4FN,C2Bn4FI,6DACE,wBAnBG,CAoBH,kDAAA,CAAA,0C3Bi4FN,C2B73FI,8EACE,a3B+3FN,C2Bh4FI,wEACE,a3B+3FN,C2Bh4FI,4DACE,a3B+3FN,C2B/4FE,oFACE,oB3Bk5FJ,C2Bn5FE,8EACE,oB3Bk5FJ,C2Bn5FE,kEACE,oB3Bk5FJ,C2B94FE,2FACE,mC3Bi5FJ,C2Bl5FE,qFACE,mC3Bi5FJ,C2Bl5FE,yEACE,mC3Bi5FJ,C2B94FI,kGACE,wBAnBG,CAoBH,sDAAA,CAAA,8C3Bg5FN,C2Bl5FI,4FACE,wBAnBG,CAoBH,8C3Bg5FN,C2Bl5FI,gFACE,wBAnBG,CAoBH,sDAAA,CAAA,8C3Bg5FN,C2B54FI,iGACE,a3B84FN,C2B/4FI,2FACE,a3B84FN,C2B/4FI,+EACE,a3B84FN,C2B95FE,uEACE,oB3Bi6FJ,C2Bl6FE,iEACE,oB3Bi6FJ,C2Bl6FE,qDACE,oB3Bi6FJ,C2B75FE,8EACE,mC3Bg6FJ,C2Bj6FE,wEACE,mC3Bg6FJ,C2Bj6FE,4DACE,mC3Bg6FJ,C2B75FI,qFACE,wBAnBG,CAoBH,kDAAA,CAAA,0C3B+5FN,C2Bj6FI,+EACE,wBAnBG,CAoBH,0C3B+5FN,C2Bj6FI,mEACE,wBAnBG,CAoBH,kDAAA,CAAA,0C3B+5FN,C2B35FI,oFACE,a3B65FN,C2B95FI,8EACE,a3B65FN,C2B95FI,kEACE,a3B65FN,C2B76FE,iFACE,oB3Bg7FJ,C2Bj7FE,2EACE,oB3Bg7FJ,C2Bj7FE,+DACE,oB3Bg7FJ,C2B56FE,wFACE,mC3B+6FJ,C2Bh7FE,kFACE,mC3B+6FJ,C2Bh7FE,sEACE,mC3B+6FJ,C2B56FI,+FACE,wBAnBG,CAoBH,iDAAA,CAAA,yC3B86FN,C2Bh7FI,yFACE,wBAnBG,CAoBH,yC3B86FN,C2Bh7FI,6EACE,wBAnBG,CAoBH,iDAAA,CAAA,yC3B86FN,C2B16FI,8FACE,a3B46FN,C2B76FI,wFACE,a3B46FN,C2B76FI,4EACE,a3B46FN,C2B57FE,iFACE,oB3B+7FJ,C2Bh8FE,2EACE,oB3B+7FJ,C2Bh8FE,+DACE,oB3B+7FJ,C2B37FE,wFACE,kC3B87FJ,C2B/7FE,kFACE,kC3B87FJ,C2B/7FE,sEACE,kC3B87FJ,C2B37FI,+FACE,wBAnBG,CAoBH,qDAAA,CAAA,6C3B67FN,C2B/7FI,yFACE,wBAnBG,CAoBH,6C3B67FN,C2B/7FI,6EACE,wBAnBG,CAoBH,qDAAA,CAAA,6C3B67FN,C2Bz7FI,8FACE,a3B27FN,C2B57FI,wFACE,a3B27FN,C2B57FI,4EACE,a3B27FN,C2B38FE,gFACE,oB3B88FJ,C2B/8FE,0EACE,oB3B88FJ,C2B/8FE,8DACE,oB3B88FJ,C2B18FE,uFACE,oC3B68FJ,C2B98FE,iFACE,oC3B68FJ,C2B98FE,qEACE,oC3B68FJ,C2B18FI,8FACE,wBAnBG,CAoBH,sDAAA,CAAA,8C3B48FN,C2B98FI,wFACE,wBAnBG,CAoBH,8C3B48FN,C2B98FI,4EACE,wBAnBG,CAoBH,sDAAA,CAAA,8C3B48FN,C2Bx8FI,6FACE,a3B08FN,C2B38FI,uFACE,a3B08FN,C2B38FI,2EACE,a3B08FN,C2B19FE,wFACE,oB3B69FJ,C2B99FE,kFACE,oB3B69FJ,C2B99FE,sEACE,oB3B69FJ,C2Bz9FE,+FACE,mC3B49FJ,C2B79FE,yFACE,mC3B49FJ,C2B79FE,6EACE,mC3B49FJ,C2Bz9FI,sGACE,wBAnBG,CAoBH,qDAAA,CAAA,6C3B29FN,C2B79FI,gGACE,wBAnBG,CAoBH,6C3B29FN,C2B79FI,oFACE,wBAnBG,CAoBH,qDAAA,CAAA,6C3B29FN,C2Bv9FI,qGACE,a3By9FN,C2B19FI,+FACE,a3By9FN,C2B19FI,mFACE,a3By9FN,C2Bz+FE,mFACE,oB3B4+FJ,C2B7+FE,6EACE,oB3B4+FJ,C2B7+FE,iEACE,oB3B4+FJ,C2Bx+FE,0FACE,mC3B2+FJ,C2B5+FE,oFACE,mC3B2+FJ,C2B5+FE,wEACE,mC3B2+FJ,C2Bx+FI,iGACE,wBAnBG,CAoBH,qDAAA,CAAA,6C3B0+FN,C2B5+FI,2FACE,wBAnBG,CAoBH,6C3B0+FN,C2B5+FI,+EACE,wBAnBG,CAoBH,qDAAA,CAAA,6C3B0+FN,C2Bt+FI,gGACE,a3Bw+FN,C2Bz+FI,0FACE,a3Bw+FN,C2Bz+FI,8EACE,a3Bw+FN,C2Bx/FE,0EACE,oB3B2/FJ,C2B5/FE,oEACE,oB3B2/FJ,C2B5/FE,wDACE,oB3B2/FJ,C2Bv/FE,iFACE,mC3B0/FJ,C2B3/FE,2EACE,mC3B0/FJ,C2B3/FE,+DACE,mC3B0/FJ,C2Bv/FI,wFACE,wBAnBG,CAoBH,oDAAA,CAAA,4C3By/FN,C2B3/FI,kFACE,wBAnBG,CAoBH,4C3By/FN,C2B3/FI,sEACE,wBAnBG,CAoBH,oDAAA,CAAA,4C3By/FN,C2Br/FI,uFACE,a3Bu/FN,C2Bx/FI,iFACE,a3Bu/FN,C2Bx/FI,qEACE,a3Bu/FN,C2BvgGE,gEACE,oB3B0gGJ,C2B3gGE,0DACE,oB3B0gGJ,C2B3gGE,8CACE,oB3B0gGJ,C2BtgGE,uEACE,kC3BygGJ,C2B1gGE,iEACE,kC3BygGJ,C2B1gGE,qDACE,kC3BygGJ,C2BtgGI,8EACE,wBAnBG,CAoBH,iDAAA,CAAA,yC3BwgGN,C2B1gGI,wEACE,wBAnBG,CAoBH,yC3BwgGN,C2B1gGI,4DACE,wBAnBG,CAoBH,iDAAA,CAAA,yC3BwgGN,C2BpgGI,6EACE,a3BsgGN,C2BvgGI,uEACE,a3BsgGN,C2BvgGI,2DACE,a3BsgGN,C2BthGE,oEACE,oB3ByhGJ,C2B1hGE,8DACE,oB3ByhGJ,C2B1hGE,kDACE,oB3ByhGJ,C2BrhGE,2EACE,oC3BwhGJ,C2BzhGE,qEACE,oC3BwhGJ,C2BzhGE,yDACE,oC3BwhGJ,C2BrhGI,kFACE,wBAnBG,CAoBH,qDAAA,CAAA,6C3BuhGN,C2BzhGI,4EACE,wBAnBG,CAoBH,6C3BuhGN,C2BzhGI,gEACE,wBAnBG,CAoBH,qDAAA,CAAA,6C3BuhGN,C2BnhGI,iFACE,a3BqhGN,C2BthGI,2EACE,a3BqhGN,C2BthGI,+DACE,a3B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AHA,MAAA,CAFA,iBAAA,CAOA,2CAAA,CACA,qCACE,CAEF,kDAAA,CAPA,+BpCqxHR,CACF,CoCxwHI,8CACE,YpC0wHN,CoCtwHI,iCAQE,qCAAA,CACA,6BAAA,CALA,uCAAA,CAMA,cAAA,CATA,aAAA,CAKA,gBAAA,CADA,eAAA,CAFA,8BAAA,CAWA,+BAAA,CAHA,2CACE,CALF,kBAAA,CALA,UpCkxHN,CoCnwHM,aAII,6CACE,OpCkwHV,CoCnwHQ,8CACE,OpCqwHV,CoCtwHQ,8CACE,OpCwwHV,CoCzwHQ,8CACE,OpC2wHV,CoC5wHQ,8CACE,OpC8wHV,CoC/wHQ,8CACE,OpCixHV,CoClxHQ,8CACE,OpCoxHV,CoCrxHQ,8CACE,OpCuxHV,CoCxxHQ,8CACE,OpC0xHV,CoC3xHQ,+CACE,QpC6xHV,CoC9xHQ,+CACE,QpCgyHV,CoCjyHQ,+CACE,QpCmyHV,CoCpyHQ,+CACE,QpCsyHV,CoCvyHQ,+CACE,QpCyyHV,CoC1yHQ,+CACE,QpC4yHV,CoC7yHQ,+CACE,QpC+yHV,CoChzHQ,+CACE,QpCkzHV,CoCnzHQ,+CACE,QpCqzHV,CoCtzHQ,+CACE,QpCwzHV,CoCzzHQ,+CACE,QpC2zHV,CACF,CoCtzHM,uCACE,+BpCwzHR,CoClzHE,4BACE,UpCozHJ,CoCjzHI,aAJF,4BAKI,gBpCozHJ,CACF,CoChzHE,0BACE,YpCkzHJ,CoC/yHI,aAJF,0BAKI,apCkzHJ,CoC9yHM,sCACE,OpCgzHR,CoCjzHM,uCACE,OpCmzHR,CoCpzHM,uCACE,OpCszHR,CoCvzHM,uCACE,OpCyzHR,CoC1zHM,uCACE,OpC4zHR,CoC7zHM,uCACE,OpC+zHR,CoCh0HM,uCACE,OpCk0HR,CoCn0HM,uCACE,OpCq0HR,CoCt0HM,uCACE,OpCw0HR,CoCz0HM,wCACE,QpC20HR,CoC50HM,wCACE,QpC80HR,CoC/0HM,wCACE,QpCi1HR,CoCl1HM,wCACE,QpCo1HR,CoCr1HM,wCACE,QpCu1HR,CoCx1HM,wCACE,QpC01HR,CoC31HM,wCACE,QpC61HR,CoC91HM,wCACE,QpCg2HR,CoCj2HM,wCACE,Q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2vIJ,C0CxvIE,uBACE,kB1C0vIJ,C0CvvIE,0BACE,qB1CyvIJ,C0CtvIE,0BACE,qB1CwvIJ,C0CpvIE,mJAKE,iB1CsvIJ,C0CnvIE,6JAME,gBAAA,CADA,iB1CsvIJ,C0ClvIE,wJAKE,gB1CovIJ,C0CjvIE,wPAQE,a1CmvIJ,C0C/uIE,sNAOE,kB1CivIJ,C0C9uIE,oBACE,e1CgvIJ,C0C7uIE,2CACE,W1C+uIJ,C0C5uIE,6BACE,iB1C8uIJ,C0C1uIE,2BACE,a1C4uIJ,C0CzuIE,0CACE,iB1C2uIJ,C2Ch0IE,qDAEE,kCAbkB,CAYlB,sC3Co0IJ,C2Cr0IE,kDAEE,kCAbkB,CAYlB,sC3Co0IJ,C2Cr0IE,4CAEE,kCAbkB,CAYlB,sC3Co0IJ,C2Ch0II,0DAEE,eAAA,CADA,S3Cm0IN,C2Cp0II,uDAEE,eAAA,CADA,S3Cm0IN,C2Cp0II,iDAEE,eAAA,CADA,S3Cm0IN,C2C/zII,yFAEE,kCArBW,CAsBX,eAAA,CAFA,S3Cm0IN,C2Cp0II,sFAEE,kCArBW,CAsBX,eAAA,CAFA,S3Cm0IN,C2Cp0II,gFAEE,kCArBW,CAsBX,eAAA,CAFA,S3Cm0IN,C2C9zII,gEACE,iB3Cg0IN,C2Cj0II,6DACE,iB3Cg0IN,C2Cj0II,uDACE,iB3Cg0IN,C2C7zII,kFACE,uC3C+zIN,C2Ch0II,+EACE,uC3C+zIN,C2Ch0II,yEACE,uC3C+zIN,C2C5zII,oGACE,+B3C8zIN,C2C/zII,iGACE,+B3C8zIN,C2C/zII,2FACE,+B3C8zIN,C2CxzIQ,qFAIE,iBAAA,CAHA,e3C2zIV,C2C5zIQ,kFAIE,iBAAA,CAHA,e3C2zIV,C2C5zIQ,4EAIE,iBAAA,CAHA,e3C2zIV,C2ChzIQ,2FAEE,YAAA,CADA,e3CmzIV,C2CpzIQ,wFAEE,YAAA,CADA,e3CmzIV,C2CpzIQ,kFAEE,YAAA,CADA,e3CmzIV,C2C3yIE,kDACE,Y3C6yIJ,C2CvyII,yXAGE,+B3C4yIN,C2C/yII,gXAGE,+B3C4yIN,C2C/yII,8VAGE,+B3C4yIN,C2C1yIM,6ZACE,+B3CizIR,C2ClzIM,oZACE,+B3CizIR,C2ClzIM,kYACE,+B3CizIR,C2C5yIM,0NAEE,qC3CgzIR,C2ClzIM,oNAEE,qC3CgzIR,C2ClzIM,wMAEE,qC3CgzIR,C2C9yIQ,sOACE,a3CmzIV,C2CpzIQ,gOACE,a3CmzIV,C2CpzIQ,oNACE,a3CmzIV,C2C/yIM,oSAEE,+B3CmzIR,C2CrzIM,wRAEE,+B3CmzIR,C2CrzIM,gQAEE,+B3CmzIR,C2C7yII,0BAKE,kCAvGgB,CAsGhB,sCAAA,CADA,iBAAA,CADA,kBAAA,CADA,gB3CmzIN,C2C7yIM,yDAEE,gB3C+yIR,C2C3yIM,oCACE,qCA/GY,CAiHZ,iBAAA,CADA,e3C8yIR,C2C1yIM,uCAEE,kCApHa,CAmHb,S3C6yIR,C2CzyIM,kFAEE,WAAA,CACA,gB3C2yIR,C2CvyIQ,2FAEE,gB3CyyIV,C2CpyII,sCACE,gB3CsyIN,C2CnyII,uCACE,mB3CqyIN,C2C/xIQ,2CAGE,aAAA,CADA,eAAA,CADA,iB3CmyIV,C2C5xIM,sCACE,a3C8xIR,C2CxxII,4BAIE,a3CuxIN,C2CpxIM,yCAEE,SAAA,CAEA,aAAA,CAHA,iBAAA,CAEA,O3CuxIR,C2CnxIM,6DAEE,gB3CqxIR,C2ClxIM,+CACE,WAAA,CACA,sC3CoxIR,C2ClxIQ,sDACE,W3CoxIV,C2CjxIQ,qDACE,W3CmxIV,C2C3wII,kFAEE,Y3C6wIN,C2CvwIE,yDAEE,sBAAA,CADA,iB3C0wIJ,C2C3wIE,sDAEE,sBAAA,CADA,iB3C0wIJ,C2C3wIE,gDAEE,sBAAA,CADA,iB3C0wIJ,C2CrwIA,cACE,kB3CwwIF,C2CpwIE,QACE,+BAAA,CACA,iCAAA,CACA,8BAAA,CACA,mCAAA,CACA,kCAAA,CACA,oD3CuwIJ,C2ClwIA,cAGE,6BACE,+BAAA,CACA,iCAAA,CACA,8BAAA,CACA,mCAAA,CACA,kC3CmwIF,CACF,C2ChwIA,cAYE,+CAAA,CACA,+CAAA,CACA,iBAAA,CARA,oCAAA,CALA,oBAAA,CACA,aAAA,CAMA,sCAAA,CADA,eAAA,CAHA,WA9OkB,CAmPlB,gBAnPkB,CA+OlB,gBAAA,CAKA,iBAAA,CACA,qBAAA,CARA,U3C6wIF,C2C/vII,qBAEE,6CAAA,CACA,6CAAA,CAFA,oC3CmwIN,C2CpwII,yBAEE,iDAAA,CACA,iDAAA,CAFA,oC3CwwIN,C2CzwII,oBAEE,4CAAA,CACA,4CAAA,CAFA,oC3C6wIN,C2C9wII,wBAEE,gDAAA,CACA,gDAAA,CAFA,oC3CkxIN,C2C3wIA,wBAGE,kDAAA,CACA,iBAAA,CAHA,WAAA,CACA,W3CgxIF,C2CtwIM,yIACE,iB3CywIR", "file": "main.css", "sourcesContent": ["////\n/// Copyright (c) 2016-2022 Martin Donath \n///\n/// Permission is hereby granted, free of charge, to any person obtaining a\n/// copy of this software and associated documentation files (the \"Software\"),\n/// to deal in the Software without restriction, including without limitation\n/// the rights to use, copy, modify, merge, publish, distribute, sublicense,\n/// and/or sell copies of the Software, and to permit persons to whom the\n/// Software is furnished to do so, subject to the following conditions:\n///\n/// The above copyright notice and this permission notice shall be included in\n/// all copies or substantial portions of the Software.\n///\n/// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n/// FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL\n/// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n/// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n/// DEALINGS\n////\n\n// ----------------------------------------------------------------------------\n// Rules\n// ----------------------------------------------------------------------------\n\n// Scoped in typesetted content to match specificity of regular content\n.md-typeset {\n\n  // Keyboard key\n  .keys {\n\n    // Keyboard key icon\n    kbd:is(::before, ::after) {\n      position: relative;\n      margin: 0;\n      color: inherit;\n      -moz-osx-font-smoothing: initial;\n      -webkit-font-smoothing: initial;\n    }\n\n    // Surrounding text\n    span {\n      padding: 0 px2em(3.2px);\n      color: var(--md-default-fg-color--light);\n    }\n\n    // Define keyboard keys with left icon\n    @each $name, $code in (\n\n      // Modifiers\n      \"alt\":           \"\\2387\",\n      \"left-alt\":      \"\\2387\",\n      \"right-alt\":     \"\\2387\",\n      \"command\":       \"\\2318\",\n      \"left-command\":  \"\\2318\",\n      \"right-command\": \"\\2318\",\n      \"control\":       \"\\2303\",\n      \"left-control\":  \"\\2303\",\n      \"right-control\": \"\\2303\",\n      \"meta\":          \"\\25C6\",\n      \"left-meta\":     \"\\25C6\",\n      \"right-meta\":    \"\\25C6\",\n      \"option\":        \"\\2325\",\n      \"left-option\":   \"\\2325\",\n      \"right-option\":  \"\\2325\",\n      \"shift\":         \"\\21E7\",\n      \"left-shift\":    \"\\21E7\",\n      \"right-shift\":   \"\\21E7\",\n      \"super\":         \"\\2756\",\n      \"left-super\":    \"\\2756\",\n      \"right-super\":   \"\\2756\",\n      \"windows\":       \"\\229E\",\n      \"left-windows\":  \"\\229E\",\n      \"right-windows\": \"\\229E\",\n\n      // Other keys\n      \"arrow-down\":    \"\\2193\",\n      \"arrow-left\":    \"\\2190\",\n      \"arrow-right\":   \"\\2192\",\n      \"arrow-up\":      \"\\2191\",\n      \"backspace\":     \"\\232B\",\n      \"backtab\":       \"\\21E4\",\n      \"caps-lock\":     \"\\21EA\",\n      \"clear\":         \"\\2327\",\n      \"context-menu\":  \"\\2630\",\n      \"delete\":        \"\\2326\",\n      \"eject\":         \"\\23CF\",\n      \"end\":           \"\\2913\",\n      \"escape\":        \"\\238B\",\n      \"home\":          \"\\2912\",\n      \"insert\":        \"\\2380\",\n      \"page-down\":     \"\\21DF\",\n      \"page-up\":       \"\\21DE\",\n      \"print-screen\":  \"\\2399\"\n    ) {\n      .key-#{$name}::before {\n        padding-right: px2em(6.4px);\n        content: $code;\n      }\n    }\n\n    // Define keyboard keys with right icon\n    @each $name, $code in (\n      \"tab\":           \"\\21E5\",\n      \"num-enter\":     \"\\2324\",\n      \"enter\":         \"\\23CE\"\n    ) {\n      .key-#{$name}::after {\n        padding-left: px2em(6.4px);\n        content: $code;\n      }\n    }\n  }\n}\n", "@charset \"UTF-8\";\nhtml {\n  box-sizing: border-box;\n  text-size-adjust: none;\n}\n\n*,\n*::before,\n*::after {\n  box-sizing: inherit;\n}\n@media (prefers-reduced-motion) {\n  *,\n*::before,\n*::after {\n    transition: none !important;\n  }\n}\n\nbody {\n  margin: 0;\n}\n\na,\nbutton,\nlabel,\ninput {\n  -webkit-tap-highlight-color: transparent;\n}\n\na {\n  color: inherit;\n  text-decoration: none;\n}\n\nhr {\n  display: block;\n  box-sizing: content-box;\n  height: 0.05rem;\n  padding: 0;\n  overflow: visible;\n  border: 0;\n}\n\nsmall {\n  font-size: 80%;\n}\n\nsub,\nsup {\n  line-height: 1em;\n}\n\nimg {\n  border-style: none;\n}\n\ntable {\n  border-collapse: separate;\n  border-spacing: 0;\n}\n\ntd,\nth {\n  font-weight: 400;\n  vertical-align: top;\n}\n\nbutton {\n  margin: 0;\n  padding: 0;\n  font-size: inherit;\n  font-family: inherit;\n  background: transparent;\n  border: 0;\n}\n\ninput {\n  border: 0;\n  outline: none;\n}\n\n:root, [data-md-color-scheme=default] {\n  --md-default-fg-color: hsla(0, 0%, 0%, 0.87);\n  --md-default-fg-color--light: hsla(0, 0%, 0%, 0.54);\n  --md-default-fg-color--lighter: hsla(0, 0%, 0%, 0.32);\n  --md-default-fg-color--lightest: hsla(0, 0%, 0%, 0.07);\n  --md-default-bg-color: hsla(0, 0%, 100%, 1);\n  --md-default-bg-color--light: hsla(0, 0%, 100%, 0.7);\n  --md-default-bg-color--lighter: hsla(0, 0%, 100%, 0.3);\n  --md-default-bg-color--lightest: hsla(0, 0%, 100%, 0.12);\n  --md-primary-fg-color: hsla(231, 48%, 48%, 1);\n  --md-primary-fg-color--light: hsla(231, 44%, 56%, 1);\n  --md-primary-fg-color--dark: hsla(232, 54%, 41%, 1);\n  --md-primary-bg-color: hsla(0, 0%, 100%, 1);\n  --md-primary-bg-color--light: hsla(0, 0%, 100%, 0.7);\n  --md-accent-fg-color: hsla(231, 99%, 66%, 1);\n  --md-accent-fg-color--transparent: hsla(231, 99%, 66%, 0.1);\n  --md-accent-bg-color: hsla(0, 0%, 100%, 1);\n  --md-accent-bg-color--light: hsla(0, 0%, 100%, 0.7);\n  --md-code-fg-color: hsla(200, 18%, 26%, 1);\n  --md-code-bg-color: hsla(0, 0%, 96%, 1);\n  --md-code-hl-color: hsla(60, 100%, 50%, 0.5);\n  --md-code-hl-number-color: hsla(0, 67%, 50%, 1);\n  --md-code-hl-special-color: hsla(340, 83%, 47%, 1);\n  --md-code-hl-function-color: hsla(291, 45%, 50%, 1);\n  --md-code-hl-constant-color: hsla(250, 63%, 60%, 1);\n  --md-code-hl-keyword-color: hsla(219, 54%, 51%, 1);\n  --md-code-hl-string-color: hsla(150, 63%, 30%, 1);\n  --md-code-hl-name-color: var(--md-code-fg-color);\n  --md-code-hl-operator-color: var(--md-default-fg-color--light);\n  --md-code-hl-punctuation-color: var(--md-default-fg-color--light);\n  --md-code-hl-comment-color: var(--md-default-fg-color--light);\n  --md-code-hl-generic-color: var(--md-default-fg-color--light);\n  --md-code-hl-variable-color: var(--md-default-fg-color--light);\n  --md-typeset-color: var(--md-default-fg-color);\n  --md-typeset-a-color: var(--md-primary-fg-color);\n  --md-typeset-mark-color: hsla(60, 100%, 50%, 0.5);\n  --md-typeset-del-color: hsla(6, 90%, 60%, 0.15);\n  --md-typeset-ins-color: hsla(150, 90%, 44%, 0.15);\n  --md-typeset-kbd-color: hsla(0, 0%, 98%, 1);\n  --md-typeset-kbd-accent-color: hsla(0, 100%, 100%, 1);\n  --md-typeset-kbd-border-color: hsla(0, 0%, 72%, 1);\n  --md-typeset-table-color: hsla(0, 0%, 0%, 0.12);\n  --md-admonition-fg-color: var(--md-default-fg-color);\n  --md-admonition-bg-color: var(--md-default-bg-color);\n  --md-footer-fg-color: hsla(0, 0%, 100%, 1);\n  --md-footer-fg-color--light: hsla(0, 0%, 100%, 0.7);\n  --md-footer-fg-color--lighter: hsla(0, 0%, 100%, 0.3);\n  --md-footer-bg-color: hsla(0, 0%, 0%, 0.87);\n  --md-footer-bg-color--dark: hsla(0, 0%, 0%, 0.32);\n  --md-shadow-z1:\n    0 0.2rem 0.5rem hsla(0, 0%, 0%, 0.05),\n    0 0 0.05rem hsla(0, 0%, 0%, 0.1);\n  --md-shadow-z2:\n    0 0.2rem 0.5rem hsla(0, 0%, 0%, 0.1),\n    0 0 0.05rem hsla(0, 0%, 0%, 0.25);\n  --md-shadow-z3:\n    0 0.2rem 0.5rem hsla(0, 0%, 0%, 0.2),\n    0 0 0.05rem hsla(0, 0%, 0%, 0.35);\n}\n\n.md-icon svg {\n  display: block;\n  width: 1.2rem;\n  height: 1.2rem;\n  fill: currentcolor;\n}\n\n.si-icon-inline::before {\n  display: inline-flex;\n  width: 1.125em;\n  height: 1.125em;\n  vertical-align: text-top;\n  background-color: var(--md-default-fg-color);\n  content: \"\";\n  mask-repeat: no-repeat;\n  mask-position: center;\n}\n\nbody {\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n  --md-text-font-family:\n    var(--md-text-font, _),\n    -apple-system, BlinkMacSystemFont, Helvetica, Arial, sans-serif;\n  --md-code-font-family:\n    var(--md-code-font, _),\n    SFMono-Regular, Consolas, Menlo, monospace;\n}\n\nbody,\ninput {\n  color: var(--md-typeset-color);\n  font-feature-settings: \"kern\", \"liga\";\n  font-family: var(--md-text-font-family);\n}\n\ncode,\npre,\nkbd {\n  color: var(--md-typeset-color);\n  font-feature-settings: \"kern\";\n  font-family: var(--md-code-font-family);\n}\n\n:root {\n  --md-typeset-table-sort-icon: svg-load(\"material/sort.svg\");\n  --md-typeset-table-sort-icon--asc: svg-load(\"material/sort-ascending.svg\");\n  --md-typeset-table-sort-icon--desc: svg-load(\"material/sort-descending.svg\");\n}\n\n.md-typeset {\n  font-size: 0.8rem;\n  line-height: 1.6;\n  color-adjust: exact;\n}\n@media print {\n  .md-typeset {\n    font-size: 0.68rem;\n  }\n}\n.md-typeset ul,\n.md-typeset ol,\n.md-typeset dl,\n.md-typeset figure,\n.md-typeset blockquote,\n.md-typeset pre {\n  margin-block: 1em;\n}\n.md-typeset h1 {\n  margin: 0 0 1.25em;\n  color: var(--md-default-fg-color--light);\n  font-weight: 300;\n  font-size: 2em;\n  line-height: 1.3;\n  letter-spacing: -0.01em;\n}\n.md-typeset h2 {\n  margin: 1.6em 0 0.64em;\n  font-weight: 300;\n  font-size: 1.5625em;\n  line-height: 1.4;\n  letter-spacing: -0.01em;\n}\n.md-typeset h3 {\n  margin: 1.6em 0 0.8em;\n  font-weight: 400;\n  font-size: 1.25em;\n  line-height: 1.5;\n  letter-spacing: -0.01em;\n}\n.md-typeset h2 + h3 {\n  margin-top: 0.8em;\n}\n.md-typeset h4 {\n  margin: 1em 0;\n  font-weight: 700;\n  letter-spacing: -0.01em;\n}\n.md-typeset h5,\n.md-typeset h6 {\n  margin: 1.25em 0;\n  color: var(--md-default-fg-color--light);\n  font-weight: 700;\n  font-size: 0.8em;\n  letter-spacing: -0.01em;\n}\n.md-typeset h5 {\n  text-transform: uppercase;\n}\n.md-typeset hr {\n  display: flow-root;\n  margin: 1.5em 0;\n  border-bottom: 0.05rem solid var(--md-default-fg-color--lightest);\n}\n.md-typeset a {\n  color: var(--md-typeset-a-color);\n  word-break: break-word;\n}\n.md-typeset a, .md-typeset a::before {\n  transition: color 125ms;\n}\n.md-typeset a:focus, .md-typeset a:hover {\n  color: var(--md-accent-fg-color);\n}\n.md-typeset a:focus code, .md-typeset a:hover code {\n  background-color: var(--md-accent-fg-color--transparent);\n}\n.md-typeset a code {\n  color: currentcolor;\n  transition: background-color 125ms;\n}\n.md-typeset a.focus-visible {\n  outline-color: var(--md-accent-fg-color);\n  outline-offset: 0.2rem;\n}\n.md-typeset code,\n.md-typeset pre,\n.md-typeset kbd {\n  color: var(--md-code-fg-color);\n  direction: ltr;\n  font-variant-ligatures: none;\n}\n@media print {\n  .md-typeset code,\n.md-typeset pre,\n.md-typeset kbd {\n    white-space: pre-wrap;\n  }\n}\n.md-typeset code {\n  padding: 0 0.2941176471em;\n  font-size: 0.85em;\n  word-break: break-word;\n  background-color: var(--md-code-bg-color);\n  border-radius: 0.1rem;\n  box-decoration-break: clone;\n}\n.md-typeset code:not(.focus-visible) {\n  outline: none;\n  -webkit-tap-highlight-color: transparent;\n}\n.md-typeset pre {\n  position: relative;\n  display: flow-root;\n  line-height: 1.4;\n}\n.md-typeset pre > code {\n  display: block;\n  margin: 0;\n  padding: 0.7720588235em 1.1764705882em;\n  overflow: auto;\n  word-break: normal;\n  outline-color: var(--md-accent-fg-color);\n  box-shadow: none;\n  box-decoration-break: slice;\n  touch-action: auto;\n  scrollbar-width: thin;\n  scrollbar-color: var(--md-default-fg-color--lighter) transparent;\n}\n.md-typeset pre > code:hover {\n  scrollbar-color: var(--md-accent-fg-color) transparent;\n}\n.md-typeset pre > code::-webkit-scrollbar {\n  width: 0.2rem;\n  height: 0.2rem;\n}\n.md-typeset pre > code::-webkit-scrollbar-thumb {\n  background-color: var(--md-default-fg-color--lighter);\n}\n.md-typeset pre > code::-webkit-scrollbar-thumb:hover {\n  background-color: var(--md-accent-fg-color);\n}\n.md-typeset .code-block-caption + .notranslate pre,\n.md-typeset .code-block-caption + .notranslate .highlighttable {\n  margin-top: 0;\n}\n.md-typeset kbd {\n  display: inline-block;\n  padding: 0 0.6666666667em;\n  color: var(--md-default-fg-color);\n  font-size: 0.75em;\n  vertical-align: text-top;\n  word-break: break-word;\n  background-color: var(--md-typeset-kbd-color);\n  border-radius: 0.1rem;\n  box-shadow: 0 0.1rem 0 0.05rem var(--md-typeset-kbd-border-color), 0 0.1rem 0 var(--md-typeset-kbd-border-color), 0 -0.1rem 0.2rem var(--md-typeset-kbd-accent-color) inset;\n}\n.md-typeset mark {\n  color: inherit;\n  word-break: break-word;\n  background-color: var(--md-typeset-mark-color);\n  box-decoration-break: clone;\n}\n.md-typeset abbr {\n  text-decoration: none;\n  border-bottom: 0.05rem dotted var(--md-default-fg-color--light);\n  cursor: help;\n}\n@media (hover: none) {\n  .md-typeset abbr {\n    position: relative;\n  }\n  .md-typeset abbr[title]:is(:focus, :hover)::after {\n    position: absolute;\n    inset-inline-start: 0;\n    display: inline-block;\n    width: auto;\n    min-width: max-content;\n    max-width: 80%;\n    margin-top: 2em;\n    padding: 0.2rem 0.3rem;\n    color: var(--md-default-bg-color);\n    font-size: 0.7rem;\n    background-color: var(--md-default-fg-color);\n    border-radius: 0.1rem;\n    box-shadow: var(--md-shadow-z3);\n    content: attr(title);\n  }\n}\n.md-typeset small {\n  opacity: 0.75;\n}\n.md-typeset sup,\n.md-typeset sub {\n  margin-inline-start: 0.078125em;\n}\n.md-typeset blockquote {\n  padding-inline-start: 0.6rem;\n  margin-inline: 0;\n  color: var(--md-default-fg-color--light);\n  border-inline-start: 0.2rem solid var(--md-default-fg-color--lighter);\n}\n.md-typeset ul {\n  list-style-type: disc;\n}\n.md-typeset ul,\n.md-typeset ol {\n  margin-inline-start: 0.625em;\n  padding: 0;\n}\n.md-typeset ul:not([hidden]),\n.md-typeset ol:not([hidden]) {\n  display: flow-root;\n}\n.md-typeset ul ol,\n.md-typeset ol ol {\n  list-style-type: lower-alpha;\n}\n.md-typeset ul ol ol,\n.md-typeset ol ol ol {\n  list-style-type: lower-roman;\n}\n.md-typeset ul li,\n.md-typeset ol li {\n  margin-bottom: 0.5em;\n  margin-inline-start: 1.25em;\n}\n.md-typeset ul li p,\n.md-typeset ul li blockquote,\n.md-typeset ol li p,\n.md-typeset ol li blockquote {\n  margin: 0.5em 0;\n}\n.md-typeset ul li:last-child,\n.md-typeset ol li:last-child {\n  margin-bottom: 0;\n}\n.md-typeset ul li :is(ul, ol),\n.md-typeset ol li :is(ul, ol) {\n  margin-block: 0.5em;\n  margin-inline-start: 0.625em;\n}\n.md-typeset dd {\n  margin-block: 1em 1.5em;\n  margin-inline-start: 1.875em;\n}\n.md-typeset img,\n.md-typeset svg,\n.md-typeset video {\n  max-width: 100%;\n  height: auto;\n}\n.md-typeset img[align=left] {\n  margin: 1em;\n  margin-left: 0;\n}\n.md-typeset img[align=right] {\n  margin: 1em;\n  margin-right: 0;\n}\n.md-typeset img[align]:only-child {\n  margin-top: 0;\n}\n.md-typeset img[src$=\"#only-dark\"], .md-typeset img[src$=\"#gh-dark-mode-only\"] {\n  display: none;\n}\n.md-typeset figure {\n  display: flow-root;\n  width: fit-content;\n  max-width: 100%;\n  margin: 1em auto;\n  text-align: center;\n}\n.md-typeset figure img {\n  display: block;\n}\n.md-typeset figcaption {\n  max-width: 24rem;\n  margin: 1em auto;\n  font-style: italic;\n}\n.md-typeset iframe {\n  max-width: 100%;\n}\n.md-typeset table.data:not(.plain) {\n  display: block;\n  width: max-content;\n  max-width: 100%;\n  overflow: auto;\n  font-size: 0.64rem;\n  background-color: var(--md-default-bg-color);\n  border: 0.05rem solid var(--md-typeset-table-color);\n  border-radius: 0.1rem;\n  touch-action: auto;\n}\n@media print {\n  .md-typeset table.data:not(.plain) {\n    display: table;\n  }\n}\n.md-typeset table.data:not(.plain) + * {\n  margin-top: 1.5em;\n}\n.md-typeset table.data:not(.plain) :is(th, td) > *:first-child {\n  margin-top: 0;\n}\n.md-typeset table.data:not(.plain) :is(th, td) > *:last-child {\n  margin-bottom: 0;\n}\n.md-typeset table.data:not(.plain) :is(th, td):not([align], .align-center, .align-left, .align-right) {\n  text-align: left;\n}\n[dir=rtl] .md-typeset table.data:not(.plain) :is(th, td):not([align], .align-center, .align-left, .align-right) {\n  text-align: right;\n}\n.md-typeset table.data:not(.plain) th {\n  min-width: 5rem;\n  padding: 0.9375em 1.25em;\n  font-weight: 700;\n  vertical-align: top;\n}\n.md-typeset table.data:not(.plain) td {\n  padding: 0.9375em 1.25em;\n  vertical-align: top;\n  border-top: 0.05rem solid var(--md-typeset-table-color);\n}\n.md-typeset table.data:not(.plain) tbody tr {\n  transition: background-color 125ms;\n}\n.md-typeset table.data:not(.plain) tbody tr:hover {\n  background-color: rgba(0, 0, 0, 0.035);\n  box-shadow: 0 0.05rem 0 var(--md-default-bg-color) inset;\n}\n.md-typeset table.data:not(.plain) a {\n  word-break: normal;\n}\n.md-typeset table th[role=columnheader] {\n  cursor: pointer;\n}\n.md-typeset table th[role=columnheader]::after {\n  display: inline-block;\n  width: 1.2em;\n  height: 1.2em;\n  margin-inline-start: 0.5em;\n  vertical-align: text-bottom;\n  mask-image: var(--md-typeset-table-sort-icon);\n  mask-repeat: no-repeat;\n  mask-size: contain;\n  transition: background-color 125ms;\n  content: \"\";\n}\n.md-typeset table th[role=columnheader]:hover::after {\n  background-color: var(--md-default-fg-color--lighter);\n}\n.md-typeset table th[role=columnheader][aria-sort=ascending]::after {\n  background-color: var(--md-default-fg-color--light);\n  mask-image: var(--md-typeset-table-sort-icon--asc);\n}\n.md-typeset table th[role=columnheader][aria-sort=descending]::after {\n  background-color: var(--md-default-fg-color--light);\n  mask-image: var(--md-typeset-table-sort-icon--desc);\n}\n.md-typeset__scrollwrap {\n  margin: 1em -0.8rem;\n  overflow-x: auto;\n  touch-action: auto;\n}\n.md-typeset__table {\n  display: inline-block;\n  margin-bottom: 0.5em;\n  padding: 0 0.8rem;\n}\n@media print {\n  .md-typeset__table {\n    display: block;\n  }\n}\nhtml .md-typeset__table table {\n  display: table;\n  width: 100%;\n  margin: 0;\n  overflow: hidden;\n}\n\n@media screen and (max-width: 44.9375em) {\n  .md-content__inner > pre {\n    margin: 1em -0.8rem;\n  }\n  .md-content__inner > pre code {\n    border-radius: 0;\n  }\n}\n.md-banner {\n  overflow: auto;\n  color: var(--md-footer-fg-color);\n  background-color: var(--md-footer-bg-color);\n}\n@media print {\n  .md-banner {\n    display: none;\n  }\n}\n.md-banner--warning {\n  color: var(--md-default-fg-color);\n  background: var(--md-typeset-mark-color);\n}\n.md-banner__inner {\n  margin: 0.6rem auto;\n  padding: 0 0.8rem;\n  font-size: 0.7rem;\n}\n.md-banner__button {\n  float: inline-end;\n  color: inherit;\n  cursor: pointer;\n  transition: opacity 250ms;\n}\n.md-banner__button:hover {\n  opacity: 0.7;\n}\n\nhtml {\n  height: 100%;\n  overflow-x: hidden;\n  font-size: 125%;\n}\n@media screen and (min-width: 100em) {\n  html {\n    font-size: 137.5%;\n  }\n}\n@media screen and (min-width: 125em) {\n  html {\n    font-size: 150%;\n  }\n}\n\nbody {\n  position: relative;\n  display: flex;\n  flex-direction: column;\n  width: 100%;\n  min-height: 100%;\n  font-size: 0.5rem;\n  background-color: var(--md-default-bg-color);\n}\n@media print {\n  body {\n    display: block;\n  }\n}\n@media screen and (max-width: 59.9375em) {\n  body[data-md-scrolllock] {\n    position: fixed;\n  }\n}\n\n.md-grid {\n  max-width: 61rem;\n  margin-inline: auto;\n}\n\n.md-container {\n  display: flex;\n  flex-direction: column;\n  flex-grow: 1;\n}\n@media print {\n  .md-container {\n    display: block;\n  }\n}\n\n.md-main {\n  flex-grow: 1;\n}\n.md-main__inner {\n  display: flex;\n  height: 100%;\n  margin-top: 1.5rem;\n}\n\n.md-ellipsis {\n  overflow: hidden;\n  white-space: nowrap;\n  text-overflow: ellipsis;\n}\n\n.md-toggle {\n  display: none;\n}\n\n.md-option {\n  position: absolute;\n  width: 0;\n  height: 0;\n  opacity: 0;\n}\n.md-option:checked + label:not([hidden]) {\n  display: block;\n}\n.md-option.focus-visible + label {\n  outline-style: auto;\n  outline-color: var(--md-accent-fg-color);\n}\n\n.md-skip {\n  position: fixed;\n  z-index: -1;\n  margin: 0.5rem;\n  padding: 0.3rem 0.5rem;\n  color: var(--md-default-bg-color);\n  font-size: 0.64rem;\n  background-color: var(--md-default-fg-color);\n  border-radius: 0.1rem;\n  outline-color: var(--md-accent-fg-color);\n  transform: translateY(0.4rem);\n  opacity: 0;\n}\n.md-skip:focus {\n  z-index: 10;\n  transform: translateY(0);\n  opacity: 1;\n  transition: transform 250ms cubic-bezier(0.4, 0, 0.2, 1), opacity 175ms 75ms;\n}\n\n@page {\n  margin: 25mm;\n}\n:root {\n  --md-clipboard-icon: svg-load(\"material/content-copy.svg\");\n}\n\n.md-clipboard {\n  position: absolute;\n  top: 0.5em;\n  right: 0.5em;\n  z-index: 1;\n  width: 1.5em;\n  height: 1.5em;\n  color: var(--md-default-fg-color--lightest);\n  border-radius: 0.1rem;\n  outline-color: var(--md-accent-fg-color);\n  outline-offset: 0.1rem;\n  cursor: pointer;\n  transition: color 250ms;\n}\n@media print {\n  .md-clipboard {\n    display: none;\n  }\n}\n.md-clipboard:not(.focus-visible) {\n  outline: none;\n  -webkit-tap-highlight-color: transparent;\n}\n:hover > .md-clipboard {\n  color: var(--md-default-fg-color--light);\n}\n.md-clipboard:is(:focus, :hover) {\n  color: var(--md-accent-fg-color);\n}\n.md-clipboard::after {\n  display: block;\n  width: 1.125em;\n  height: 1.125em;\n  margin: 0 auto;\n  background-color: currentcolor;\n  mask-image: var(--md-clipboard-icon);\n  mask-position: center;\n  mask-repeat: no-repeat;\n  mask-size: contain;\n  content: \"\";\n}\n.md-clipboard--inline {\n  cursor: pointer;\n}\n.md-clipboard--inline code {\n  transition: color 250ms, background-color 250ms;\n}\n.md-clipboard--inline:is(:focus, :hover) code {\n  color: var(--md-accent-fg-color);\n  background-color: var(--md-accent-fg-color--transparent);\n}\n\n@keyframes consent {\n  0% {\n    transform: translateY(100%);\n    opacity: 0;\n  }\n  100% {\n    transform: translateY(0);\n    opacity: 1;\n  }\n}\n@keyframes overlay {\n  0% {\n    opacity: 0;\n  }\n  100% {\n    opacity: 1;\n  }\n}\n.md-consent__overlay {\n  position: fixed;\n  top: 0;\n  z-index: 5;\n  width: 100%;\n  height: 100%;\n  background-color: hsla(0deg, 0%, 0%, 0.54);\n  opacity: 1;\n  backdrop-filter: blur(0.1rem);\n  animation: overlay 250ms both;\n}\n.md-consent__inner {\n  position: fixed;\n  bottom: 0;\n  z-index: 5;\n  width: 100%;\n  max-height: 100%;\n  padding: 0;\n  overflow: auto;\n  background-color: var(--md-default-bg-color);\n  border: 0;\n  border-radius: 0.1rem;\n  box-shadow: 0 0 0.2rem rgba(0, 0, 0, 0.1), 0 0.2rem 0.4rem rgba(0, 0, 0, 0.2);\n  animation: consent 500ms cubic-bezier(0.1, 0.7, 0.1, 1) both;\n}\n.md-consent__form {\n  padding: 0.8rem;\n}\n.md-consent__settings {\n  display: none;\n  margin: 1em 0;\n}\ninput:checked + .md-consent__settings {\n  display: block;\n}\n.md-consent__controls {\n  margin-bottom: 0.8rem;\n}\n.md-typeset .md-consent__controls .md-button {\n  display: inline;\n}\n@media screen and (max-width: 44.9375em) {\n  .md-typeset .md-consent__controls .md-button {\n    display: block;\n    width: 100%;\n    margin-top: 0.4rem;\n    text-align: center;\n  }\n}\n.md-consent label {\n  cursor: pointer;\n}\n\n.md-content {\n  flex-grow: 1;\n  min-width: 0;\n}\n.md-content__inner {\n  margin: 0 0.8rem 1.2rem;\n  padding-top: 0.6rem;\n}\n@media screen and (min-width: 76.25em) {\n  .md-sidebar--primary:not([hidden]) ~ .md-content > .md-content__inner {\n    margin-inline-start: 1.2rem;\n  }\n  .md-sidebar--secondary:not([hidden]) ~ .md-content > .md-content__inner {\n    margin-inline-end: 1.2rem;\n  }\n}\n.md-content__inner::before {\n  display: block;\n  height: 0.4rem;\n  content: \"\";\n}\n.md-content__inner > :last-child {\n  margin-bottom: 0;\n}\n.md-content__button {\n  float: inline-end;\n  margin: 0.4rem 0;\n  margin-inline-start: 0.4rem;\n  padding: 0;\n}\n@media print {\n  .md-content__button {\n    display: none;\n  }\n}\n.md-typeset .md-content__button {\n  color: var(--md-default-fg-color--lighter);\n}\n.md-content__button svg {\n  display: inline;\n  vertical-align: top;\n}\n[dir=rtl] .md-content__button svg {\n  transform: scaleX(-1);\n}\n\n.md-dialog {\n  position: fixed;\n  inset-inline-end: 0.8rem;\n  bottom: 0.8rem;\n  z-index: 4;\n  min-width: 11.1rem;\n  padding: 0.4rem 0.6rem;\n  background-color: var(--md-default-fg-color);\n  border-radius: 0.1rem;\n  box-shadow: var(--md-shadow-z3);\n  transform: translateY(100%);\n  opacity: 0;\n  transition: transform 0ms 400ms, opacity 400ms;\n  pointer-events: none;\n}\n@media print {\n  .md-dialog {\n    display: none;\n  }\n}\n.md-dialog--active {\n  transform: translateY(0);\n  opacity: 1;\n  transition: transform 400ms cubic-bezier(0.075, 0.85, 0.175, 1), opacity 400ms;\n  pointer-events: initial;\n}\n.md-dialog__inner {\n  color: var(--md-default-bg-color);\n  font-size: 0.7rem;\n}\n\n.md-feedback {\n  margin: 2em 0 1em;\n  text-align: center;\n}\n.md-feedback fieldset {\n  margin: 0;\n  padding: 0;\n  border: none;\n}\n.md-feedback__title {\n  margin: 1em auto;\n  font-weight: 700;\n}\n.md-feedback__inner {\n  position: relative;\n}\n.md-feedback__list {\n  position: relative;\n  display: flex;\n  flex-wrap: wrap;\n  align-content: baseline;\n  justify-content: center;\n}\n.md-feedback__list:hover .md-icon:not(:disabled) {\n  color: var(--md-default-fg-color--lighter);\n}\n:disabled .md-feedback__list {\n  min-height: 1.8rem;\n}\n.md-feedback__icon {\n  flex-shrink: 0;\n  margin: 0 0.1rem;\n  color: var(--md-default-fg-color--light);\n  cursor: pointer;\n  transition: color 125ms;\n}\n.md-feedback__icon:not(:disabled).md-icon:hover {\n  color: var(--md-accent-fg-color);\n}\n.md-feedback__icon:disabled {\n  color: var(--md-default-fg-color--lightest);\n  pointer-events: none;\n}\n.md-feedback__note {\n  position: relative;\n  transform: translateY(0.4rem);\n  opacity: 0;\n  transition: transform 400ms cubic-bezier(0.1, 0.7, 0.1, 1), opacity 150ms;\n}\n.md-feedback__note > * {\n  max-width: 16rem;\n  margin: 0 auto;\n}\n:disabled .md-feedback__note {\n  transform: translateY(0);\n  opacity: 1;\n}\n\n.md-footer {\n  color: var(--md-footer-fg-color);\n  background-color: var(--md-footer-bg-color);\n}\n@media print {\n  .md-footer {\n    display: none;\n  }\n}\n.md-footer__inner {\n  justify-content: space-between;\n  padding: 0.2rem;\n  overflow: auto;\n}\n.md-footer__inner:not([hidden]) {\n  display: flex;\n}\n.md-footer__link {\n  display: flex;\n  flex-grow: 0.01;\n  padding-top: 1.4rem;\n  padding-bottom: 0.4rem;\n  overflow: hidden;\n  outline-color: var(--md-accent-fg-color);\n  transition: opacity 250ms;\n}\n.md-footer__link:is(:focus, :hover) {\n  opacity: 0.7;\n}\n[dir=rtl] .md-footer__link svg {\n  transform: scaleX(-1);\n}\n@media screen and (max-width: 44.9375em) {\n  .md-footer__link--prev .md-footer__title {\n    display: none;\n  }\n}\n.md-footer__link--next {\n  margin-inline-start: auto;\n  text-align: right;\n}\n[dir=rtl] .md-footer__link--next {\n  text-align: left;\n}\n.md-footer__title {\n  position: relative;\n  flex-grow: 1;\n  max-width: calc(100% - 2.4rem);\n  padding: 0 1rem;\n  font-size: 0.9rem;\n  line-height: 2.4rem;\n  white-space: nowrap;\n}\n.md-footer__button {\n  margin: 0.2rem;\n  padding: 0.4rem;\n}\n.md-footer__direction {\n  position: absolute;\n  inset-inline: 0;\n  margin-top: -1rem;\n  padding: 0 1rem;\n  font-size: 0.64rem;\n  opacity: 0.7;\n}\n\n.md-footer-meta {\n  background-color: var(--md-footer-bg-color--dark);\n}\n.md-footer-meta__inner {\n  display: flex;\n  flex-wrap: wrap;\n  justify-content: space-between;\n  padding: 0.2rem;\n}\nhtml .md-footer-meta.md-typeset a {\n  color: var(--md-footer-fg-color--light);\n}\nhtml .md-footer-meta.md-typeset a:is(:focus, :hover) {\n  color: var(--md-footer-fg-color);\n}\n\n.md-copyright {\n  width: 100%;\n  margin: auto 0.6rem;\n  padding: 0.4rem 0;\n  color: var(--md-footer-fg-color--lighter);\n  font-size: 0.64rem;\n}\n@media screen and (min-width: 45em) {\n  .md-copyright {\n    width: auto;\n  }\n}\n.md-copyright__highlight {\n  color: var(--md-footer-fg-color--light);\n}\n\n.md-social {\n  margin: 0 0.4rem;\n  padding: 0.2rem 0 0.6rem;\n}\n@media screen and (min-width: 45em) {\n  .md-social {\n    padding: 0.6rem 0;\n  }\n}\n.md-social__link {\n  display: inline-block;\n  width: 1.6rem;\n  height: 1.6rem;\n  text-align: center;\n}\n.md-social__link::before {\n  line-height: 1.9;\n}\n.md-social__link svg {\n  max-height: 0.8rem;\n  vertical-align: -25%;\n  fill: currentcolor;\n}\n\n.md-typeset .md-button {\n  display: inline-block;\n  padding: 0.625em 2em;\n  color: var(--md-primary-fg-color);\n  font-weight: 700;\n  border: 0.1rem solid currentcolor;\n  border-radius: 0.1rem;\n  cursor: pointer;\n  transition: color 125ms, background-color 125ms, border-color 125ms;\n}\n.md-typeset .md-button--primary {\n  color: var(--md-primary-bg-color);\n  background-color: var(--md-primary-fg-color);\n  border-color: var(--md-primary-fg-color);\n}\n.md-typeset .md-button:is(:focus, :hover) {\n  color: var(--md-accent-bg-color);\n  background-color: var(--md-accent-fg-color);\n  border-color: var(--md-accent-fg-color);\n}\n.md-typeset .md-input {\n  height: 1.8rem;\n  padding: 0 0.6rem;\n  font-size: 0.8rem;\n  border-bottom: 0.1rem solid var(--md-default-fg-color--lighter);\n  border-start-start-radius: 0.1rem;\n  border-start-end-radius: 0.1rem;\n  box-shadow: var(--md-shadow-z1);\n  transition: border 250ms, box-shadow 250ms;\n}\n.md-typeset .md-input:is(:focus, :hover) {\n  border-bottom-color: var(--md-accent-fg-color);\n  box-shadow: var(--md-shadow-z2);\n}\n.md-typeset .md-input--stretch {\n  width: 100%;\n}\n\n.md-header {\n  position: sticky;\n  top: 0;\n  inset-inline: 0;\n  z-index: 4;\n  display: block;\n  color: var(--md-primary-bg-color);\n  background-color: var(--md-primary-fg-color);\n  box-shadow: 0 0 0.2rem rgba(0, 0, 0, 0), 0 0.2rem 0.4rem rgba(0, 0, 0, 0);\n}\n@media print {\n  .md-header {\n    display: none;\n  }\n}\n.md-header[hidden] {\n  transform: translateY(-100%);\n  transition: transform 250ms cubic-bezier(0.8, 0, 0.6, 1), box-shadow 250ms;\n}\n.md-header--shadow {\n  box-shadow: 0 0 0.2rem rgba(0, 0, 0, 0.1), 0 0.2rem 0.4rem rgba(0, 0, 0, 0.2);\n  transition: transform 250ms cubic-bezier(0.1, 0.7, 0.1, 1), box-shadow 250ms;\n}\n.md-header__inner {\n  display: flex;\n  align-items: center;\n  padding: 0 0.2rem;\n}\n.md-header__button {\n  position: relative;\n  z-index: 1;\n  margin: 0.2rem;\n  padding: 0.4rem;\n  color: currentcolor;\n  vertical-align: middle;\n  outline-color: var(--md-accent-fg-color);\n  cursor: pointer;\n  transition: opacity 250ms;\n}\n.md-header__button:hover {\n  opacity: 0.7;\n}\n.md-header__button:not([hidden]) {\n  display: inline-block;\n}\n.md-header__button:not(.focus-visible) {\n  outline: none;\n  -webkit-tap-highlight-color: transparent;\n}\n.md-header__button.md-logo {\n  margin: 0.2rem;\n  padding: 0.4rem;\n}\n@media screen and (max-width: 76.1875em) {\n  .md-header__button.md-logo {\n    display: none;\n  }\n}\n.md-header__button.md-logo :is(img, svg) {\n  display: block;\n  width: auto;\n  height: 1.2rem;\n  fill: currentcolor;\n}\n@media screen and (min-width: 60em) {\n  .md-header__button[for=__search] {\n    display: none;\n  }\n}\n.no-js .md-header__button[for=__search] {\n  display: none;\n}\n[dir=rtl] .md-header__button[for=__search] svg {\n  transform: scaleX(-1);\n}\n@media screen and (min-width: 76.25em) {\n  .md-header__button[for=__drawer] {\n    display: none;\n  }\n}\n.md-header__topic {\n  position: absolute;\n  display: flex;\n  max-width: 100%;\n  white-space: nowrap;\n  transition: transform 400ms cubic-bezier(0.1, 0.7, 0.1, 1), opacity 150ms;\n}\n.md-header__topic + .md-header__topic {\n  z-index: -1;\n  transform: translateX(1.25rem);\n  opacity: 0;\n  transition: transform 400ms cubic-bezier(1, 0.7, 0.1, 0.1), opacity 150ms;\n  pointer-events: none;\n}\n[dir=rtl] .md-header__topic + .md-header__topic {\n  transform: translateX(-1.25rem);\n}\n.md-header__topic:first-child {\n  font-weight: 700;\n}\n.md-header__title {\n  flex-grow: 1;\n  height: 2.4rem;\n  margin-inline-end: 0.4rem;\n  margin-inline-start: 1rem;\n  font-size: 0.9rem;\n  line-height: 2.4rem;\n}\n.md-header__title--active .md-header__topic {\n  z-index: -1;\n  transform: translateX(-1.25rem);\n  opacity: 0;\n  transition: transform 400ms cubic-bezier(1, 0.7, 0.1, 0.1), opacity 150ms;\n  pointer-events: none;\n}\n[dir=rtl] .md-header__title--active .md-header__topic {\n  transform: translateX(1.25rem);\n}\n.md-header__title--active .md-header__topic + .md-header__topic {\n  z-index: 0;\n  transform: translateX(0);\n  opacity: 1;\n  transition: transform 400ms cubic-bezier(0.1, 0.7, 0.1, 1), opacity 150ms;\n  pointer-events: initial;\n}\n.md-header__title > .md-header__ellipsis {\n  position: relative;\n  width: 100%;\n  height: 100%;\n}\n.md-header__option {\n  display: flex;\n  flex-shrink: 0;\n  max-width: 100%;\n  white-space: nowrap;\n  transition: max-width 0ms 250ms, opacity 250ms 250ms;\n}\n[data-md-toggle=search]:checked ~ .md-header .md-header__option {\n  max-width: 0;\n  opacity: 0;\n  transition: max-width 0ms, opacity 0ms;\n}\n.md-header__source {\n  display: none;\n}\n@media screen and (min-width: 60em) {\n  .md-header__source {\n    display: block;\n    width: 11.7rem;\n    max-width: 11.7rem;\n    margin-inline-start: 1rem;\n  }\n}\n@media screen and (min-width: 76.25em) {\n  .md-header__source {\n    margin-inline-start: 1.4rem;\n  }\n}\n\n.md-hero {\n  overflow: hidden;\n  color: var(--md-primary-bg-color);\n  font-size: 1rem;\n  background-color: var(--md-primary-fg-color);\n  transition: background 250ms;\n}\n.md-hero__inner {\n  margin-top: 1rem;\n  padding: 0.8rem 0.8rem 0.4rem;\n  transition: transform 400ms cubic-bezier(0.1, 0.7, 0.1, 1), opacity 250ms;\n  transition-delay: 100ms;\n}\n@media screen and (max-width: 76.1875em) {\n  .md-hero__inner {\n    margin-top: 2.4rem;\n    margin-bottom: 1.2rem;\n  }\n}\n[data-md-state=hidden] .md-hero__inner {\n  transform: translateY(0.625rem);\n  opacity: 0;\n  transition: transform 0ms 400ms, opacity 100ms 0ms;\n  pointer-events: none;\n}\n.md-hero--expand .md-hero__inner {\n  margin-bottom: 1.2rem;\n}\n\n:root {\n  --md-nav-icon--prev: svg-load(\"material/arrow-left.svg\");\n  --md-nav-icon--next: svg-load(\"material/chevron-right.svg\");\n  --md-toc-icon: svg-load(\"material/table-of-contents.svg\");\n}\n\n.md-nav {\n  font-size: 0.7rem;\n  line-height: 1.3;\n}\n.md-nav__title {\n  display: flex;\n  align-items: center;\n  padding: 0 0.6rem;\n  overflow: hidden;\n  font-weight: 700;\n  text-overflow: ellipsis;\n}\n.md-nav__title .md-nav__button {\n  display: none;\n}\n.md-nav__title .md-nav__button img {\n  width: auto;\n  height: 100%;\n}\n.md-nav__title .md-nav__button.md-logo :is(img, svg) {\n  display: block;\n  width: auto;\n  max-width: 100%;\n  height: 2.4rem;\n  object-fit: contain;\n  fill: currentcolor;\n}\n.md-nav__list {\n  margin: 0;\n  padding: 0;\n  list-style: none;\n}\n.md-nav__item {\n  padding: 0 0.6rem;\n}\n.md-nav__item .md-nav__item {\n  padding-inline-end: 0;\n}\n.md-nav__link {\n  display: flex;\n  align-items: center;\n  margin-top: 0.625em;\n  cursor: pointer;\n  transition: color 125ms;\n  scroll-snap-align: start;\n}\n.md-nav__link.md-nav__sticky {\n  box-shadow: 0 -0.625em var(--md-default-bg-color), 0 0.625em var(--md-default-bg-color);\n}\n.md-nav__link--passed {\n  color: var(--md-default-fg-color--light);\n}\n.md-nav__item .md-nav__link--active {\n  color: var(--md-typeset-a-color);\n}\n.md-nav__link--in-viewport {\n  position: relative;\n}\n.md-nav__link--in-viewport::before {\n  position: absolute;\n  top: 0;\n  right: calc(100% + 0.3rem);\n  bottom: 0;\n  width: 0.05rem;\n  height: 100%;\n  background-color: var(--md-primary-fg-color);\n  content: \"\";\n}\n.md-nav__item .md-nav__link--index [href] {\n  width: 100%;\n}\n.md-nav__link:is(:focus, :hover) {\n  color: var(--md-accent-fg-color);\n}\n.md-nav__link.focus-visible {\n  outline-color: var(--md-accent-fg-color);\n  outline-offset: 0.2rem;\n}\n.md-nav--primary .md-nav__link[for=__toc] {\n  display: none;\n}\n.md-nav--primary .md-nav__link[for=__toc] .md-icon::after {\n  display: block;\n  width: 100%;\n  height: 100%;\n  mask-image: var(--md-toc-icon);\n  background-color: currentcolor;\n}\n.md-nav--primary .md-nav__link[for=__toc] ~ .md-nav {\n  display: none;\n}\n.md-nav__link > * {\n  display: flex;\n  cursor: pointer;\n}\n.md-nav__sticky {\n  position: sticky;\n  top: var(--md-nav__header-height, 0);\n  z-index: var(--md-nav__sticky-zindex);\n  background-color: var(--md-default-bg-color);\n}\n.md-nav .md-ellipsis {\n  display: block;\n  flex-grow: 1;\n  white-space: normal;\n}\n.md-nav__icon {\n  flex-shrink: 0;\n}\n.md-nav__source {\n  display: none;\n}\n@media screen and (max-width: 76.1875em) {\n  .md-nav--primary, .md-nav--primary .md-nav {\n    position: absolute;\n    top: 0;\n    inset-inline: 0;\n    z-index: 1;\n    display: flex;\n    flex-direction: column;\n    height: 100%;\n    background-color: var(--md-default-bg-color);\n  }\n  .md-nav--primary .md-nav__sticky {\n    position: static;\n    z-index: auto;\n    background-color: transparent;\n    box-shadow: none;\n  }\n  .md-nav--primary :is(.md-nav__title, .md-nav__item) {\n    font-size: 0.8rem;\n    line-height: 1.5;\n  }\n  .md-nav--primary .md-nav__title {\n    position: relative;\n    min-height: 5.6rem;\n    padding: 3rem 0.8rem 0.2rem;\n    color: var(--md-default-fg-color--light);\n    line-height: 2.4rem;\n    white-space: nowrap;\n    background-color: var(--md-default-fg-color--lightest);\n    cursor: pointer;\n  }\n  .md-nav--primary .md-nav__title .md-nav__icon {\n    position: absolute;\n    top: 0.4rem;\n    inset-inline-start: 0.4rem;\n    display: block;\n    width: 1.2rem;\n    height: 1.2rem;\n    margin: 0.2rem;\n  }\n  .md-nav--primary .md-nav__title .md-nav__icon::after {\n    display: block;\n    width: 100%;\n    height: 100%;\n    background-color: currentcolor;\n    mask-image: var(--md-nav-icon--prev);\n    mask-position: center;\n    mask-repeat: no-repeat;\n    mask-size: contain;\n    content: \"\";\n  }\n  .md-nav--primary .md-nav__title ~ .md-nav__list {\n    overflow-y: auto;\n    background-color: var(--md-default-bg-color);\n    box-shadow: 0 0.05rem 0 var(--md-default-fg-color--lightest) inset;\n    scroll-snap-type: y mandatory;\n    touch-action: pan-y;\n  }\n  .md-nav--primary .md-nav__title ~ .md-nav__list > :first-child {\n    border-top: 0;\n  }\n  .md-nav--primary .md-nav__title[for=__drawer] {\n    color: var(--md-primary-bg-color);\n    font-weight: 700;\n    background-color: var(--md-primary-fg-color);\n  }\n  .md-nav--primary .md-nav__title .md-logo {\n    position: absolute;\n    top: 0.2rem;\n    inset-inline: 0.2rem;\n    display: block;\n    margin: 0.2rem;\n    padding: 0.4rem;\n  }\n  .md-nav--primary .md-nav__list {\n    flex: 1;\n  }\n  .md-nav--primary .md-nav__item {\n    padding: 0;\n    border-top: 0.05rem solid var(--md-default-fg-color--lightest);\n  }\n  .md-nav--primary .md-nav__item--active > .md-nav__link {\n    color: var(--md-typeset-a-color);\n  }\n  .md-nav--primary .md-nav__item--active > .md-nav__link:is(:focus, :hover) {\n    color: var(--md-accent-fg-color);\n  }\n  .md-nav--primary .md-nav__link {\n    margin-top: 0;\n    padding: 0.6rem 0.8rem;\n  }\n  .md-nav--primary .md-nav__link .md-nav__icon {\n    width: 1.2rem;\n    height: 1.2rem;\n    margin-inline-end: -0.2rem;\n    font-size: 1.2rem;\n  }\n  .md-nav--primary .md-nav__link .md-nav__icon::after {\n    display: block;\n    width: 100%;\n    height: 100%;\n    background-color: currentcolor;\n    mask-image: var(--md-nav-icon--next);\n    mask-position: center;\n    mask-repeat: no-repeat;\n    mask-size: contain;\n    content: \"\";\n  }\n  [dir=rtl] .md-nav--primary .md-nav__icon::after {\n    transform: scale(-1);\n  }\n  .md-nav--primary .md-nav--secondary .md-nav {\n    position: static;\n    background-color: transparent;\n  }\n  .md-nav--primary .md-nav--secondary .md-nav .md-nav__link {\n    padding-inline-start: 1.4rem;\n  }\n  .md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav__link {\n    padding-inline-start: 2rem;\n  }\n  .md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav .md-nav__link {\n    padding-inline-start: 2.6rem;\n  }\n  .md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav .md-nav .md-nav__link {\n    padding-inline-start: 3.2rem;\n  }\n  .md-nav--secondary {\n    background-color: transparent;\n  }\n  .md-nav__toggle ~ .md-nav {\n    display: flex;\n    transform: translateX(100%);\n    opacity: 0;\n    transition: transform 250ms cubic-bezier(0.8, 0, 0.6, 1), opacity 125ms 50ms;\n  }\n  [dir=rtl] .md-nav__toggle ~ .md-nav {\n    transform: translateX(-100%);\n  }\n  .md-nav__toggle:checked ~ .md-nav {\n    transform: translateX(0);\n    opacity: 1;\n    transition: transform 250ms cubic-bezier(0.4, 0, 0.2, 1), opacity 125ms 125ms;\n  }\n  .md-nav__toggle:checked ~ .md-nav > .md-nav__list {\n    backface-visibility: hidden;\n  }\n  .md-nav .md-nav__title .md-ellipsis {\n    white-space: nowrap;\n  }\n  .md-nav .md-nav__title .md-ellipsis wbr {\n    display: none;\n  }\n}\n@media screen and (max-width: 59.9375em) {\n  .md-nav__current-nested {\n    display: none;\n  }\n  .md-nav--primary .md-nav__link[for=__toc] {\n    display: flex;\n  }\n  .md-nav--primary .md-nav__link[for=__toc] .md-icon::after {\n    content: \"\";\n  }\n  .md-nav--primary .md-nav__link[for=__toc] + .md-nav__link {\n    display: none;\n  }\n  .md-nav--primary .md-nav__link[for=__toc] ~ .md-nav {\n    display: flex;\n  }\n  .md-nav__source {\n    display: block;\n    padding: 0 0.2rem;\n    color: var(--md-primary-bg-color);\n    background-color: var(--md-primary-fg-color--dark);\n  }\n}\n@media screen and (min-width: 60em) and (max-width: 76.1875em) {\n  .md-nav--integrated .md-nav__link[for=__toc] {\n    display: flex;\n  }\n  .md-nav--integrated .md-nav__link[for=__toc] .md-icon::after {\n    content: \"\";\n  }\n  .md-nav--integrated .md-nav__link[for=__toc] + .md-nav__link {\n    display: none;\n  }\n  .md-nav--integrated .md-nav__link[for=__toc] ~ .md-nav {\n    display: flex;\n  }\n}\n@media screen and (min-width: 60em) {\n  .md-nav__current-toc {\n    display: none;\n  }\n  .md-nav--secondary .md-nav__title {\n    position: sticky;\n    top: 0;\n    z-index: 1;\n    background: var(--md-default-bg-color);\n    box-shadow: 0 0 0.4rem 0.4rem var(--md-default-bg-color);\n  }\n  .md-nav--secondary .md-nav__title[for=__toc] {\n    scroll-snap-align: start;\n  }\n  .md-nav--secondary .md-nav__title .md-nav__icon {\n    display: none;\n  }\n}\n@media screen and (min-width: 76.25em) {\n  .md-nav {\n    transition: max-height 250ms cubic-bezier(0.86, 0, 0.07, 1);\n  }\n  .md-nav--primary .md-nav__title {\n    position: sticky;\n    top: 0;\n    z-index: 1;\n    background: var(--md-default-bg-color);\n    box-shadow: 0 0 0.4rem 0.4rem var(--md-default-bg-color);\n  }\n  .md-nav--primary .md-nav__title[for=__drawer] {\n    scroll-snap-align: start;\n  }\n  .md-nav--primary .md-nav__title .md-nav__icon {\n    display: none;\n  }\n  .md-nav__toggle ~ .md-nav {\n    display: none;\n  }\n  .md-nav__toggle:is(:checked, :indeterminate) ~ .md-nav {\n    display: block;\n  }\n  .md-nav__item--nested > .md-nav > .md-nav__title {\n    display: none;\n  }\n  .md-nav__item--section {\n    display: block;\n    margin: 1.25em 0;\n  }\n  .md-nav__item--section:last-child {\n    margin-bottom: 0;\n  }\n  .md-nav__item--section > .md-nav__link {\n    font-weight: 700;\n    pointer-events: none;\n  }\n  .md-nav__item--section > .md-nav__link--index [href] {\n    pointer-events: initial;\n  }\n  .md-nav__item--section > .md-nav__link .md-nav__icon {\n    display: none;\n  }\n  .md-nav__item--section > .md-nav {\n    display: block;\n  }\n  .md-nav__item--section > .md-nav > .md-nav__list > .md-nav__item {\n    padding: 0;\n  }\n  .md-nav__icon {\n    width: 0.9rem;\n    height: 0.9rem;\n    border-radius: 100%;\n    transition: background-color 250ms, transform 250ms;\n  }\n  [dir=rtl] .md-nav__icon {\n    transform: rotate(180deg);\n  }\n  .md-nav__icon:hover {\n    background-color: var(--md-accent-fg-color--transparent);\n  }\n  .md-nav__icon::after {\n    display: inline-block;\n    width: 100%;\n    height: 100%;\n    vertical-align: -0.1rem;\n    background-color: currentcolor;\n    mask-image: var(--md-nav-icon--next);\n    mask-position: center;\n    mask-repeat: no-repeat;\n    mask-size: contain;\n    content: \"\";\n  }\n  .md-nav__item--nested .md-nav__toggle:checked ~ .md-nav__link .md-nav__icon, .md-nav__item--nested .md-nav__toggle:indeterminate ~ .md-nav__link .md-nav__icon {\n    transform: rotate(90deg);\n  }\n  .md-nav--lifted > .md-nav__list > .md-nav__item--nested,\n.md-nav--lifted > .md-nav__title {\n    display: none;\n  }\n  .md-nav--lifted > .md-nav__list > .md-nav__item {\n    display: none;\n  }\n  .md-nav--lifted > .md-nav__list > .md-nav__item--active {\n    display: block;\n    padding: 0;\n  }\n  .md-nav--lifted > .md-nav__list > .md-nav__item--active > .md-nav__link {\n    position: sticky;\n    top: 0;\n    z-index: var(--md-nav__sticky-zindex, 1);\n    margin-top: 0;\n    padding: 0 0.6rem;\n    font-weight: 700;\n    background: var(--md-default-bg-color);\n    box-shadow: 0 0 0.4rem 0.4rem var(--md-default-bg-color);\n  }\n  .md-nav--lifted > .md-nav__list > .md-nav__item--active > .md-nav__link:not(.md-nav__link--index) {\n    pointer-events: none;\n  }\n  .md-nav--lifted > .md-nav__list > .md-nav__item--active > .md-nav__link .md-nav__icon {\n    display: none;\n  }\n  .md-nav--lifted .md-nav[data-md-level=\"1\"] {\n    display: block;\n  }\n  .md-nav--lifted .md-nav[data-md-level=\"1\"] > .md-nav__list > .md-nav__item {\n    padding-inline-end: 0.6rem;\n  }\n  .md-nav--integrated > .md-nav__list > .md-nav__item--active:not(.md-nav__item--nested) {\n    padding: 0 0.6rem;\n  }\n  .md-nav--integrated > .md-nav__list > .md-nav__item--active:not(.md-nav__item--nested) > .md-nav__link {\n    padding: 0;\n  }\n  .md-nav--integrated > .md-nav__list > .md-nav__item--active .md-nav--secondary {\n    display: block;\n    margin-bottom: 1.25em;\n    border-inline-start: 0.05rem solid var(--md-primary-fg-color);\n  }\n  .md-nav--integrated > .md-nav__list > .md-nav__item--active .md-nav--secondary > .md-nav__title {\n    display: none;\n  }\n}\n\n:root {\n  --md-search-result-icon: svg-load(\"material/file-search-outline.svg\");\n}\n\n.md-search {\n  position: relative;\n}\n@media screen and (min-width: 60em) {\n  .md-search {\n    padding: 0.2rem 0;\n  }\n}\n.no-js .md-search {\n  display: none;\n}\n.md-search__overlay {\n  z-index: 1;\n  opacity: 0;\n}\n@media screen and (max-width: 59.9375em) {\n  .md-search__overlay {\n    position: absolute;\n    top: -1rem;\n    inset-inline-start: -2.2rem;\n    width: 2rem;\n    height: 2rem;\n    overflow: hidden;\n    background-color: var(--md-default-bg-color);\n    border-radius: 1rem;\n    transform-origin: center;\n    transition: transform 300ms 100ms, opacity 200ms 200ms;\n    pointer-events: none;\n  }\n  [data-md-toggle=search]:checked ~ .md-header .md-search__overlay {\n    opacity: 1;\n    transition: transform 400ms, opacity 100ms;\n  }\n}\n@media screen and (min-width: 60em) {\n  .md-search__overlay {\n    position: fixed;\n    top: 0;\n    inset-inline-start: 0;\n    width: 0;\n    height: 0;\n    background-color: hsla(0deg, 0%, 0%, 0.54);\n    cursor: pointer;\n    transition: width 0ms 250ms, height 0ms 250ms, opacity 250ms;\n  }\n  [data-md-toggle=search]:checked ~ .md-header .md-search__overlay {\n    width: 100%;\n    height: 200vh;\n    opacity: 1;\n    transition: width 0ms, height 0ms, opacity 250ms;\n  }\n}\n@media screen and (max-width: 29.9375em) {\n  [data-md-toggle=search]:checked ~ .md-header .md-search__overlay {\n    transform: scale(45);\n  }\n}\n@media screen and (min-width: 30em) and (max-width: 44.9375em) {\n  [data-md-toggle=search]:checked ~ .md-header .md-search__overlay {\n    transform: scale(60);\n  }\n}\n@media screen and (min-width: 45em) and (max-width: 59.9375em) {\n  [data-md-toggle=search]:checked ~ .md-header .md-search__overlay {\n    transform: scale(75);\n  }\n}\n.md-search__inner {\n  backface-visibility: hidden;\n}\n@media screen and (max-width: 59.9375em) {\n  .md-search__inner {\n    position: fixed;\n    top: 0;\n    inset-inline-start: 0;\n    z-index: 2;\n    width: 0;\n    height: 0;\n    overflow: hidden;\n    transform: translateX(5%);\n    opacity: 0;\n    transition: width 0ms 300ms, height 0ms 300ms, transform 150ms 150ms cubic-bezier(0.4, 0, 0.2, 1), opacity 150ms 150ms;\n  }\n  [dir=rtl] .md-search__inner {\n    transform: translateX(-5%);\n  }\n  [data-md-toggle=search]:checked ~ .md-header .md-search__inner {\n    width: 100%;\n    height: 100%;\n    transform: translateX(0);\n    opacity: 1;\n    transition: width 0ms 0ms, height 0ms 0ms, transform 150ms 150ms cubic-bezier(0.1, 0.7, 0.1, 1), opacity 150ms 150ms;\n  }\n}\n@media screen and (min-width: 60em) {\n  .md-search__inner {\n    position: relative;\n    float: inline-end;\n    width: 11.7rem;\n    padding: 0.1rem 0;\n    transition: width 250ms cubic-bezier(0.1, 0.7, 0.1, 1);\n  }\n}\n@media screen and (min-width: 60em) and (max-width: 76.1875em) {\n  [data-md-toggle=search]:checked ~ .md-header .md-search__inner {\n    width: 23.4rem;\n  }\n}\n@media screen and (min-width: 76.25em) {\n  [data-md-toggle=search]:checked ~ .md-header .md-search__inner {\n    width: 34.4rem;\n  }\n}\n.md-search__form {\n  position: relative;\n  z-index: 2;\n  height: 2.4rem;\n  background-color: var(--md-default-bg-color);\n  box-shadow: 0 0 0.6rem transparent;\n  transition: color 250ms, background-color 250ms;\n}\n@media screen and (min-width: 60em) {\n  .md-search__form {\n    height: 1.8rem;\n    background-color: hsla(0deg, 0%, 0%, 0.26);\n    border-radius: 0.1rem;\n  }\n  .md-search__form:hover {\n    background-color: hsla(0deg, 0%, 100%, 0.12);\n  }\n}\n[data-md-toggle=search]:checked ~ .md-header .md-search__form {\n  color: var(--md-default-fg-color);\n  background-color: var(--md-default-bg-color);\n  border-radius: 0.1rem 0.1rem 0 0;\n  box-shadow: 0 0 0.6rem hsla(0deg, 0%, 0%, 0.07);\n}\n.md-search__input {\n  position: relative;\n  z-index: 2;\n  width: 100%;\n  height: 100%;\n  padding-inline: 3.6rem 2.2rem;\n  font-size: 0.9rem;\n  text-overflow: ellipsis;\n  background: transparent;\n}\n.md-search__input::placeholder {\n  transition: color 250ms;\n}\n.md-search__input ~ .md-search__icon, .md-search__input::placeholder {\n  color: var(--md-default-fg-color--light);\n}\n.md-search__input::-ms-clear {\n  display: none;\n}\n@media screen and (max-width: 59.9375em) {\n  .md-search__input {\n    width: 100%;\n    height: 2.4rem;\n    font-size: 0.9rem;\n  }\n}\n@media screen and (min-width: 60em) {\n  .md-search__input {\n    padding-inline-start: 2.2rem;\n    color: inherit;\n    font-size: 0.8rem;\n  }\n  .md-search__input::placeholder {\n    color: var(--md-primary-bg-color--light);\n  }\n  .md-search__input + .md-search__icon {\n    color: var(--md-primary-bg-color);\n  }\n  [data-md-toggle=search]:checked ~ .md-header .md-search__input {\n    text-overflow: clip;\n  }\n  [data-md-toggle=search]:checked ~ .md-header .md-search__input + .md-search__icon, [data-md-toggle=search]:checked ~ .md-header .md-search__input::placeholder {\n    color: var(--md-default-fg-color--light);\n  }\n}\n.md-search__icon {\n  display: inline-block;\n  width: 1.2rem;\n  height: 1.2rem;\n  cursor: pointer;\n  transition: color 250ms, opacity 250ms;\n}\n.md-search__icon:hover {\n  opacity: 0.7;\n}\n.md-search__icon[for=__search] {\n  position: absolute;\n  top: 0.3rem;\n  inset-inline-start: 0.5rem;\n  z-index: 2;\n}\n[dir=rtl] .md-search__icon[for=__search] svg {\n  transform: scaleX(-1);\n}\n@media screen and (max-width: 59.9375em) {\n  .md-search__icon[for=__search] {\n    top: 0.6rem;\n    inset-inline-start: 0.8rem;\n  }\n  .md-search__icon[for=__search] svg:first-child {\n    display: none;\n  }\n}\n@media screen and (min-width: 60em) {\n  .md-search__icon[for=__search] {\n    pointer-events: none;\n  }\n  .md-search__icon[for=__search] svg:last-child {\n    display: none;\n  }\n}\n.md-search__options {\n  position: absolute;\n  top: 0.3rem;\n  inset-inline-end: 0.5rem;\n  z-index: 2;\n  pointer-events: none;\n}\n@media screen and (max-width: 59.9375em) {\n  .md-search__options {\n    top: 0.6rem;\n    inset-inline-end: 0.8rem;\n  }\n}\n.md-search__options > * {\n  margin-inline-start: 0.2rem;\n  color: var(--md-default-fg-color--light);\n  transform: scale(0.75);\n  opacity: 0;\n  transition: transform 150ms cubic-bezier(0.1, 0.7, 0.1, 1), opacity 150ms;\n}\n.md-search__options > *:not(.focus-visible) {\n  outline: none;\n  -webkit-tap-highlight-color: transparent;\n}\n[data-md-toggle=search]:checked ~ .md-header .md-search__input:valid ~ .md-search__options > * {\n  transform: scale(1);\n  opacity: 1;\n  pointer-events: initial;\n}\n[data-md-toggle=search]:checked ~ .md-header .md-search__input:valid ~ .md-search__options > *:hover {\n  opacity: 0.7;\n}\n.md-search__suggest {\n  position: absolute;\n  top: 0;\n  display: flex;\n  align-items: center;\n  width: 100%;\n  height: 100%;\n  padding-inline: 3.6rem 2.2rem;\n  color: var(--md-default-fg-color--lighter);\n  font-size: 0.9rem;\n  white-space: nowrap;\n  opacity: 0;\n  transition: opacity 50ms;\n}\n@media screen and (min-width: 60em) {\n  .md-search__suggest {\n    padding-inline-start: 2.2rem;\n    font-size: 0.8rem;\n  }\n}\n[data-md-toggle=search]:checked ~ .md-header .md-search__suggest {\n  opacity: 1;\n  transition: opacity 300ms 100ms;\n}\n.md-search__output {\n  position: absolute;\n  z-index: 1;\n  width: 100%;\n  overflow: hidden;\n  border-end-start-radius: 0.1rem;\n  border-end-end-radius: 0.1rem;\n}\n@media screen and (max-width: 59.9375em) {\n  .md-search__output {\n    top: 2.4rem;\n    bottom: 0;\n  }\n}\n@media screen and (min-width: 60em) {\n  .md-search__output {\n    top: 1.9rem;\n    opacity: 0;\n    transition: opacity 400ms;\n  }\n  [data-md-toggle=search]:checked ~ .md-header .md-search__output {\n    box-shadow: var(--md-shadow-z3);\n    opacity: 1;\n  }\n}\n.md-search__scrollwrap {\n  height: 100%;\n  overflow-y: auto;\n  background-color: var(--md-default-bg-color);\n  backface-visibility: hidden;\n  touch-action: pan-y;\n}\n@media (max-resolution: 1dppx) {\n  .md-search__scrollwrap {\n    transform: translateZ(0);\n  }\n}\n@media screen and (min-width: 60em) and (max-width: 76.1875em) {\n  .md-search__scrollwrap {\n    width: 23.4rem;\n  }\n}\n@media screen and (min-width: 76.25em) {\n  .md-search__scrollwrap {\n    width: 34.4rem;\n  }\n}\n@media screen and (min-width: 60em) {\n  .md-search__scrollwrap {\n    max-height: 0;\n    scrollbar-width: thin;\n    scrollbar-color: var(--md-default-fg-color--lighter) transparent;\n  }\n  [data-md-toggle=search]:checked ~ .md-header .md-search__scrollwrap {\n    max-height: 75vh;\n  }\n  .md-search__scrollwrap:hover {\n    scrollbar-color: var(--md-accent-fg-color) transparent;\n  }\n  .md-search__scrollwrap::-webkit-scrollbar {\n    width: 0.2rem;\n    height: 0.2rem;\n  }\n  .md-search__scrollwrap::-webkit-scrollbar-thumb {\n    background-color: var(--md-default-fg-color--lighter);\n  }\n  .md-search__scrollwrap::-webkit-scrollbar-thumb:hover {\n    background-color: var(--md-accent-fg-color);\n  }\n}\n\n.md-search-result {\n  color: var(--md-default-fg-color);\n  word-break: break-word;\n}\n.md-search-result__meta {\n  padding: 0 0.8rem;\n  color: var(--md-default-fg-color--light);\n  font-size: 0.64rem;\n  line-height: 1.8rem;\n  background-color: var(--md-default-fg-color--lightest);\n  scroll-snap-align: start;\n}\n@media screen and (min-width: 60em) {\n  .md-search-result__meta {\n    padding-inline-start: 2.2rem;\n  }\n}\n.md-search-result__list {\n  margin: 0;\n  padding: 0;\n  list-style: none;\n  user-select: none;\n}\n.md-search-result__item {\n  box-shadow: 0 -0.05rem var(--md-default-fg-color--lightest);\n}\n.md-search-result__item:first-child {\n  box-shadow: none;\n}\n.md-search-result__link {\n  display: block;\n  outline: none;\n  transition: background-color 250ms;\n  scroll-snap-align: start;\n}\n.md-search-result__link:is(:focus, :hover) {\n  background-color: var(--md-accent-fg-color--transparent);\n}\n.md-search-result__link:last-child p:last-child {\n  margin-bottom: 0.6rem;\n}\n.md-search-result__more summary {\n  display: block;\n  padding: 0.75em 0.8rem;\n  color: var(--md-typeset-a-color);\n  font-size: 0.64rem;\n  outline: none;\n  cursor: pointer;\n  transition: color 250ms, background-color 250ms;\n  scroll-snap-align: start;\n}\n@media screen and (min-width: 60em) {\n  .md-search-result__more summary {\n    padding-inline-start: 2.2rem;\n  }\n}\n.md-search-result__more summary:is(:focus, :hover) {\n  color: var(--md-accent-fg-color);\n  background-color: var(--md-accent-fg-color--transparent);\n}\n.md-search-result__more summary::marker {\n  display: none;\n}\n.md-search-result__more summary::-webkit-details-marker {\n  display: none;\n}\n.md-search-result__more summary ~ * > * {\n  opacity: 0.65;\n}\n.md-search-result__article {\n  position: relative;\n  padding: 0 0.8rem;\n  overflow: hidden;\n}\n@media screen and (min-width: 60em) {\n  .md-search-result__article {\n    padding-inline-start: 2.2rem;\n  }\n}\n.md-search-result__article--document .md-search-result__title {\n  margin: 0.55rem 0;\n  font-weight: 400;\n  font-size: 0.8rem;\n  line-height: 1.4;\n}\n.md-search-result__icon {\n  position: absolute;\n  inset-inline-start: 0;\n  width: 1.2rem;\n  height: 1.2rem;\n  margin: 0.5rem;\n  color: var(--md-default-fg-color--light);\n}\n@media screen and (max-width: 59.9375em) {\n  .md-search-result__icon {\n    display: none;\n  }\n}\n.md-search-result__icon::after {\n  display: inline-block;\n  width: 100%;\n  height: 100%;\n  background-color: currentcolor;\n  mask-image: var(--md-search-result-icon);\n  mask-position: center;\n  mask-repeat: no-repeat;\n  mask-size: contain;\n  content: \"\";\n}\n[dir=rtl] .md-search-result__icon::after {\n  transform: scaleX(-1);\n}\n.md-search-result__title {\n  margin: 0.5em 0;\n  font-weight: 700;\n  font-size: 0.64rem;\n  line-height: 1.6;\n}\n.md-search-result__teaser {\n  display: -webkit-box;\n  max-height: 2rem;\n  margin: 0.5em 0;\n  overflow: hidden;\n  color: var(--md-default-fg-color--light);\n  font-size: 0.64rem;\n  line-height: 1.6;\n  text-overflow: ellipsis;\n  -webkit-box-orient: vertical;\n  -webkit-line-clamp: 2;\n}\n@media screen and (max-width: 44.9375em) {\n  .md-search-result__teaser {\n    max-height: 3rem;\n    -webkit-line-clamp: 3;\n  }\n}\n@media screen and (min-width: 60em) and (max-width: 76.1875em) {\n  .md-search-result__teaser {\n    max-height: 3rem;\n    -webkit-line-clamp: 3;\n  }\n}\n.md-search-result__teaser mark {\n  text-decoration: underline;\n  background-color: transparent;\n}\n.md-search-result__terms {\n  margin: 0.5em 0;\n  font-size: 0.64rem;\n  font-style: italic;\n}\n.md-search-result mark {\n  color: var(--md-accent-fg-color);\n  background-color: transparent;\n}\n\n.md-select {\n  position: relative;\n  z-index: 1;\n}\n.md-select__inner {\n  position: absolute;\n  top: calc(100% - 0.2rem);\n  left: 50%;\n  max-height: 0;\n  margin-top: 0.2rem;\n  color: var(--md-default-fg-color);\n  background-color: var(--md-default-bg-color);\n  border-radius: 0.1rem;\n  box-shadow: var(--md-shadow-z2);\n  transform: translate3d(-50%, 0.3rem, 0);\n  opacity: 0;\n  transition: transform 250ms 375ms, opacity 250ms 250ms, max-height 0ms 500ms;\n}\n.md-select:is(:focus-within, :hover) .md-select__inner {\n  max-height: 10rem;\n  transform: translate3d(-50%, 0, 0);\n  opacity: 1;\n  transition: transform 250ms cubic-bezier(0.1, 0.7, 0.1, 1), opacity 250ms, max-height 0ms;\n}\n.md-select__inner::after {\n  position: absolute;\n  top: 0;\n  left: 50%;\n  width: 0;\n  height: 0;\n  margin-top: -0.2rem;\n  margin-left: -0.2rem;\n  border: 0.2rem solid transparent;\n  border-top: 0;\n  border-bottom-color: var(--md-default-bg-color);\n  content: \"\";\n}\n.md-select__list {\n  max-height: inherit;\n  margin: 0;\n  padding: 0;\n  overflow: auto;\n  font-size: 0.8rem;\n  list-style-type: none;\n  border-radius: 0.1rem;\n}\n.md-select__item {\n  line-height: 1.8rem;\n}\n.md-select__link {\n  display: block;\n  width: 100%;\n  padding-inline: 0.6rem 1.2rem;\n  outline: none;\n  cursor: pointer;\n  transition: background-color 250ms, color 250ms;\n  scroll-snap-align: start;\n}\n.md-select__link:is(:focus, :hover) {\n  color: var(--md-accent-fg-color);\n}\n.md-select__link:focus {\n  background-color: var(--md-default-fg-color--lightest);\n}\n\n.md-sidebar {\n  position: sticky;\n  top: 2.4rem;\n  flex-shrink: 0;\n  align-self: flex-start;\n  width: 12.1rem;\n  padding: 1.2rem 0;\n}\n@media print {\n  .md-sidebar {\n    display: none;\n  }\n}\n@media screen and (max-width: 76.1875em) {\n  .md-sidebar--primary {\n    position: fixed;\n    top: 0;\n    inset-inline-start: -12.1rem;\n    z-index: 5;\n    display: block;\n    width: 12.1rem;\n    height: 100%;\n    background-color: var(--md-default-bg-color);\n    transform: translateX(0);\n    transition: transform 250ms cubic-bezier(0.4, 0, 0.2, 1), box-shadow 250ms;\n  }\n  [data-md-toggle=drawer]:checked ~ .md-container .md-sidebar--primary {\n    box-shadow: var(--md-shadow-z3);\n    transform: translateX(12.1rem);\n  }\n  [dir=rtl] [data-md-toggle=drawer]:checked ~ .md-container .md-sidebar--primary {\n    transform: translateX(-12.1rem);\n  }\n  .md-sidebar--primary .md-sidebar__scrollwrap {\n    position: absolute;\n    inset: 0;\n    margin: 0;\n    scroll-snap-type: none;\n    overflow: hidden;\n  }\n}\n@media screen and (min-width: 76.25em) {\n  .md-sidebar {\n    height: 0;\n  }\n  .no-js .md-sidebar {\n    height: auto;\n  }\n  .md-header--lifted ~ .md-container .md-sidebar {\n    top: 4.8rem;\n  }\n}\n.md-sidebar--secondary {\n  display: none;\n  order: 2;\n}\n@media screen and (min-width: 60em) {\n  .md-sidebar--secondary {\n    height: 0;\n  }\n  .no-js .md-sidebar--secondary {\n    height: auto;\n  }\n  .md-sidebar--secondary:not([hidden]) {\n    display: block;\n  }\n  .md-sidebar--secondary .md-sidebar__scrollwrap {\n    touch-action: pan-y;\n  }\n}\n.md-sidebar__scrollwrap {\n  margin: 0 0.2rem;\n  overflow-y: auto;\n  backface-visibility: hidden;\n  scrollbar-width: thin;\n  scrollbar-gutter: stable;\n  scrollbar-color: var(--md-default-fg-color--lighter) transparent;\n}\n.md-sidebar__scrollwrap:hover {\n  scrollbar-color: var(--md-accent-fg-color) transparent;\n}\n.md-sidebar__scrollwrap::-webkit-scrollbar {\n  width: 0.2rem;\n  height: 0.2rem;\n}\n.md-sidebar__scrollwrap::-webkit-scrollbar-thumb {\n  background-color: var(--md-default-fg-color--lighter);\n}\n.md-sidebar__scrollwrap::-webkit-scrollbar-thumb:hover {\n  background-color: var(--md-accent-fg-color);\n}\n@supports selector(::-webkit-scrollbar) {\n  .md-sidebar__scrollwrap {\n    scrollbar-gutter: auto;\n  }\n  .md-sidebar__inner {\n    padding-inline-end: calc(100% - 11.5rem);\n  }\n}\n\n@media screen and (max-width: 76.1875em) {\n  .md-overlay {\n    position: fixed;\n    top: 0;\n    z-index: 5;\n    width: 0;\n    height: 0;\n    background-color: hsla(0deg, 0%, 0%, 0.54);\n    opacity: 0;\n    transition: width 0ms 250ms, height 0ms 250ms, opacity 250ms;\n  }\n  [data-md-toggle=drawer]:checked ~ .md-overlay {\n    width: 100%;\n    height: 100%;\n    opacity: 1;\n    transition: width 0ms, height 0ms, opacity 250ms;\n  }\n}\n@keyframes facts {\n  0% {\n    height: 0;\n  }\n  100% {\n    height: 0.65rem;\n  }\n}\n@keyframes fact {\n  0% {\n    transform: translateY(100%);\n    opacity: 0;\n  }\n  50% {\n    opacity: 0;\n  }\n  100% {\n    transform: translateY(0%);\n    opacity: 1;\n  }\n}\n:root {\n  --md-source-forks-icon: svg-load(\"octicons/repo-forked-16.svg\");\n  --md-source-repositories-icon: svg-load(\"octicons/repo-16.svg\");\n  --md-source-stars-icon: svg-load(\"octicons/star-16.svg\");\n  --md-source-version-icon: svg-load(\"octicons/tag-16.svg\");\n}\n\n.md-source {\n  display: block;\n  font-size: 0.65rem;\n  line-height: 1.2;\n  white-space: nowrap;\n  outline-color: var(--md-accent-fg-color);\n  backface-visibility: hidden;\n  transition: opacity 250ms;\n}\n.md-source:hover {\n  opacity: 0.7;\n}\n.md-source__icon {\n  display: inline-block;\n  width: 2rem;\n  height: 2.4rem;\n  vertical-align: middle;\n}\n.md-source__icon svg {\n  margin-top: 0.6rem;\n  margin-inline-start: 0.6rem;\n}\n.md-source__icon + .md-source__repository {\n  margin-inline-start: -2rem;\n  padding-inline-start: 2rem;\n}\n.md-source__repository {\n  display: inline-block;\n  max-width: calc(100% - 1.2rem);\n  margin-inline-start: 0.6rem;\n  overflow: hidden;\n  text-overflow: ellipsis;\n  vertical-align: middle;\n}\n.md-source__facts {\n  display: flex;\n  gap: 0.4rem;\n  width: 100%;\n  margin: 0.1rem 0 0;\n  padding: 0;\n  overflow: hidden;\n  font-size: 0.55rem;\n  list-style-type: none;\n  opacity: 0.75;\n}\n.md-source__repository--active .md-source__facts {\n  animation: facts 250ms ease-in;\n}\n.md-source__fact {\n  overflow: hidden;\n  text-overflow: ellipsis;\n}\n.md-source__repository--active .md-source__fact {\n  animation: fact 400ms ease-out;\n}\n.md-source__fact::before {\n  display: inline-block;\n  width: 0.6rem;\n  height: 0.6rem;\n  margin-inline-end: 0.1rem;\n  vertical-align: text-top;\n  background-color: currentcolor;\n  mask-position: center;\n  mask-repeat: no-repeat;\n  mask-size: contain;\n  content: \"\";\n}\n.md-source__fact:nth-child(1n+2) {\n  flex-shrink: 0;\n}\n.md-source__fact--version::before {\n  mask-image: var(--md-source-version-icon);\n}\n.md-source__fact--stars::before {\n  mask-image: var(--md-source-stars-icon);\n}\n.md-source__fact--forks::before {\n  mask-image: var(--md-source-forks-icon);\n}\n.md-source__fact--repositories::before {\n  mask-image: var(--md-source-repositories-icon);\n}\n\n.md-tabs {\n  z-index: 3;\n  display: block;\n  width: 100%;\n  overflow: auto;\n  color: var(--md-primary-bg-color);\n  line-height: 1.3;\n  background-color: var(--md-primary-fg-color);\n}\n@media print {\n  .md-tabs {\n    display: none;\n  }\n}\n@media screen and (max-width: 76.1875em) {\n  .md-tabs {\n    display: none;\n  }\n}\n.md-tabs[hidden] {\n  pointer-events: none;\n}\n.md-tabs__list {\n  margin: 0;\n  margin-inline-start: 0.2rem;\n  padding: 0;\n  white-space: nowrap;\n  list-style: none;\n  contain: content;\n}\n.md-tabs__item {\n  display: inline-block;\n  height: 2.4rem;\n  padding-inline: 0.6rem;\n}\n.md-tabs__link {\n  display: block;\n  margin-top: 0.8rem;\n  font-size: 0.7rem;\n  outline-color: var(--md-accent-fg-color);\n  outline-offset: 0.2rem;\n  backface-visibility: hidden;\n  opacity: 0.7;\n  transition: transform 400ms cubic-bezier(0.1, 0.7, 0.1, 1), opacity 250ms;\n}\n.md-tabs__link--active, .md-tabs__link:is(:focus, :hover) {\n  color: inherit;\n  opacity: 1;\n}\n.md-tabs__item:nth-child(2) .md-tabs__link {\n  transition-delay: 20ms;\n}\n.md-tabs__item:nth-child(3) .md-tabs__link {\n  transition-delay: 40ms;\n}\n.md-tabs__item:nth-child(4) .md-tabs__link {\n  transition-delay: 60ms;\n}\n.md-tabs__item:nth-child(5) .md-tabs__link {\n  transition-delay: 80ms;\n}\n.md-tabs__item:nth-child(6) .md-tabs__link {\n  transition-delay: 100ms;\n}\n.md-tabs__item:nth-child(7) .md-tabs__link {\n  transition-delay: 120ms;\n}\n.md-tabs__item:nth-child(8) .md-tabs__link {\n  transition-delay: 140ms;\n}\n.md-tabs__item:nth-child(9) .md-tabs__link {\n  transition-delay: 160ms;\n}\n.md-tabs__item:nth-child(10) .md-tabs__link {\n  transition-delay: 180ms;\n}\n.md-tabs__item:nth-child(11) .md-tabs__link {\n  transition-delay: 200ms;\n}\n.md-tabs__item:nth-child(12) .md-tabs__link {\n  transition-delay: 220ms;\n}\n.md-tabs__item:nth-child(13) .md-tabs__link {\n  transition-delay: 240ms;\n}\n.md-tabs__item:nth-child(14) .md-tabs__link {\n  transition-delay: 260ms;\n}\n.md-tabs__item:nth-child(15) .md-tabs__link {\n  transition-delay: 280ms;\n}\n.md-tabs__item:nth-child(16) .md-tabs__link {\n  transition-delay: 300ms;\n}\n.md-tabs[hidden] .md-tabs__link {\n  transform: translateY(50%);\n  opacity: 0;\n  transition: transform 0ms 100ms, opacity 100ms;\n}\n\n:root {\n  --md-tag-icon: svg-load(\"material/pound.svg\");\n}\n\n.md-typeset .md-tags {\n  margin-top: -0.125em;\n  margin-bottom: 0.75em;\n}\n.md-typeset .md-tag {\n  display: inline-block;\n  margin-inline-end: 0.5em;\n  margin-bottom: 0.5em;\n  padding: 0.3125em 0.9375em;\n  font-weight: 700;\n  font-size: 0.64rem;\n  line-height: 1.6;\n  letter-spacing: initial;\n  vertical-align: middle;\n  background: var(--md-default-fg-color--lightest);\n  border-radius: 2.4rem;\n}\n.md-typeset .md-tag[href] {\n  color: inherit;\n  outline: none;\n  -webkit-tap-highlight-color: transparent;\n  transition: color 125ms, background-color 125ms;\n}\n.md-typeset .md-tag[href]:focus, .md-typeset .md-tag[href]:hover {\n  color: var(--md-accent-bg-color);\n  background-color: var(--md-accent-fg-color);\n}\n[id] > .md-typeset .md-tag {\n  vertical-align: text-top;\n}\n.md-typeset .md-tag-icon::before {\n  display: inline-block;\n  width: 1.2em;\n  height: 1.2em;\n  margin-right: 0.4em;\n  vertical-align: text-bottom;\n  background-color: var(--md-default-fg-color--lighter);\n  mask-image: var(--md-tag-icon);\n  mask-position: center;\n  mask-repeat: no-repeat;\n  mask-size: contain;\n  transition: background-color 125ms;\n  content: \"\";\n}\n.md-typeset .md-tag-icon:is(a:focus, a:hover)::before {\n  background-color: var(--md-accent-bg-color);\n}\n\n@keyframes pulse {\n  0% {\n    box-shadow: 0 0 0 0 var(--md-default-fg-color--lightest);\n    transform: scale(0.95);\n  }\n  75% {\n    box-shadow: 0 0 0 0.625em transparent;\n    transform: scale(1);\n  }\n  100% {\n    box-shadow: 0 0 0 0 transparent;\n    transform: scale(0.95);\n  }\n}\n:root {\n  --md-tooltip-width: 20rem;\n}\n\n.md-tooltip {\n  position: absolute;\n  top: var(--md-tooltip-y);\n  left: clamp(\n      var(--md-tooltip-0, 0rem) + 0.8rem,\n      var(--md-tooltip-x),\n      100vw +\n      var(--md-tooltip-0, 0rem) + 0.8rem -\n      var(--md-tooltip-width) -\n      2 * 0.8rem\n    );\n  z-index: 0;\n  width: var(--md-tooltip-width);\n  max-width: calc(100vw - 2 * 0.8rem);\n  color: var(--md-default-fg-color);\n  font-family: var(--md-text-font-family);\n  background-color: var(--md-default-bg-color);\n  border-radius: 0.1rem;\n  box-shadow: var(--md-shadow-z2);\n  transform: translateY(-0.4rem);\n  backface-visibility: hidden;\n  opacity: 0;\n  transition: transform 0ms 250ms, opacity 250ms, z-index 250ms;\n}\n.md-tooltip--active {\n  z-index: 2;\n  transform: translateY(0);\n  opacity: 1;\n  transition: transform 250ms cubic-bezier(0.1, 0.7, 0.1, 1), opacity 250ms, z-index 0ms;\n}\n:is(.focus-visible > .md-tooltip, .md-tooltip:target) {\n  outline: var(--md-accent-fg-color) auto;\n}\n.md-tooltip__inner {\n  padding: 0.8rem;\n  font-size: 0.64rem;\n}\n.md-tooltip__inner.md-typeset > :first-child {\n  margin-top: 0;\n}\n.md-tooltip__inner.md-typeset > :last-child {\n  margin-bottom: 0;\n}\n\n.md-annotation {\n  font-weight: 400;\n  white-space: normal;\n  outline: none;\n}\n[dir=rtl] .md-annotation {\n  direction: rtl;\n}\n.md-annotation:not([hidden]) {\n  display: inline-block;\n  line-height: 1.325;\n}\n.md-annotation__index {\n  position: relative;\n  z-index: 0;\n  margin: 0 1ch;\n  font-size: 0.85em;\n  font-family: var(--md-code-font-family);\n  outline: none;\n  cursor: pointer;\n  user-select: none;\n}\n.md-annotation .md-annotation__index {\n  color: hsl(0deg, 0%, 100%);\n  transition: z-index 250ms;\n}\n.md-annotation .md-annotation__index:is(:focus, :hover) {\n  color: hsl(0deg, 0%, 100%);\n}\n.md-annotation__index::after {\n  position: absolute;\n  top: 0;\n  left: -0.125em;\n  z-index: -1;\n  width: calc(100% + 1.2ch);\n  width: max(2.2ch, 100% + 1.2ch);\n  height: 2.2ch;\n  margin: 0 -0.4ch;\n  padding: 0 0.4ch;\n  background-color: var(--md-default-fg-color--lighter);\n  border-radius: 2ch;\n  transition: color 250ms, background-color 250ms;\n  content: \"\";\n}\n@media not all and (prefers-reduced-motion) {\n  [data-md-visible] > .md-annotation__index::after {\n    animation: pulse 2000ms infinite;\n  }\n}\n.md-tooltip--active + .md-annotation__index::after {\n  transition: color 250ms, background-color 250ms;\n  animation: none;\n}\ncode .md-annotation__index {\n  font-size: inherit;\n  font-family: var(--md-code-font-family);\n}\n:is(.md-tooltip--active + .md-annotation__index, :hover > .md-annotation__index) {\n  color: var(--md-accent-bg-color);\n}\n:is(.md-tooltip--active + .md-annotation__index, :hover > .md-annotation__index)::after {\n  background-color: var(--md-accent-fg-color);\n}\n.md-tooltip--active + .md-annotation__index {\n  z-index: 2;\n  transition: none;\n  animation: none;\n}\n.md-annotation__index [data-md-annotation-id] {\n  display: inline-block;\n  line-height: 90%;\n}\n.md-annotation__index [data-md-annotation-id]::before {\n  display: inline-block;\n  padding-bottom: 0.1em;\n  vertical-align: 0.065em;\n  transform: scale(1.15);\n  transition: transform 400ms cubic-bezier(0.1, 0.7, 0.1, 1);\n  content: attr(data-md-annotation-id);\n}\n@media not print {\n  .md-annotation__index [data-md-annotation-id]::before {\n    content: \"+\";\n  }\n  :focus-within > .md-annotation__index [data-md-annotation-id]::before {\n    transform: scale(1.25) rotate(45deg);\n  }\n}\n\n.md-top {\n  position: fixed;\n  top: 3.2rem;\n  z-index: 2;\n  display: block;\n  margin-inline-start: 50%;\n  padding: 0.4rem 0.8rem;\n  color: var(--md-default-fg-color--light);\n  font-size: 0.7rem;\n  background-color: var(--md-default-bg-color);\n  border-radius: 1.6rem;\n  outline: none;\n  box-shadow: var(--md-shadow-z2);\n  transform: translate(-50%, 0);\n  transition: color 125ms, background-color 125ms, transform 125ms cubic-bezier(0.4, 0, 0.2, 1), opacity 125ms;\n}\n@media print {\n  .md-top {\n    display: none;\n  }\n}\n[dir=rtl] .md-top {\n  transform: translate(50%, 0);\n}\n.md-top[hidden] {\n  transform: translate(-50%, 0.2rem);\n  opacity: 0;\n  transition-duration: 0ms;\n  pointer-events: none;\n}\n[dir=rtl] .md-top[hidden] {\n  transform: translate(50%, 0.2rem);\n}\n.md-top:is(:focus, :hover) {\n  color: var(--md-accent-bg-color);\n  background-color: var(--md-accent-fg-color);\n}\n.md-top svg {\n  display: inline-block;\n  vertical-align: -0.5em;\n}\n\n@keyframes hoverfix {\n  0% {\n    pointer-events: none;\n  }\n}\n:root {\n  --md-version-icon: svg-load(\"fontawesome/solid/caret-down.svg\");\n}\n\n.md-version {\n  flex-shrink: 0;\n  height: 2.4rem;\n  font-size: 0.8rem;\n}\n.md-version__current {\n  position: relative;\n  top: 0.05rem;\n  margin-inline: 1.4rem 0.4rem;\n  color: inherit;\n  outline: none;\n  cursor: pointer;\n}\n.md-version__current::after {\n  display: inline-block;\n  width: 0.4rem;\n  height: 0.6rem;\n  margin-inline-start: 0.4rem;\n  background-color: currentcolor;\n  mask-image: var(--md-version-icon);\n  mask-position: center;\n  mask-repeat: no-repeat;\n  mask-size: contain;\n  content: \"\";\n}\n.md-version__list {\n  position: absolute;\n  top: 0.15rem;\n  z-index: 3;\n  max-height: 0;\n  margin: 0.2rem 0.8rem;\n  padding: 0;\n  overflow: auto;\n  color: var(--md-default-fg-color);\n  list-style-type: none;\n  background-color: var(--md-default-bg-color);\n  border-radius: 0.1rem;\n  box-shadow: var(--md-shadow-z2);\n  opacity: 0;\n  transition: max-height 0ms 500ms, opacity 250ms 250ms;\n  scroll-snap-type: y mandatory;\n}\n.md-version:is(:focus-within, :hover) .md-version__list {\n  max-height: 10rem;\n  opacity: 1;\n  transition: max-height 0ms, opacity 250ms;\n}\n@media (pointer: coarse) {\n  .md-version:hover .md-version__list {\n    animation: hoverfix 250ms forwards;\n  }\n  .md-version:focus-within .md-version__list {\n    animation: none;\n  }\n}\n.md-version__item {\n  line-height: 1.8rem;\n}\n.md-version__link {\n  display: block;\n  width: 100%;\n  padding-inline: 0.6rem 1.2rem;\n  white-space: nowrap;\n  outline: none;\n  cursor: pointer;\n  transition: color 250ms, background-color 250ms;\n  scroll-snap-align: start;\n}\n.md-version__link:is(:focus, :hover) {\n  color: var(--md-accent-fg-color);\n}\n.md-version__link:focus {\n  background-color: var(--md-default-fg-color--lightest);\n}\n\n:root {\n  --md-admonition-icon--note:\n    svg-load(\"material/pencil-circle.svg\");\n  --md-admonition-icon--abstract:\n    svg-load(\"material/clipboard-text.svg\");\n  --md-admonition-icon--info:\n    svg-load(\"material/information.svg\");\n  --md-admonition-icon--tip:\n    svg-load(\"material/fire.svg\");\n  --md-admonition-icon--success:\n    svg-load(\"material/check.svg\");\n  --md-admonition-icon--question:\n    svg-load(\"material/help-circle.svg\");\n  --md-admonition-icon--warning:\n    svg-load(\"material/alert.svg\");\n  --md-admonition-icon--failure:\n    svg-load(\"material/close.svg\");\n  --md-admonition-icon--danger:\n    svg-load(\"material/lightning-bolt-circle.svg\");\n  --md-admonition-icon--bug:\n    svg-load(\"material/shield-bug.svg\");\n  --md-admonition-icon--example:\n    svg-load(\"material/test-tube.svg\");\n  --md-admonition-icon--quote:\n    svg-load(\"material/format-quote-close.svg\");\n}\n\n.md-typeset .admonition,\n.md-typeset details {\n  display: flow-root;\n  margin: 1.5625em 0;\n  padding: 0 0.6rem;\n  color: var(--md-admonition-fg-color);\n  font-size: 0.64rem;\n  page-break-inside: avoid;\n  background-color: var(--md-admonition-bg-color);\n  border: 0.05rem solid #448aff;\n  border-radius: 0.2rem;\n  box-shadow: var(--md-shadow-z1);\n}\n@media print {\n  .md-typeset .admonition,\n.md-typeset details {\n    box-shadow: none;\n  }\n}\n.md-typeset .admonition > *,\n.md-typeset details > * {\n  box-sizing: border-box;\n}\n.md-typeset .admonition :is(.admonition, details),\n.md-typeset details :is(.admonition, details) {\n  margin-top: 1em;\n  margin-bottom: 1em;\n}\n.md-typeset .admonition .md-typeset__scrollwrap,\n.md-typeset details .md-typeset__scrollwrap {\n  margin: 1em -0.6rem;\n}\n.md-typeset .admonition .md-typeset__table,\n.md-typeset details .md-typeset__table {\n  padding: 0 0.6rem;\n}\n.md-typeset .admonition > .tabbed-set:only-child,\n.md-typeset details > .tabbed-set:only-child {\n  margin-top: 0;\n}\nhtml .md-typeset .admonition > :last-child,\nhtml .md-typeset details > :last-child {\n  margin-bottom: 0.6rem;\n}\n.md-typeset .admonition-title,\n.md-typeset summary {\n  position: relative;\n  margin-block: 0;\n  margin-inline: -0.6rem;\n  padding-block: 0.4rem;\n  padding-inline: 2rem 0.6rem;\n  font-weight: 700;\n  background-color: rgba(68, 138, 255, 0.1);\n  border: none;\n  border-inline-start-width: 0.2rem;\n  border-start-start-radius: 0.1rem;\n  border-start-end-radius: 0.1rem;\n}\nhtml .md-typeset .admonition-title:last-child,\nhtml .md-typeset summary:last-child {\n  margin-bottom: 0;\n}\n.md-typeset .admonition-title::before,\n.md-typeset summary::before {\n  position: absolute;\n  top: 0.625em;\n  inset-inline-start: 0.6rem;\n  width: 1rem;\n  height: 1rem;\n  background-color: #448aff;\n  mask-image: var(--md-admonition-icon--note);\n  mask-position: center;\n  mask-repeat: no-repeat;\n  mask-size: contain;\n  content: \"\";\n}\n.md-typeset .admonition-title code,\n.md-typeset summary code {\n  box-shadow: 0 0 0 0.05rem var(--md-default-fg-color--lightest);\n}\n\n.md-typeset :is(.admonition, details):is(.note) {\n  border-color: #448aff;\n}\n\n.md-typeset :is(.note) > :is(.admonition-title, summary) {\n  background-color: rgba(68, 138, 255, 0.1);\n}\n.md-typeset :is(.note) > :is(.admonition-title, summary)::before {\n  background-color: #448aff;\n  mask-image: var(--md-admonition-icon--note);\n}\n.md-typeset :is(.note) > :is(.admonition-title, summary)::after {\n  color: #448aff;\n}\n\n.md-typeset :is(.admonition, details):is(.abstract, .summary, .tldr) {\n  border-color: #00b0ff;\n}\n\n.md-typeset :is(.abstract, .summary, .tldr) > :is(.admonition-title, summary) {\n  background-color: rgba(0, 176, 255, 0.1);\n}\n.md-typeset :is(.abstract, .summary, .tldr) > :is(.admonition-title, summary)::before {\n  background-color: #00b0ff;\n  mask-image: var(--md-admonition-icon--abstract);\n}\n.md-typeset :is(.abstract, .summary, .tldr) > :is(.admonition-title, summary)::after {\n  color: #00b0ff;\n}\n\n.md-typeset :is(.admonition, details):is(.info, .todo) {\n  border-color: #00b8d4;\n}\n\n.md-typeset :is(.info, .todo) > :is(.admonition-title, summary) {\n  background-color: rgba(0, 184, 212, 0.1);\n}\n.md-typeset :is(.info, .todo) > :is(.admonition-title, summary)::before {\n  background-color: #00b8d4;\n  mask-image: var(--md-admonition-icon--info);\n}\n.md-typeset :is(.info, .todo) > :is(.admonition-title, summary)::after {\n  color: #00b8d4;\n}\n\n.md-typeset :is(.admonition, details):is(.tip, .hint, .important) {\n  border-color: #00bfa5;\n}\n\n.md-typeset :is(.tip, .hint, .important) > :is(.admonition-title, summary) {\n  background-color: rgba(0, 191, 165, 0.1);\n}\n.md-typeset :is(.tip, .hint, .important) > :is(.admonition-title, summary)::before {\n  background-color: #00bfa5;\n  mask-image: var(--md-admonition-icon--tip);\n}\n.md-typeset :is(.tip, .hint, .important) > :is(.admonition-title, summary)::after {\n  color: #00bfa5;\n}\n\n.md-typeset :is(.admonition, details):is(.success, .check, .done) {\n  border-color: #00c853;\n}\n\n.md-typeset :is(.success, .check, .done) > :is(.admonition-title, summary) {\n  background-color: rgba(0, 200, 83, 0.1);\n}\n.md-typeset :is(.success, .check, .done) > :is(.admonition-title, summary)::before {\n  background-color: #00c853;\n  mask-image: var(--md-admonition-icon--success);\n}\n.md-typeset :is(.success, .check, .done) > :is(.admonition-title, summary)::after {\n  color: #00c853;\n}\n\n.md-typeset :is(.admonition, details):is(.question, .help, .faq) {\n  border-color: #64dd17;\n}\n\n.md-typeset :is(.question, .help, .faq) > :is(.admonition-title, summary) {\n  background-color: rgba(100, 221, 23, 0.1);\n}\n.md-typeset :is(.question, .help, .faq) > :is(.admonition-title, summary)::before {\n  background-color: #64dd17;\n  mask-image: var(--md-admonition-icon--question);\n}\n.md-typeset :is(.question, .help, .faq) > :is(.admonition-title, summary)::after {\n  color: #64dd17;\n}\n\n.md-typeset :is(.admonition, details):is(.warning, .caution, .attention) {\n  border-color: #ff9100;\n}\n\n.md-typeset :is(.warning, .caution, .attention) > :is(.admonition-title, summary) {\n  background-color: rgba(255, 145, 0, 0.1);\n}\n.md-typeset :is(.warning, .caution, .attention) > :is(.admonition-title, summary)::before {\n  background-color: #ff9100;\n  mask-image: var(--md-admonition-icon--warning);\n}\n.md-typeset :is(.warning, .caution, .attention) > :is(.admonition-title, summary)::after {\n  color: #ff9100;\n}\n\n.md-typeset :is(.admonition, details):is(.failure, .fail, .missing) {\n  border-color: #ff5252;\n}\n\n.md-typeset :is(.failure, .fail, .missing) > :is(.admonition-title, summary) {\n  background-color: rgba(255, 82, 82, 0.1);\n}\n.md-typeset :is(.failure, .fail, .missing) > :is(.admonition-title, summary)::before {\n  background-color: #ff5252;\n  mask-image: var(--md-admonition-icon--failure);\n}\n.md-typeset :is(.failure, .fail, .missing) > :is(.admonition-title, summary)::after {\n  color: #ff5252;\n}\n\n.md-typeset :is(.admonition, details):is(.danger, .error) {\n  border-color: #ff1744;\n}\n\n.md-typeset :is(.danger, .error) > :is(.admonition-title, summary) {\n  background-color: rgba(255, 23, 68, 0.1);\n}\n.md-typeset :is(.danger, .error) > :is(.admonition-title, summary)::before {\n  background-color: #ff1744;\n  mask-image: var(--md-admonition-icon--danger);\n}\n.md-typeset :is(.danger, .error) > :is(.admonition-title, summary)::after {\n  color: #ff1744;\n}\n\n.md-typeset :is(.admonition, details):is(.bug) {\n  border-color: #f50057;\n}\n\n.md-typeset :is(.bug) > :is(.admonition-title, summary) {\n  background-color: rgba(245, 0, 87, 0.1);\n}\n.md-typeset :is(.bug) > :is(.admonition-title, summary)::before {\n  background-color: #f50057;\n  mask-image: var(--md-admonition-icon--bug);\n}\n.md-typeset :is(.bug) > :is(.admonition-title, summary)::after {\n  color: #f50057;\n}\n\n.md-typeset :is(.admonition, details):is(.example) {\n  border-color: #7c4dff;\n}\n\n.md-typeset :is(.example) > :is(.admonition-title, summary) {\n  background-color: rgba(124, 77, 255, 0.1);\n}\n.md-typeset :is(.example) > :is(.admonition-title, summary)::before {\n  background-color: #7c4dff;\n  mask-image: var(--md-admonition-icon--example);\n}\n.md-typeset :is(.example) > :is(.admonition-title, summary)::after {\n  color: #7c4dff;\n}\n\n.md-typeset :is(.admonition, details):is(.quote, .cite) {\n  border-color: #9e9e9e;\n}\n\n.md-typeset :is(.quote, .cite) > :is(.admonition-title, summary) {\n  background-color: rgba(158, 158, 158, 0.1);\n}\n.md-typeset :is(.quote, .cite) > :is(.admonition-title, summary)::before {\n  background-color: #9e9e9e;\n  mask-image: var(--md-admonition-icon--quote);\n}\n.md-typeset :is(.quote, .cite) > :is(.admonition-title, summary)::after {\n  color: #9e9e9e;\n}\n\n:root {\n  --md-footnotes-icon: svg-load(\"material/keyboard-return.svg\");\n}\n\n.md-typeset .footnote {\n  color: var(--md-default-fg-color--light);\n  font-size: 0.64rem;\n}\n.md-typeset .footnote > ol {\n  margin-inline-start: 0;\n}\n.md-typeset .footnote > ol > li {\n  transition: color 125ms;\n}\n.md-typeset .footnote > ol > li:target {\n  color: var(--md-default-fg-color);\n}\n.md-typeset .footnote > ol > li:focus-within .footnote-backref {\n  transform: translateX(0);\n  opacity: 1;\n  transition: none;\n}\n.md-typeset .footnote > ol > li:is(:hover, :target) .footnote-backref {\n  transform: translateX(0);\n  opacity: 1;\n}\n.md-typeset .footnote > ol > li > :first-child {\n  margin-top: 0;\n}\n.md-typeset .footnote-ref {\n  font-weight: 700;\n  font-size: 0.75em;\n}\nhtml .md-typeset .footnote-ref {\n  outline-offset: 0.1rem;\n}\n.md-typeset [id^=\"fnref:\"]:target > .footnote-ref {\n  outline: auto;\n}\n.md-typeset .footnote-backref {\n  display: inline-block;\n  color: var(--md-typeset-a-color);\n  font-size: 0;\n  vertical-align: text-bottom;\n  transform: translateX(0.25rem);\n  opacity: 0;\n  transition: color 250ms, transform 250ms 250ms, opacity 125ms 250ms;\n}\n@media print {\n  .md-typeset .footnote-backref {\n    color: var(--md-typeset-a-color);\n    transform: translateX(0);\n    opacity: 1;\n  }\n}\n[dir=rtl] .md-typeset .footnote-backref {\n  transform: translateX(-0.25rem);\n}\n.md-typeset .footnote-backref:hover {\n  color: var(--md-accent-fg-color);\n}\n.md-typeset .footnote-backref::before {\n  display: inline-block;\n  width: 0.8rem;\n  height: 0.8rem;\n  background-color: currentcolor;\n  mask-image: var(--md-footnotes-icon);\n  mask-position: center;\n  mask-repeat: no-repeat;\n  mask-size: contain;\n  content: \"\";\n}\n[dir=rtl] .md-typeset .footnote-backref::before svg {\n  transform: scaleX(-1);\n}\n\n.md-typeset .headerlink {\n  display: inline-block;\n  margin-inline-start: 0.5rem;\n  color: var(--md-default-fg-color--lighter);\n  opacity: 0;\n  transition: color 250ms, opacity 125ms;\n}\n@media print {\n  .md-typeset .headerlink {\n    display: none;\n  }\n}\n.md-typeset :is(:hover, :target) > .headerlink,\n.md-typeset .headerlink:focus {\n  opacity: 1;\n  transition: color 250ms, opacity 125ms;\n}\n.md-typeset :target > .headerlink,\n.md-typeset .headerlink:is(:focus, :hover) {\n  color: var(--md-accent-fg-color);\n}\n.md-typeset :target {\n  --md-scroll-margin: 3.6rem;\n  --md-scroll-offset: 0rem;\n  scroll-margin-top: calc(var(--md-scroll-margin) - var(--md-scroll-offset));\n}\n@media screen and (min-width: 76.25em) {\n  .md-header--lifted ~ .md-container .md-typeset :target {\n    --md-scroll-margin: 6rem;\n  }\n}\n.md-typeset :is(h1, h2, h3):target {\n  --md-scroll-offset: 0.2rem;\n}\n.md-typeset h4:target {\n  --md-scroll-offset: 0.15rem;\n}\n\n.md-typeset div.arithmatex {\n  overflow: auto;\n}\n@media screen and (max-width: 44.9375em) {\n  .md-typeset div.arithmatex {\n    margin: 0 -0.8rem;\n  }\n}\n.md-typeset div.arithmatex > * {\n  width: min-content;\n  margin-inline: auto !important;\n  padding: 0 0.8rem;\n  touch-action: auto;\n}\n.md-typeset div.arithmatex > * mjx-container {\n  margin: 0 !important;\n}\n\n.md-typeset :is(del, ins, .comment).critic {\n  box-decoration-break: clone;\n}\n.md-typeset del.critic {\n  background-color: var(--md-typeset-del-color);\n}\n.md-typeset ins.critic {\n  background-color: var(--md-typeset-ins-color);\n}\n.md-typeset .critic.comment {\n  color: var(--md-code-hl-comment-color);\n}\n.md-typeset .critic.comment::before {\n  content: \"/* \";\n}\n.md-typeset .critic.comment::after {\n  content: \" */\";\n}\n.md-typeset .critic.block {\n  display: block;\n  margin: 1em 0;\n  padding-inline: 0.8rem;\n  overflow: auto;\n  box-shadow: none;\n}\n.md-typeset .critic.block > :first-child {\n  margin-top: 0.5em;\n}\n.md-typeset .critic.block > :last-child {\n  margin-bottom: 0.5em;\n}\n\n:root {\n  --md-details-icon: svg-load(\"material/chevron-right.svg\");\n}\n\n.md-typeset details {\n  display: flow-root;\n  padding-top: 0;\n  overflow: visible;\n}\n.md-typeset details[open] > summary::after {\n  transform: rotate(90deg);\n}\n.md-typeset details:not([open]) {\n  padding-bottom: 0;\n  box-shadow: none;\n}\n.md-typeset details:not([open]) > summary {\n  border-radius: 0.1rem;\n}\n.md-typeset summary {\n  display: block;\n  min-height: 1rem;\n  padding-inline-end: 1.8rem;\n  border-start-start-radius: 0.1rem;\n  border-start-end-radius: 0.1rem;\n  cursor: pointer;\n}\n.md-typeset summary.focus-visible {\n  outline-color: var(--md-accent-fg-color);\n  outline-offset: 0.2rem;\n}\n.md-typeset summary:not(.focus-visible) {\n  outline: none;\n  -webkit-tap-highlight-color: transparent;\n}\n.md-typeset summary::after {\n  position: absolute;\n  top: 0.625em;\n  inset-inline-end: 0.4rem;\n  width: 1rem;\n  height: 1rem;\n  background-color: currentcolor;\n  mask-image: var(--md-details-icon);\n  mask-position: center;\n  mask-repeat: no-repeat;\n  mask-size: contain;\n  transform: rotate(0deg);\n  transition: transform 250ms;\n  content: \"\";\n}\n[dir=rtl] .md-typeset summary::after {\n  transform: rotate(180deg);\n}\n.md-typeset summary::marker {\n  display: none;\n}\n.md-typeset summary::-webkit-details-marker {\n  display: none;\n}\n\n.md-typeset :is(.emojione, .twemoji, .gemoji) {\n  display: inline-flex;\n  height: 1.125em;\n  vertical-align: text-top;\n}\n.md-typeset :is(.emojione, .twemoji, .gemoji) svg {\n  width: 1.125em;\n  max-height: 100%;\n  fill: currentcolor;\n}\n\n.highlight :is(.o, .ow) {\n  color: var(--md-code-hl-operator-color);\n}\n.highlight .p {\n  color: var(--md-code-hl-punctuation-color);\n}\n.highlight :is(.cpf, .l, .s, .sb, .sc, .s2, .si, .s1, .ss) {\n  color: var(--md-code-hl-string-color);\n}\n.highlight :is(.cp, .se, .sh, .sr, .sx) {\n  color: var(--md-code-hl-special-color);\n}\n.highlight :is(.m, .mb, .mf, .mh, .mi, .il, .mo) {\n  color: var(--md-code-hl-number-color);\n}\n.highlight :is(.k, .kd, .kn, .kp, .kr, .kt) {\n  color: var(--md-code-hl-keyword-color);\n}\n.highlight :is(.n) {\n  color: var(--md-code-hl-name-color);\n}\n.highlight :is(.kc, .no, .nb, .bp) {\n  color: var(--md-code-hl-constant-color);\n}\n.highlight :is(.nc, .ne, .nf, .nn) {\n  color: var(--md-code-hl-function-color);\n}\n.highlight :is(.nd, .ni, .nl, .nt) {\n  color: var(--md-code-hl-keyword-color);\n}\n.highlight :is(.c, .cm, .c1, .ch, .cs, .sd) {\n  color: var(--md-code-hl-comment-color);\n}\n.highlight :is(.na, .nv, .vc, .vg, .vi) {\n  color: var(--md-code-hl-variable-color);\n}\n.highlight :is(.ge, .gr, .gh, .go, .gp, .gs, .gu, .gt) {\n  color: var(--md-code-hl-generic-color);\n}\n.highlight :is(.gd, .gi) {\n  margin: 0 -0.125em;\n  padding: 0 0.125em;\n  border-radius: 0.1rem;\n}\n.highlight .gd {\n  background-color: var(--md-typeset-del-color);\n}\n.highlight .gi {\n  background-color: var(--md-typeset-ins-color);\n}\n.highlight .hll {\n  display: block;\n  margin: 0 -1.1764705882em;\n  padding: 0 1.1764705882em;\n  background-color: var(--md-code-hl-color);\n}\n.highlight span.filename {\n  position: relative;\n  display: flow-root;\n  margin-top: 1em;\n  padding: 0.6617647059em 1.1764705882em;\n  font-weight: 700;\n  font-size: 0.85em;\n  background-color: var(--md-code-bg-color);\n  border-bottom: 0.05rem solid var(--md-default-fg-color--lightest);\n  border-top-left-radius: 0.1rem;\n  border-top-right-radius: 0.1rem;\n}\n.highlight span.filename + pre {\n  margin-top: 0;\n}\n.highlight span.filename + pre > code {\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n.highlight [data-linenos]::before {\n  position: sticky;\n  left: -1.1764705882em;\n  z-index: 3;\n  float: left;\n  margin-right: 1.1764705882em;\n  margin-left: -1.1764705882em;\n  padding-left: 1.1764705882em;\n  color: var(--md-default-fg-color--light);\n  background-color: var(--md-code-bg-color);\n  box-shadow: -0.05rem 0 var(--md-default-fg-color--lightest) inset;\n  content: attr(data-linenos);\n  user-select: none;\n}\n.highlight code a[id] {\n  position: absolute;\n  visibility: hidden;\n}\n.highlight code[data-md-copying] .hll {\n  display: contents;\n}\n.highlight code[data-md-copying] .md-annotation {\n  display: none;\n}\n\n.highlighttable {\n  display: flow-root;\n}\n.highlighttable :is(tbody, td) {\n  display: block;\n  padding: 0;\n}\n.highlighttable tr {\n  display: flex;\n}\n.highlighttable pre {\n  margin: 0;\n}\n.highlighttable th.filename {\n  flex-grow: 1;\n  padding: 0;\n  text-align: left;\n}\n.highlighttable th.filename span.filename {\n  margin-top: 0;\n}\n.highlighttable .linenos {\n  padding: 0.7720588235em 1.1764705882em;\n  padding-right: 0;\n  font-size: 0.85em;\n  background-color: var(--md-code-bg-color);\n  border-top-left-radius: 0.1rem;\n  border-bottom-left-radius: 0.1rem;\n  user-select: none;\n}\n.highlighttable .linenodiv {\n  padding-right: 0.5882352941em;\n  box-shadow: -0.05rem 0 var(--md-default-fg-color--lightest) inset;\n}\n.highlighttable .linenodiv pre {\n  color: var(--md-default-fg-color--light);\n  text-align: right;\n}\n.highlighttable .code {\n  flex: 1;\n  min-width: 0;\n}\n\n.linenodiv a {\n  color: inherit;\n}\n\n.md-typeset .highlighttable {\n  margin: 1em 0;\n  direction: ltr;\n}\n.md-typeset .highlighttable > tbody > tr > .code > div > pre > code {\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.md-typeset :is(.highlight, .highlighttable, .literal-block-wrapper, div[class^=highlight-], .results-prefix) + .result {\n  margin-top: calc(-1em + -0.125em);\n  padding: 0 1em;\n  overflow: visible;\n  border: 0.05rem solid var(--md-code-bg-color);\n  border-top-width: 0.1rem;\n  border-bottom-right-radius: 0.1rem;\n  border-bottom-left-radius: 0.1rem;\n}\n.md-typeset :is(.highlight, .highlighttable, .literal-block-wrapper, div[class^=highlight-], .results-prefix) + .result::after {\n  display: block;\n  clear: both;\n  content: \"\";\n}\n.md-typeset .results .results-prefix + .result {\n  margin-top: 0;\n}\n.md-typeset .results .results-prefix {\n  margin-top: -1em;\n  padding: 0.6617647059em 1.1764705882em;\n  font-weight: 700;\n  font-size: 0.85em;\n  background-color: var(--md-code-bg-color);\n}\n\n@media screen and (max-width: 44.9375em) {\n  .md-content__inner > .highlight {\n    margin: 1em -0.8rem;\n  }\n  .md-content__inner > .highlight > .filename,\n.md-content__inner > .highlight > pre > code {\n    border-radius: 0;\n  }\n  .md-content__inner > .highlight > .highlighttable > tbody > tr > .filename span.filename,\n.md-content__inner > .highlight > .highlighttable > tbody > tr > .linenos,\n.md-content__inner > .highlight > .highlighttable > tbody > tr > .code > div > pre > code {\n    border-radius: 0;\n  }\n  .md-content__inner > .highlight + .result {\n    margin-inline: -0.8rem;\n    border-inline-width: 0;\n    border-radius: 0;\n  }\n}\n.md-typeset .keys kbd:is(::before, ::after) {\n  position: relative;\n  margin: 0;\n  color: inherit;\n  -moz-osx-font-smoothing: initial;\n  -webkit-font-smoothing: initial;\n}\n.md-typeset .keys span {\n  padding: 0 0.2em;\n  color: var(--md-default-fg-color--light);\n}\n.md-typeset .keys .key-alt::before {\n  padding-right: 0.4em;\n  content: \"\u2387\";\n}\n.md-typeset .keys .key-left-alt::before {\n  padding-right: 0.4em;\n  content: \"\u2387\";\n}\n.md-typeset .keys .key-right-alt::before {\n  padding-right: 0.4em;\n  content: \"\u2387\";\n}\n.md-typeset .keys .key-command::before {\n  padding-right: 0.4em;\n  content: \"\u2318\";\n}\n.md-typeset .keys .key-left-command::before {\n  padding-right: 0.4em;\n  content: \"\u2318\";\n}\n.md-typeset .keys .key-right-command::before {\n  padding-right: 0.4em;\n  content: \"\u2318\";\n}\n.md-typeset .keys .key-control::before {\n  padding-right: 0.4em;\n  content: \"\u2303\";\n}\n.md-typeset .keys .key-left-control::before {\n  padding-right: 0.4em;\n  content: \"\u2303\";\n}\n.md-typeset .keys .key-right-control::before {\n  padding-right: 0.4em;\n  content: \"\u2303\";\n}\n.md-typeset .keys .key-meta::before {\n  padding-right: 0.4em;\n  content: \"\u25c6\";\n}\n.md-typeset .keys .key-left-meta::before {\n  padding-right: 0.4em;\n  content: \"\u25c6\";\n}\n.md-typeset .keys .key-right-meta::before {\n  padding-right: 0.4em;\n  content: \"\u25c6\";\n}\n.md-typeset .keys .key-option::before {\n  padding-right: 0.4em;\n  content: \"\u2325\";\n}\n.md-typeset .keys .key-left-option::before {\n  padding-right: 0.4em;\n  content: \"\u2325\";\n}\n.md-typeset .keys .key-right-option::before {\n  padding-right: 0.4em;\n  content: \"\u2325\";\n}\n.md-typeset .keys .key-shift::before {\n  padding-right: 0.4em;\n  content: \"\u21e7\";\n}\n.md-typeset .keys .key-left-shift::before {\n  padding-right: 0.4em;\n  content: \"\u21e7\";\n}\n.md-typeset .keys .key-right-shift::before {\n  padding-right: 0.4em;\n  content: \"\u21e7\";\n}\n.md-typeset .keys .key-super::before {\n  padding-right: 0.4em;\n  content: \"\u2756\";\n}\n.md-typeset .keys .key-left-super::before {\n  padding-right: 0.4em;\n  content: \"\u2756\";\n}\n.md-typeset .keys .key-right-super::before {\n  padding-right: 0.4em;\n  content: \"\u2756\";\n}\n.md-typeset .keys .key-windows::before {\n  padding-right: 0.4em;\n  content: \"\u229e\";\n}\n.md-typeset .keys .key-left-windows::before {\n  padding-right: 0.4em;\n  content: \"\u229e\";\n}\n.md-typeset .keys .key-right-windows::before {\n  padding-right: 0.4em;\n  content: \"\u229e\";\n}\n.md-typeset .keys .key-arrow-down::before {\n  padding-right: 0.4em;\n  content: \"\u2193\";\n}\n.md-typeset .keys .key-arrow-left::before {\n  padding-right: 0.4em;\n  content: \"\u2190\";\n}\n.md-typeset .keys .key-arrow-right::before {\n  padding-right: 0.4em;\n  content: \"\u2192\";\n}\n.md-typeset .keys .key-arrow-up::before {\n  padding-right: 0.4em;\n  content: \"\u2191\";\n}\n.md-typeset .keys .key-backspace::before {\n  padding-right: 0.4em;\n  content: \"\u232b\";\n}\n.md-typeset .keys .key-backtab::before {\n  padding-right: 0.4em;\n  content: \"\u21e4\";\n}\n.md-typeset .keys .key-caps-lock::before {\n  padding-right: 0.4em;\n  content: \"\u21ea\";\n}\n.md-typeset .keys .key-clear::before {\n  padding-right: 0.4em;\n  content: \"\u2327\";\n}\n.md-typeset .keys .key-context-menu::before {\n  padding-right: 0.4em;\n  content: \"\u2630\";\n}\n.md-typeset .keys .key-delete::before {\n  padding-right: 0.4em;\n  content: \"\u2326\";\n}\n.md-typeset .keys .key-eject::before {\n  padding-right: 0.4em;\n  content: \"\u23cf\";\n}\n.md-typeset .keys .key-end::before {\n  padding-right: 0.4em;\n  content: \"\u2913\";\n}\n.md-typeset .keys .key-escape::before {\n  padding-right: 0.4em;\n  content: \"\u238b\";\n}\n.md-typeset .keys .key-home::before {\n  padding-right: 0.4em;\n  content: \"\u2912\";\n}\n.md-typeset .keys .key-insert::before {\n  padding-right: 0.4em;\n  content: \"\u2380\";\n}\n.md-typeset .keys .key-page-down::before {\n  padding-right: 0.4em;\n  content: \"\u21df\";\n}\n.md-typeset .keys .key-page-up::before {\n  padding-right: 0.4em;\n  content: \"\u21de\";\n}\n.md-typeset .keys .key-print-screen::before {\n  padding-right: 0.4em;\n  content: \"\u2399\";\n}\n.md-typeset .keys .key-tab::after {\n  padding-left: 0.4em;\n  content: \"\u21e5\";\n}\n.md-typeset .keys .key-num-enter::after {\n  padding-left: 0.4em;\n  content: \"\u2324\";\n}\n.md-typeset .keys .key-enter::after {\n  padding-left: 0.4em;\n  content: \"\u23ce\";\n}\n\n:root {\n  --md-tabbed-icon--prev: svg-load(\"material/chevron-left.svg\");\n  --md-tabbed-icon--next: svg-load(\"material/chevron-right.svg\");\n}\n\n.md-typeset .tabbed-set {\n  position: relative;\n  display: flex;\n  flex-flow: column wrap;\n  margin: 1em 0;\n  border-radius: 0.1rem;\n}\n.md-typeset .tabbed-set > input {\n  position: absolute;\n  width: 0;\n  height: 0;\n  opacity: 0;\n}\n.md-typeset .tabbed-set > input:target {\n  --md-scroll-offset: 0.625em;\n}\n.md-typeset .tabbed-labels {\n  display: flex;\n  max-width: 100%;\n  overflow: auto;\n  box-shadow: 0 -0.05rem var(--md-default-fg-color--lightest) inset;\n  -ms-overflow-style: none;\n  scrollbar-width: none;\n}\n@media print {\n  .md-typeset .tabbed-labels {\n    display: contents;\n  }\n}\n@media screen {\n  .js .md-typeset .tabbed-labels {\n    position: relative;\n  }\n  .js .md-typeset .tabbed-labels::before {\n    position: absolute;\n    bottom: 0;\n    left: 0;\n    display: block;\n    width: var(--md-indicator-width);\n    height: 2px;\n    background: var(--md-accent-fg-color);\n    transform: translateX(var(--md-indicator-x));\n    transition: width 225ms, transform 250ms;\n    transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n    content: \"\";\n  }\n}\n.md-typeset .tabbed-labels::-webkit-scrollbar {\n  display: none;\n}\n.md-typeset .tabbed-labels > label {\n  flex-shrink: 0;\n  width: auto;\n  padding: 0.78125em 1.25em 0.625em;\n  color: var(--md-default-fg-color--light);\n  font-weight: 700;\n  font-size: 0.64rem;\n  white-space: nowrap;\n  border-bottom: 0.1rem solid transparent;\n  border-radius: 0.1rem 0.1rem 0 0;\n  cursor: pointer;\n  transition: background-color 250ms, color 250ms;\n  scroll-margin-inline-start: 1rem;\n}\n@media print {\n  .md-typeset .tabbed-labels > label:nth-child(1) {\n    order: 1;\n  }\n  .md-typeset .tabbed-labels > label:nth-child(2) {\n    order: 2;\n  }\n  .md-typeset .tabbed-labels > label:nth-child(3) {\n    order: 3;\n  }\n  .md-typeset .tabbed-labels > label:nth-child(4) {\n    order: 4;\n  }\n  .md-typeset .tabbed-labels > label:nth-child(5) {\n    order: 5;\n  }\n  .md-typeset .tabbed-labels > label:nth-child(6) {\n    order: 6;\n  }\n  .md-typeset .tabbed-labels > label:nth-child(7) {\n    order: 7;\n  }\n  .md-typeset .tabbed-labels > label:nth-child(8) {\n    order: 8;\n  }\n  .md-typeset .tabbed-labels > label:nth-child(9) {\n    order: 9;\n  }\n  .md-typeset .tabbed-labels > label:nth-child(10) {\n    order: 10;\n  }\n  .md-typeset .tabbed-labels > label:nth-child(11) {\n    order: 11;\n  }\n  .md-typeset .tabbed-labels > label:nth-child(12) {\n    order: 12;\n  }\n  .md-typeset .tabbed-labels > label:nth-child(13) {\n    order: 13;\n  }\n  .md-typeset .tabbed-labels > label:nth-child(14) {\n    order: 14;\n  }\n  .md-typeset .tabbed-labels > label:nth-child(15) {\n    order: 15;\n  }\n  .md-typeset .tabbed-labels > label:nth-child(16) {\n    order: 16;\n  }\n  .md-typeset .tabbed-labels > label:nth-child(17) {\n    order: 17;\n  }\n  .md-typeset .tabbed-labels > label:nth-child(18) {\n    order: 18;\n  }\n  .md-typeset .tabbed-labels > label:nth-child(19) {\n    order: 19;\n  }\n  .md-typeset .tabbed-labels > label:nth-child(20) {\n    order: 20;\n  }\n}\n.md-typeset .tabbed-labels > label:hover {\n  color: var(--md-accent-fg-color);\n}\n.md-typeset .tabbed-content {\n  width: 100%;\n}\n@media print {\n  .md-typeset .tabbed-content {\n    display: contents;\n  }\n}\n.md-typeset .tabbed-block {\n  display: none;\n}\n@media print {\n  .md-typeset .tabbed-block {\n    display: block;\n  }\n  .md-typeset .tabbed-block:nth-child(1) {\n    order: 1;\n  }\n  .md-typeset .tabbed-block:nth-child(2) {\n    order: 2;\n  }\n  .md-typeset .tabbed-block:nth-child(3) {\n    order: 3;\n  }\n  .md-typeset .tabbed-block:nth-child(4) {\n    order: 4;\n  }\n  .md-typeset .tabbed-block:nth-child(5) {\n    order: 5;\n  }\n  .md-typeset .tabbed-block:nth-child(6) {\n    order: 6;\n  }\n  .md-typeset .tabbed-block:nth-child(7) {\n    order: 7;\n  }\n  .md-typeset .tabbed-block:nth-child(8) {\n    order: 8;\n  }\n  .md-typeset .tabbed-block:nth-child(9) {\n    order: 9;\n  }\n  .md-typeset .tabbed-block:nth-child(10) {\n    order: 10;\n  }\n  .md-typeset .tabbed-block:nth-child(11) {\n    order: 11;\n  }\n  .md-typeset .tabbed-block:nth-child(12) {\n    order: 12;\n  }\n  .md-typeset .tabbed-block:nth-child(13) {\n    order: 13;\n  }\n  .md-typeset .tabbed-block:nth-child(14) {\n    order: 14;\n  }\n  .md-typeset .tabbed-block:nth-child(15) {\n    order: 15;\n  }\n  .md-typeset .tabbed-block:nth-child(16) {\n    order: 16;\n  }\n  .md-typeset .tabbed-block:nth-child(17) {\n    order: 17;\n  }\n  .md-typeset .tabbed-block:nth-child(18) {\n    order: 18;\n  }\n  .md-typeset .tabbed-block:nth-child(19) {\n    order: 19;\n  }\n  .md-typeset .tabbed-block:nth-child(20) {\n    order: 20;\n  }\n}\n.md-typeset .tabbed-block > pre:first-child,\n.md-typeset .tabbed-block > .highlight:first-child > pre {\n  margin: 0;\n}\n.md-typeset .tabbed-block > pre:first-child > code,\n.md-typeset .tabbed-block > .highlight:first-child > pre > code {\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n.md-typeset .tabbed-block > .highlight:first-child > .filename {\n  margin: 0;\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n.md-typeset .tabbed-block > .highlight:first-child > .highlighttable {\n  margin: 0;\n}\n.md-typeset .tabbed-block > .highlight:first-child > .highlighttable > tbody > tr > .filename span.filename,\n.md-typeset .tabbed-block > .highlight:first-child > .highlighttable > tbody > tr > .linenos {\n  margin: 0;\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n.md-typeset .tabbed-block > .highlight:first-child > .highlighttable > tbody > tr > .code > div > pre > code {\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n.md-typeset .tabbed-block > .highlight:first-child + .result {\n  margin-top: -0.125em;\n}\n.md-typeset .tabbed-block > .tabbed-set {\n  margin: 0;\n}\n.md-typeset .tabbed-button {\n  display: block;\n  align-self: center;\n  width: 0.9rem;\n  height: 0.9rem;\n  margin-top: 0.1rem;\n  color: var(--md-default-fg-color--light);\n  border-radius: 100%;\n  cursor: pointer;\n  transition: background-color 250ms;\n  pointer-events: initial;\n}\n.md-typeset .tabbed-button:hover {\n  color: var(--md-accent-fg-color);\n  background-color: var(--md-accent-fg-color--transparent);\n}\n.md-typeset .tabbed-button::after {\n  display: block;\n  width: 100%;\n  height: 100%;\n  background-color: currentcolor;\n  transition: background-color 250ms, transform 250ms;\n  mask-image: var(--md-tabbed-icon--prev);\n  mask-position: center;\n  mask-repeat: no-repeat;\n  mask-size: contain;\n  content: \"\";\n}\n.md-typeset .tabbed-control {\n  position: absolute;\n  display: flex;\n  justify-content: start;\n  width: 1.2rem;\n  height: 1.9rem;\n  background: linear-gradient(to right, var(--md-default-bg-color) 60%, transparent);\n  transition: opacity 125ms;\n  pointer-events: none;\n}\n[dir=rtl] .md-typeset .tabbed-control {\n  transform: rotate(180deg);\n}\n.md-typeset .tabbed-control[hidden] {\n  opacity: 0;\n}\n.md-typeset .tabbed-control--next {\n  right: 0;\n  justify-content: end;\n  background: linear-gradient(to left, var(--md-default-bg-color) 60%, transparent);\n}\n.md-typeset .tabbed-control--next .tabbed-button::after {\n  mask-image: var(--md-tabbed-icon--next);\n}\n\n@media screen and (max-width: 44.9375em) {\n  .md-content__inner > .tabbed-set .tabbed-labels {\n    max-width: 100vw;\n    margin: 0 -0.8rem;\n    padding-inline-start: 0.8rem;\n    scroll-padding-inline-start: 0.8rem;\n  }\n  .md-content__inner > .tabbed-set .tabbed-labels::after {\n    padding-inline-end: 0.8rem;\n    content: \"\";\n  }\n  .md-content__inner > .tabbed-set .tabbed-labels ~ .tabbed-control--prev {\n    width: 2rem;\n    margin-inline-start: -0.8rem;\n    padding-inline-start: 0.8rem;\n  }\n  .md-content__inner > .tabbed-set .tabbed-labels ~ .tabbed-control--next {\n    width: 2rem;\n    margin-inline-end: -0.8rem;\n    padding-inline-end: 0.8rem;\n  }\n}\n@media screen {\n  .md-typeset .tabbed-set > input:nth-child(20):checked ~ .tabbed-labels > :nth-child(20), .md-typeset .tabbed-set > input:nth-child(19):checked ~ .tabbed-labels > :nth-child(19), .md-typeset .tabbed-set > input:nth-child(18):checked ~ .tabbed-labels > :nth-child(18), .md-typeset .tabbed-set > input:nth-child(17):checked ~ .tabbed-labels > :nth-child(17), .md-typeset .tabbed-set > input:nth-child(16):checked ~ .tabbed-labels > :nth-child(16), .md-typeset .tabbed-set > input:nth-child(15):checked ~ .tabbed-labels > :nth-child(15), .md-typeset .tabbed-set > input:nth-child(14):checked ~ .tabbed-labels > :nth-child(14), .md-typeset .tabbed-set > input:nth-child(13):checked ~ .tabbed-labels > :nth-child(13), .md-typeset .tabbed-set > input:nth-child(12):checked ~ .tabbed-labels > :nth-child(12), .md-typeset .tabbed-set > input:nth-child(11):checked ~ .tabbed-labels > :nth-child(11), .md-typeset .tabbed-set > input:nth-child(10):checked ~ .tabbed-labels > :nth-child(10), .md-typeset .tabbed-set > input:nth-child(9):checked ~ .tabbed-labels > :nth-child(9), .md-typeset .tabbed-set > input:nth-child(8):checked ~ .tabbed-labels > :nth-child(8), .md-typeset .tabbed-set > input:nth-child(7):checked ~ .tabbed-labels > :nth-child(7), .md-typeset .tabbed-set > input:nth-child(6):checked ~ .tabbed-labels > :nth-child(6), .md-typeset .tabbed-set > input:nth-child(5):checked ~ .tabbed-labels > :nth-child(5), .md-typeset .tabbed-set > input:nth-child(4):checked ~ .tabbed-labels > :nth-child(4), .md-typeset .tabbed-set > input:nth-child(3):checked ~ .tabbed-labels > :nth-child(3), .md-typeset .tabbed-set > input:nth-child(2):checked ~ .tabbed-labels > :nth-child(2), .md-typeset .tabbed-set > input:nth-child(1):checked ~ .tabbed-labels > :nth-child(1) {\n    color: var(--md-accent-fg-color);\n  }\n  .no-js .md-typeset .tabbed-set > input:nth-child(20):checked ~ .tabbed-labels > :nth-child(20), .md-typeset .no-js .tabbed-set > input:nth-child(20):checked ~ .tabbed-labels > :nth-child(20), .no-js .md-typeset .tabbed-set > input:nth-child(19):checked ~ .tabbed-labels > :nth-child(19), .md-typeset .no-js .tabbed-set > input:nth-child(19):checked ~ .tabbed-labels > :nth-child(19), .no-js .md-typeset .tabbed-set > input:nth-child(18):checked ~ .tabbed-labels > :nth-child(18), .md-typeset .no-js .tabbed-set > input:nth-child(18):checked ~ .tabbed-labels > :nth-child(18), .no-js .md-typeset .tabbed-set > input:nth-child(17):checked ~ .tabbed-labels > :nth-child(17), .md-typeset .no-js .tabbed-set > input:nth-child(17):checked ~ .tabbed-labels > :nth-child(17), .no-js .md-typeset .tabbed-set > input:nth-child(16):checked ~ .tabbed-labels > :nth-child(16), .md-typeset .no-js .tabbed-set > input:nth-child(16):checked ~ .tabbed-labels > :nth-child(16), .no-js .md-typeset .tabbed-set > input:nth-child(15):checked ~ .tabbed-labels > :nth-child(15), .md-typeset .no-js .tabbed-set > input:nth-child(15):checked ~ .tabbed-labels > :nth-child(15), .no-js .md-typeset .tabbed-set > input:nth-child(14):checked ~ .tabbed-labels > :nth-child(14), .md-typeset .no-js .tabbed-set > input:nth-child(14):checked ~ .tabbed-labels > :nth-child(14), .no-js .md-typeset .tabbed-set > input:nth-child(13):checked ~ .tabbed-labels > :nth-child(13), .md-typeset .no-js .tabbed-set > input:nth-child(13):checked ~ .tabbed-labels > :nth-child(13), .no-js .md-typeset .tabbed-set > input:nth-child(12):checked ~ .tabbed-labels > :nth-child(12), .md-typeset .no-js .tabbed-set > input:nth-child(12):checked ~ .tabbed-labels > :nth-child(12), .no-js .md-typeset .tabbed-set > input:nth-child(11):checked ~ .tabbed-labels > :nth-child(11), .md-typeset .no-js .tabbed-set > input:nth-child(11):checked ~ .tabbed-labels > :nth-child(11), .no-js .md-typeset .tabbed-set > input:nth-child(10):checked ~ .tabbed-labels > :nth-child(10), .md-typeset .no-js .tabbed-set > input:nth-child(10):checked ~ .tabbed-labels > :nth-child(10), .no-js .md-typeset .tabbed-set > input:nth-child(9):checked ~ .tabbed-labels > :nth-child(9), .md-typeset .no-js .tabbed-set > input:nth-child(9):checked ~ .tabbed-labels > :nth-child(9), .no-js .md-typeset .tabbed-set > input:nth-child(8):checked ~ .tabbed-labels > :nth-child(8), .md-typeset .no-js .tabbed-set > input:nth-child(8):checked ~ .tabbed-labels > :nth-child(8), .no-js .md-typeset .tabbed-set > input:nth-child(7):checked ~ .tabbed-labels > :nth-child(7), .md-typeset .no-js .tabbed-set > input:nth-child(7):checked ~ .tabbed-labels > :nth-child(7), .no-js .md-typeset .tabbed-set > input:nth-child(6):checked ~ .tabbed-labels > :nth-child(6), .md-typeset .no-js .tabbed-set > input:nth-child(6):checked ~ .tabbed-labels > :nth-child(6), .no-js .md-typeset .tabbed-set > input:nth-child(5):checked ~ .tabbed-labels > :nth-child(5), .md-typeset .no-js .tabbed-set > input:nth-child(5):checked ~ .tabbed-labels > :nth-child(5), .no-js .md-typeset .tabbed-set > input:nth-child(4):checked ~ .tabbed-labels > :nth-child(4), .md-typeset .no-js .tabbed-set > input:nth-child(4):checked ~ .tabbed-labels > :nth-child(4), .no-js .md-typeset .tabbed-set > input:nth-child(3):checked ~ .tabbed-labels > :nth-child(3), .md-typeset .no-js .tabbed-set > input:nth-child(3):checked ~ .tabbed-labels > :nth-child(3), .no-js .md-typeset .tabbed-set > input:nth-child(2):checked ~ .tabbed-labels > :nth-child(2), .md-typeset .no-js .tabbed-set > input:nth-child(2):checked ~ .tabbed-labels > :nth-child(2), .no-js .md-typeset .tabbed-set > input:nth-child(1):checked ~ .tabbed-labels > :nth-child(1), .md-typeset .no-js .tabbed-set > input:nth-child(1):checked ~ .tabbed-labels > :nth-child(1) {\n    border-color: var(--md-accent-fg-color);\n  }\n}\n\n.md-typeset .tabbed-set > input:nth-child(20).focus-visible ~ .tabbed-labels > :nth-child(20), .md-typeset .tabbed-set > input:nth-child(19).focus-visible ~ .tabbed-labels > :nth-child(19), .md-typeset .tabbed-set > input:nth-child(18).focus-visible ~ .tabbed-labels > :nth-child(18), .md-typeset .tabbed-set > input:nth-child(17).focus-visible ~ .tabbed-labels > :nth-child(17), .md-typeset .tabbed-set > input:nth-child(16).focus-visible ~ .tabbed-labels > :nth-child(16), .md-typeset .tabbed-set > input:nth-child(15).focus-visible ~ .tabbed-labels > :nth-child(15), .md-typeset .tabbed-set > input:nth-child(14).focus-visible ~ .tabbed-labels > :nth-child(14), .md-typeset .tabbed-set > input:nth-child(13).focus-visible ~ .tabbed-labels > :nth-child(13), .md-typeset .tabbed-set > input:nth-child(12).focus-visible ~ .tabbed-labels > :nth-child(12), .md-typeset .tabbed-set > input:nth-child(11).focus-visible ~ .tabbed-labels > :nth-child(11), .md-typeset .tabbed-set > input:nth-child(10).focus-visible ~ .tabbed-labels > :nth-child(10), .md-typeset .tabbed-set > input:nth-child(9).focus-visible ~ .tabbed-labels > :nth-child(9), .md-typeset .tabbed-set > input:nth-child(8).focus-visible ~ .tabbed-labels > :nth-child(8), .md-typeset .tabbed-set > input:nth-child(7).focus-visible ~ .tabbed-labels > :nth-child(7), .md-typeset .tabbed-set > input:nth-child(6).focus-visible ~ .tabbed-labels > :nth-child(6), .md-typeset .tabbed-set > input:nth-child(5).focus-visible ~ .tabbed-labels > :nth-child(5), .md-typeset .tabbed-set > input:nth-child(4).focus-visible ~ .tabbed-labels > :nth-child(4), .md-typeset .tabbed-set > input:nth-child(3).focus-visible ~ .tabbed-labels > :nth-child(3), .md-typeset .tabbed-set > input:nth-child(2).focus-visible ~ .tabbed-labels > :nth-child(2), .md-typeset .tabbed-set > input:nth-child(1).focus-visible ~ .tabbed-labels > :nth-child(1) {\n  background-color: var(--md-accent-fg-color--transparent);\n}\n\n.md-typeset .tabbed-set > input:nth-child(20):checked ~ .tabbed-content > :nth-child(20), .md-typeset .tabbed-set > input:nth-child(19):checked ~ .tabbed-content > :nth-child(19), .md-typeset .tabbed-set > input:nth-child(18):checked ~ .tabbed-content > :nth-child(18), .md-typeset .tabbed-set > input:nth-child(17):checked ~ .tabbed-content > :nth-child(17), .md-typeset .tabbed-set > input:nth-child(16):checked ~ .tabbed-content > :nth-child(16), .md-typeset .tabbed-set > input:nth-child(15):checked ~ .tabbed-content > :nth-child(15), .md-typeset .tabbed-set > input:nth-child(14):checked ~ .tabbed-content > :nth-child(14), .md-typeset .tabbed-set > input:nth-child(13):checked ~ .tabbed-content > :nth-child(13), .md-typeset .tabbed-set > input:nth-child(12):checked ~ .tabbed-content > :nth-child(12), .md-typeset .tabbed-set > input:nth-child(11):checked ~ .tabbed-content > :nth-child(11), .md-typeset .tabbed-set > input:nth-child(10):checked ~ .tabbed-content > :nth-child(10), .md-typeset .tabbed-set > input:nth-child(9):checked ~ .tabbed-content > :nth-child(9), .md-typeset .tabbed-set > input:nth-child(8):checked ~ .tabbed-content > :nth-child(8), .md-typeset .tabbed-set > input:nth-child(7):checked ~ .tabbed-content > :nth-child(7), .md-typeset .tabbed-set > input:nth-child(6):checked ~ .tabbed-content > :nth-child(6), .md-typeset .tabbed-set > input:nth-child(5):checked ~ .tabbed-content > :nth-child(5), .md-typeset .tabbed-set > input:nth-child(4):checked ~ .tabbed-content > :nth-child(4), .md-typeset .tabbed-set > input:nth-child(3):checked ~ .tabbed-content > :nth-child(3), .md-typeset .tabbed-set > input:nth-child(2):checked ~ .tabbed-content > :nth-child(2), .md-typeset .tabbed-set > input:nth-child(1):checked ~ .tabbed-content > :nth-child(1) {\n  display: block;\n}\n\n:root {\n  --md-tasklist-icon:\n    svg-load(\"octicons/check-circle-fill-24.svg\");\n  --md-tasklist-icon--checked:\n    svg-load(\"octicons/check-circle-fill-24.svg\");\n}\n\n.md-typeset .task-list-item {\n  position: relative;\n  list-style-type: none;\n}\n.md-typeset .task-list-item [type=checkbox] {\n  position: absolute;\n  top: 0.45em;\n  inset-inline-start: -2em;\n}\n.md-typeset .task-list-control [type=checkbox] {\n  z-index: -1;\n  opacity: 0;\n}\n.md-typeset .task-list-indicator::before {\n  position: absolute;\n  top: 0.15em;\n  inset-inline-start: -1.5em;\n  width: 1.25em;\n  height: 1.25em;\n  background-color: var(--md-default-fg-color--lightest);\n  mask-image: var(--md-tasklist-icon);\n  mask-position: center;\n  mask-repeat: no-repeat;\n  mask-size: contain;\n  content: \"\";\n}\n.md-typeset [type=checkbox]:checked + .task-list-indicator::before {\n  background-color: #00e676;\n  mask-image: var(--md-tasklist-icon--checked);\n}\n\n.rst-versions {\n  font-family: var(--md-text-font-family);\n}\n.rst-versions.rst-badge {\n  top: 50px;\n  bottom: inherit !important;\n  height: auto;\n  font-size: 0.85rem;\n}\n\n:root > * {\n  --md-mermaid-font-family: var(--md-text-font-family), sans-serif;\n  --md-mermaid-edge-color: var(--md-code-fg-color);\n  --md-mermaid-node-bg-color: var(--md-accent-fg-color--transparent);\n  --md-mermaid-node-fg-color: var(--md-accent-fg-color);\n  --md-mermaid-label-bg-color: var(--md-default-bg-color);\n  --md-mermaid-label-fg-color: var(--md-code-fg-color);\n}\n\n.mermaid {\n  margin: 1em 0;\n  line-height: normal;\n}\n\n:root > * {\n  --md-graphviz-edge-color: var(--md-default-fg-color);\n  --md-graphviz-node-bg-color: var(--md-accent-fg-color--transparent);\n  --md-graphviz-node-fg-color: var(--md-accent-fg-color);\n  --md-graphviz-label-bg-color: var(--md-default-bg-color);\n  --md-graphviz-label-fg-color: var(--md-code-fg-color);\n  --md-graphviz-a-hover-color: var(--md-primary-fg-color);\n}\n\n.graphviz {\n  margin: 1em 0;\n}\n\n.graphviz a:hover > text {\n  fill: var(--md-graphviz-hover-color) !important;\n}\n\n@media screen and (min-width: 45em) {\n  .md-typeset .inline {\n    float: inline-start;\n    width: 11.7rem;\n    margin-top: 0;\n    margin-inline-end: 0.8rem;\n    margin-bottom: 0.8rem;\n  }\n  .md-typeset .inline.end {\n    float: inline-end;\n    margin-inline: 0.8rem 0;\n  }\n}\n\n.md-typeset .align-left {\n  text-align: left;\n}\n.md-typeset .align-right {\n  text-align: right;\n}\n.md-typeset .align-center {\n  clear: both;\n  text-align: center;\n}\n.md-typeset .align-top {\n  vertical-align: top;\n}\n.md-typeset .align-middle {\n  vertical-align: middle;\n}\n.md-typeset .align-bottom {\n  vertical-align: bottom;\n}\n.md-typeset .figure.align-left,\n.md-typeset figure.align-left,\n.md-typeset img.align-left,\n.md-typeset object.align-left,\n.md-typeset table.align-left {\n  margin-right: auto;\n}\n.md-typeset .figure.align-center,\n.md-typeset figure.align-center,\n.md-typeset img.align-center,\n.md-typeset object.align-center,\n.md-typeset table.align-center {\n  margin-right: auto;\n  margin-left: auto;\n}\n.md-typeset .figure.align-right,\n.md-typeset figure.align-right,\n.md-typeset img.align-right,\n.md-typeset object.align-right,\n.md-typeset table.align-right {\n  margin-left: auto;\n}\n.md-typeset .figure.align-center,\n.md-typeset .figure.align-right,\n.md-typeset figure.align-center,\n.md-typeset figure.align-right,\n.md-typeset img.align-center,\n.md-typeset img.align-right,\n.md-typeset object.align-center,\n.md-typeset object.align-right {\n  display: block;\n}\n.md-typeset .figure.align-left,\n.md-typeset .figure.align-right,\n.md-typeset figure.align-left,\n.md-typeset figure.align-right,\n.md-typeset table.align-left,\n.md-typeset table.align-center,\n.md-typeset table.align-right {\n  text-align: inherit;\n}\n.md-typeset .rubric {\n  font-weight: 700;\n}\n.md-typeset .viewcode-block .viewcode-back {\n  float: right;\n}\n.md-typeset .versionmodified {\n  font-style: italic;\n}\n.md-typeset div.line-block {\n  display: block;\n}\n.md-typeset div.line-block div.line-block {\n  margin-left: 1.5em;\n}\n\n.md-typeset :is(dl.objdesc, dl.api-field) > dt {\n  font-family: var(--md-code-font-family);\n  background: var(--md-code-bg-color);\n}\n.md-typeset :is(dl.objdesc, dl.api-field) > dt code {\n  padding: 0;\n  border-radius: 0;\n}\n.md-typeset :is(dl.objdesc, dl.api-field) > dt .sig-name:not(.sig-name-nonprimary) {\n  padding: 0;\n  color: var(--md-code-hl-name-color);\n  font-weight: 700;\n}\n.md-typeset :is(dl.objdesc, dl.api-field) > dt .sig-param {\n  font-style: normal;\n}\n.md-typeset :is(dl.objdesc, dl.api-field) > dt .sig-param .n:not(.desctype) {\n  color: var(--md-default-fg-color--light);\n}\n.md-typeset :is(dl.objdesc, dl.api-field) > dt .sig-param a.reference .n:not(.desctype):hover {\n  color: var(--md-accent-fg-color);\n}\n.md-typeset :is(dl.objdesc, dl.api-field) > dt.sig-wrap .sig-param-decl::before {\n  white-space: pre;\n  content: \"\\a     \";\n}\n.md-typeset :is(dl.objdesc, dl.api-field) > dt.sig-wrap .sig-paren ~ .sig-paren::before {\n  white-space: pre;\n  content: \"\\a\";\n}\n.md-typeset dl.objdesc > dd > dl.field-list > dt > .colon {\n  display: none;\n}\n.md-typeset :is(dl.objdesc, dl.api-field) > dt a.reference > .sig-name,\n.md-typeset :is(dl.objdesc, dl.api-field) > dt a.reference.sig-name,\n.md-typeset :is(dl.objdesc, dl.api-field) > dt a.reference:not(.desctype) > .n,\n.md-typeset .sig-inline a.reference > .sig-name,\n.md-typeset .sig-inline a.reference.sig-name,\n.md-typeset .sig-inline a.reference:not(.desctype) > .n {\n  color: var(--md-typeset-a-color);\n}\n.md-typeset :is(dl.objdesc, dl.api-field) > dt a.reference > .sig-name:hover,\n.md-typeset :is(dl.objdesc, dl.api-field) > dt a.reference.sig-name:hover,\n.md-typeset :is(dl.objdesc, dl.api-field) > dt a.reference:not(.desctype) > .n:hover,\n.md-typeset .sig-inline a.reference > .sig-name:hover,\n.md-typeset .sig-inline a.reference.sig-name:hover,\n.md-typeset .sig-inline a.reference:not(.desctype) > .n:hover {\n  color: var(--md-accent-fg-color);\n}\n.md-typeset :is(dl.objdesc, dl.api-field) > dt .desctype,\n.md-typeset :is(dl.objdesc, dl.api-field) > dt .desctype > a.reference,\n.md-typeset .sig-inline .desctype,\n.md-typeset .sig-inline .desctype > a.reference {\n  color: var(--md-code-hl-special-color);\n}\n.md-typeset :is(dl.objdesc, dl.api-field) > dt .desctype .n,\n.md-typeset :is(dl.objdesc, dl.api-field) > dt .desctype > a.reference .n,\n.md-typeset .sig-inline .desctype .n,\n.md-typeset .sig-inline .desctype > a.reference .n {\n  color: inherit;\n}\n.md-typeset :is(dl.objdesc, dl.api-field) > dt .desctype:is(a.reference):hover,\n.md-typeset :is(dl.objdesc, dl.api-field) > dt .desctype > a.reference:hover,\n.md-typeset .sig-inline .desctype:is(a.reference):hover,\n.md-typeset .sig-inline .desctype > a.reference:hover {\n  color: var(--md-accent-fg-color);\n}\n.md-typeset dl.objdesc > dt {\n  padding-top: 0.5em;\n  padding-right: 0.5em;\n  padding-left: 0.5em;\n  font-family: var(--md-code-font-family);\n  background: var(--md-code-bg-color);\n}\n.md-typeset dl.objdesc > dt,\n.md-typeset dl.objdesc > dt code {\n  font-size: 0.75rem;\n}\n.md-typeset dl.objdesc > dt .property {\n  color: var(--md-code-hl-keyword-color);\n  font-weight: 700;\n  font-style: normal;\n}\n.md-typeset dl.objdesc > dt .sig-prename {\n  padding: 0;\n  color: var(--md-code-hl-name-color);\n}\n.md-typeset dl.objdesc > dt .viewcode-link,\n.md-typeset dl.objdesc > dt .viewcode-back {\n  float: right;\n  text-align: right;\n}\n.md-typeset dl.objdesc > dt.api-include-path,\n.md-typeset dl.objdesc > dt.api-include-path code {\n  font-size: 0.65rem;\n}\n.md-typeset dl.objdesc > dt:first-child {\n  padding-top: 0.5em;\n}\n.md-typeset dl.objdesc > dt:last-of-type {\n  padding-bottom: 0.5em;\n}\n.md-typeset dl.objdesc > dd dl.field-list > dt {\n  margin-bottom: 1em;\n  font-weight: 700;\n  font-size: 1em;\n}\n.md-typeset dl.objdesc > dd dd.noindent {\n  margin-left: 0;\n}\n.md-typeset dl.api-field > dt {\n  display: table;\n}\n.md-typeset dl.api-field > dt a.headerlink {\n  position: relative;\n  left: 0.5em;\n  width: 0;\n  margin-left: 0;\n}\n.md-typeset dl.api-field > dt,\n.md-typeset dl.api-field > dt code {\n  font-size: 0.65rem;\n}\n.md-typeset dl.api-field > dt.api-parameter-kind {\n  float: right;\n  font-family: var(--md-text-font-family);\n}\n.md-typeset dl.api-field > dt.api-parameter-kind::before {\n  content: \"[\";\n}\n.md-typeset dl.api-field > dt.api-parameter-kind::after {\n  content: \"]\";\n}\n.md-typeset dl.objdesc.summary > dd,\n.md-typeset dl.objdesc.summary > dd > p:first-child {\n  margin-top: 0;\n}\n.md-typeset .sig-inline:is(.c-texpr, .cpp-texpr) {\n  font-family: unset;\n  background-color: unset;\n}\n\n.md-nav__link {\n  white-space: nowrap;\n}\n\n:root > * {\n  --objinfo-icon-fg-alias: #e65100;\n  --objinfo-icon-fg-default: #424242;\n  --objinfo-icon-fg-data: #1565c0;\n  --objinfo-icon-fg-procedure: #6a1b9a;\n  --objinfo-icon-fg-sub-data: #2e7d32;\n  --objinfo-icon-bg-default: var(--md-default-bg-color);\n}\n\n@media screen {\n  [data-md-color-scheme=slate] {\n    --objinfo-icon-fg-alias: #ffb74d;\n    --objinfo-icon-fg-default: #e0e0e0;\n    --objinfo-icon-fg-data: #64b5f6;\n    --objinfo-icon-fg-procedure: #ce93d8;\n    --objinfo-icon-fg-sub-data: #81c784;\n  }\n}\n.objinfo-icon {\n  display: inline-table;\n  flex-shrink: 0;\n  width: 16px;\n  height: 16px;\n  margin-right: 8px;\n  color: var(--objinfo-icon-fg-default);\n  font-weight: 500;\n  font-family: var(--md-text-font-family);\n  line-height: 16px;\n  text-align: center;\n  vertical-align: middle;\n  background-color: var(--objinfo-icon-bg-default);\n  border: 1px solid var(--objinfo-icon-fg-default);\n  border-radius: 2px;\n}\n.objinfo-icon__alias {\n  color: var(--objinfo-icon-bg-default);\n  background-color: var(--objinfo-icon-fg-alias);\n  border: 1px solid var(--objinfo-icon-fg-alias);\n}\n.objinfo-icon__procedure {\n  color: var(--objinfo-icon-bg-default);\n  background-color: var(--objinfo-icon-fg-procedure);\n  border: 1px solid var(--objinfo-icon-fg-procedure);\n}\n.objinfo-icon__data {\n  color: var(--objinfo-icon-bg-default);\n  background-color: var(--objinfo-icon-fg-data);\n  border: 1px solid var(--objinfo-icon-fg-data);\n}\n.objinfo-icon__sub-data {\n  color: var(--objinfo-icon-bg-default);\n  background-color: var(--objinfo-icon-fg-sub-data);\n  border: 1px solid var(--objinfo-icon-fg-sub-data);\n}\n\n.search-result-objlabel {\n  float: right;\n  padding: 2px;\n  border: 1px solid var(--md-default-fg-color--light);\n  border-radius: 2px;\n}\n\ntable.longtable.docutils.data.align-default tbody > tr > td > p > a.reference.internal > code.xref.py.py-obj.docutils.literal.notranslate > span.pre {\n  word-break: normal;\n}", "////\n/// Copyright (c) 2016-2022 Martin Donath \n///\n/// Permission is hereby granted, free of charge, to any person obtaining a\n/// copy of this software and associated documentation files (the \"Software\"),\n/// to deal in the Software without restriction, including without limitation\n/// the rights to use, copy, modify, merge, publish, distribute, sublicense,\n/// and/or sell copies of the Software, and to permit persons to whom the\n/// Software is furnished to do so, subject to the following conditions:\n///\n/// The above copyright notice and this permission notice shall be included in\n/// all copies or substantial portions of the Software.\n///\n/// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n/// FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL\n/// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n/// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n/// DEALINGS\n////\n\n// ----------------------------------------------------------------------------\n// Rules\n// ----------------------------------------------------------------------------\n\n// Enforce correct box model and prevent adjustments of font size after\n// orientation changes in IE and iOS\nhtml {\n  box-sizing: border-box;\n  text-size-adjust: none;\n}\n\n// All elements shall inherit the document default\n*,\n*::before,\n*::after {\n  box-sizing: inherit;\n\n  // [reduced motion]: Disable all transitions\n  @media (prefers-reduced-motion) {\n    transition: none !important; // stylelint-disable-line\n  }\n}\n\n// Remove margin in all browsers\nbody {\n  margin: 0;\n}\n\n// Reset tap outlines on iOS and Android\na,\nbutton,\nlabel,\ninput {\n  -webkit-tap-highlight-color: transparent;\n}\n\n// Reset link styles\na {\n  color: inherit;\n  text-decoration: none;\n}\n\n// Normalize horizontal separator styles\nhr {\n  display: block;\n  box-sizing: content-box;\n  height: px2rem(1px);\n  padding: 0;\n  overflow: visible;\n  border: 0;\n}\n\n// Normalize font-size in all browsers\nsmall {\n  font-size: 80%;\n}\n\n// Prevent subscript and superscript from affecting line-height\nsub,\nsup {\n  line-height: 1em;\n}\n\n// Remove border on image\nimg {\n  border-style: none;\n}\n\n// Reset table styles\ntable {\n  border-collapse: separate;\n  border-spacing: 0;\n}\n\n// Reset table cell styles\ntd,\nth {\n  font-weight: 400;\n  vertical-align: top;\n}\n\n// Reset button styles\nbutton {\n  margin: 0;\n  padding: 0;\n  font-size: inherit;\n  font-family: inherit;\n  background: transparent;\n  border: 0;\n}\n\n// Reset input styles\ninput {\n  border: 0;\n  outline: none;\n}\n", "////\n/// Copyright (c) 2016-2022 Martin Donath \n///\n/// Permission is hereby granted, free of charge, to any person obtaining a\n/// copy of this software and associated documentation files (the \"Software\"),\n/// to deal in the Software without restriction, including without limitation\n/// the rights to use, copy, modify, merge, publish, distribute, sublicense,\n/// and/or sell copies of the Software, and to permit persons to whom the\n/// Software is furnished to do so, subject to the following conditions:\n///\n/// The above copyright notice and this permission notice shall be included in\n/// all copies or substantial portions of the Software.\n///\n/// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n/// FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL\n/// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n/// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n/// DEALINGS\n////\n\n// ----------------------------------------------------------------------------\n// Rules\n// ----------------------------------------------------------------------------\n\n// Color variables\n:root {\n  @extend %root;\n}\n\n// ----------------------------------------------------------------------------\n\n// Allow to explicitly use color schemes in nested content\n[data-md-color-scheme=\"default\"] {\n  @extend %root;\n}\n\n// ----------------------------------------------------------------------------\n// Placeholders\n// ----------------------------------------------------------------------------\n\n// Default theme, i.e. light mode\n%root {\n\n  // Default color shades\n  --md-default-fg-color:               hsla(0, 0%, 0%, 0.87);\n  --md-default-fg-color--light:        hsla(0, 0%, 0%, 0.54);\n  --md-default-fg-color--lighter:      hsla(0, 0%, 0%, 0.32);\n  --md-default-fg-color--lightest:     hsla(0, 0%, 0%, 0.07);\n  --md-default-bg-color:               hsla(0, 0%, 100%, 1);\n  --md-default-bg-color--light:        hsla(0, 0%, 100%, 0.7);\n  --md-default-bg-color--lighter:      hsla(0, 0%, 100%, 0.3);\n  --md-default-bg-color--lightest:     hsla(0, 0%, 100%, 0.12);\n\n  // Primary color shades\n  --md-primary-fg-color:               hsla(#{hex2hsl($clr-indigo-500)}, 1);\n  --md-primary-fg-color--light:        hsla(#{hex2hsl($clr-indigo-400)}, 1);\n  --md-primary-fg-color--dark:         hsla(#{hex2hsl($clr-indigo-700)}, 1);\n  --md-primary-bg-color:               hsla(0, 0%, 100%, 1);\n  --md-primary-bg-color--light:        hsla(0, 0%, 100%, 0.7);\n\n  // Accent color shades\n  --md-accent-fg-color:                hsla(#{hex2hsl($clr-indigo-a200)}, 1);\n  --md-accent-fg-color--transparent:   hsla(#{hex2hsl($clr-indigo-a200)}, 0.1);\n  --md-accent-bg-color:                hsla(0, 0%, 100%, 1);\n  --md-accent-bg-color--light:         hsla(0, 0%, 100%, 0.7);\n\n  // Code color shades\n  --md-code-fg-color:                  hsla(200, 18%, 26%, 1);\n  --md-code-bg-color:                  hsla(0, 0%, 96%, 1);\n\n  // Code highlighting color shades\n  --md-code-hl-color:                  hsla(#{hex2hsl($clr-yellow-a200)}, 0.5);\n  --md-code-hl-number-color:           hsla(0, 67%, 50%, 1);\n  --md-code-hl-special-color:          hsla(340, 83%, 47%, 1);\n  --md-code-hl-function-color:         hsla(291, 45%, 50%, 1);\n  --md-code-hl-constant-color:         hsla(250, 63%, 60%, 1);\n  --md-code-hl-keyword-color:          hsla(219, 54%, 51%, 1);\n  --md-code-hl-string-color:           hsla(150, 63%, 30%, 1);\n  --md-code-hl-name-color:             var(--md-code-fg-color);\n  --md-code-hl-operator-color:         var(--md-default-fg-color--light);\n  --md-code-hl-punctuation-color:      var(--md-default-fg-color--light);\n  --md-code-hl-comment-color:          var(--md-default-fg-color--light);\n  --md-code-hl-generic-color:          var(--md-default-fg-color--light);\n  --md-code-hl-variable-color:         var(--md-default-fg-color--light);\n\n  // Typeset color shades\n  --md-typeset-color:                  var(--md-default-fg-color);\n\n  // Typeset `a` color shades\n  --md-typeset-a-color:                var(--md-primary-fg-color);\n\n  // Typeset `mark` color shades\n  --md-typeset-mark-color:             hsla(#{hex2hsl($clr-yellow-a200)}, 0.5);\n\n  // Typeset `del` and `ins` color shades\n  --md-typeset-del-color:              hsla(6, 90%, 60%, 0.15);\n  --md-typeset-ins-color:              hsla(150, 90%, 44%, 0.15);\n\n  // Typeset `kbd` color shades\n  --md-typeset-kbd-color:              hsla(0, 0%, 98%, 1);\n  --md-typeset-kbd-accent-color:       hsla(0, 100%, 100%, 1);\n  --md-typeset-kbd-border-color:       hsla(0, 0%, 72%, 1);\n\n  // Typeset `table` color shades\n  --md-typeset-table-color:            hsla(0, 0%, 0%, 0.12);\n\n  // Admonition color shades\n  --md-admonition-fg-color:            var(--md-default-fg-color);\n  --md-admonition-bg-color:            var(--md-default-bg-color);\n\n  // Footer color shades\n  --md-footer-fg-color:                hsla(0, 0%, 100%, 1);\n  --md-footer-fg-color--light:         hsla(0, 0%, 100%, 0.7);\n  --md-footer-fg-color--lighter:       hsla(0, 0%, 100%, 0.3);\n  --md-footer-bg-color:                hsla(0, 0%, 0%, 0.87);\n  --md-footer-bg-color--dark:          hsla(0, 0%, 0%, 0.32);\n\n  // Shadow depth 1\n  --md-shadow-z1:\n    0 #{px2rem(4px)} #{px2rem(10px)} hsla(0, 0%, 0%, 0.05),\n    0 0              #{px2rem(1px)}  hsla(0, 0%, 0%, 0.1);\n\n  // Shadow depth 2\n  --md-shadow-z2:\n    0 #{px2rem(4px)} #{px2rem(10px)} hsla(0, 0%, 0%, 0.1),\n    0 0              #{px2rem(1px)}  hsla(0, 0%, 0%, 0.25);\n\n  // Shadow depth 3\n  --md-shadow-z3:\n    0 #{px2rem(4px)} #{px2rem(10px)} hsla(0, 0%, 0%, 0.2),\n    0 0              #{px2rem(1px)}  hsla(0, 0%, 0%, 0.35);\n}\n", "////\n/// Copyright (c) 2016-2022 Martin Donath \n///\n/// Permission is hereby granted, free of charge, to any person obtaining a\n/// copy of this software and associated documentation files (the \"Software\"),\n/// to deal in the Software without restriction, including without limitation\n/// the rights to use, copy, modify, merge, publish, distribute, sublicense,\n/// and/or sell copies of the Software, and to permit persons to whom the\n/// Software is furnished to do so, subject to the following conditions:\n///\n/// The above copyright notice and this permission notice shall be included in\n/// all copies or substantial portions of the Software.\n///\n/// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n/// FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL\n/// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n/// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n/// DEALINGS\n////\n\n// ----------------------------------------------------------------------------\n// Rules\n// ----------------------------------------------------------------------------\n\n// Icon\n.md-icon {\n\n  // SVG defaults\n  svg {\n    display: block;\n    width: px2rem(24px);\n    height: px2rem(24px);\n    fill: currentcolor;\n  }\n}\n\n// sphinx-immaterial: change display for inline icons\n.si-icon-inline::before {\n  display: inline-flex;\n  width: px2em(18px);\n  height: px2em(18px);\n  vertical-align: text-top;\n  background-color: var(--md-default-fg-color);\n  content: \"\";\n  mask-repeat: no-repeat;\n  mask-position: center;\n}\n", "////\n/// Copyright (c) 2016-2022 Martin Donath \n///\n/// Permission is hereby granted, free of charge, to any person obtaining a\n/// copy of this software and associated documentation files (the \"Software\"),\n/// to deal in the Software without restriction, including without limitation\n/// the rights to use, copy, modify, merge, publish, distribute, sublicense,\n/// and/or sell copies of the Software, and to permit persons to whom the\n/// Software is furnished to do so, subject to the following conditions:\n///\n/// The above copyright notice and this permission notice shall be included in\n/// all copies or substantial portions of the Software.\n///\n/// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n/// FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL\n/// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n/// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n/// DEALINGS\n////\n\n// ----------------------------------------------------------------------------\n// Rules: font definitions\n// ----------------------------------------------------------------------------\n\n// Enable font-smoothing in Webkit and FF\nbody {\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n\n  // Font with fallback for body copy\n  --md-text-font-family:\n    var(--md-text-font, _),\n    -apple-system, BlinkMacSystemFont, Helvetica, Arial, sans-serif;\n\n  // Font with fallback for code\n  --md-code-font-family:\n    var(--md-code-font, _),\n    SFMono-Regular, Consolas, Menlo, monospace;\n}\n\n// Define default fonts\nbody,\ninput {\n  color: var(--md-typeset-color);\n  font-feature-settings: \"kern\", \"liga\";\n  font-family: var(--md-text-font-family);\n}\n\n// Define monospaced fonts\ncode,\npre,\nkbd {\n  color: var(--md-typeset-color);\n  font-feature-settings: \"kern\";\n  font-family: var(--md-code-font-family);\n}\n\n// ----------------------------------------------------------------------------\n// Rules: typesetted content\n// ----------------------------------------------------------------------------\n\n// General variables\n:root {\n  --md-typeset-table-sort-icon: svg-load(\"material/sort.svg\");\n  --md-typeset-table-sort-icon--asc: svg-load(\"material/sort-ascending.svg\");\n  --md-typeset-table-sort-icon--desc: svg-load(\"material/sort-descending.svg\");\n}\n\n// ----------------------------------------------------------------------------\n\n// Content that is typeset - if possible, all margins, paddings and font sizes\n// should be set in ems, so nested blocks (e.g. admonitions) render correctly.\n.md-typeset {\n  font-size: px2rem(16px);\n  line-height: 1.6;\n  color-adjust: exact;\n\n  // [print]: We'll use a smaller `font-size` for printing, so code examples\n  // don't break too early, and `16px` looks too big anyway.\n  @media print {\n    font-size: px2rem(13.6px);\n  }\n\n  // Default spacing\n  ul,\n  ol,\n  dl,\n  figure,\n  blockquote,\n  pre {\n    margin-block: 1em;\n  }\n\n  // Headline on level 1\n  h1 {\n    margin: 0 0 px2em(40px, 32px);\n    color: var(--md-default-fg-color--light);\n    font-weight: 300;\n    font-size: px2em(32px);\n    line-height: 1.3;\n    letter-spacing: -0.01em;\n  }\n\n  // Headline on level 2\n  h2 {\n    margin: px2em(40px, 25px) 0 px2em(16px, 25px);\n    font-weight: 300;\n    font-size: px2em(25px);\n    line-height: 1.4;\n    letter-spacing: -0.01em;\n  }\n\n  // Headline on level 3\n  h3 {\n    margin: px2em(32px, 20px) 0 px2em(16px, 20px);\n    font-weight: 400;\n    font-size: px2em(20px);\n    line-height: 1.5;\n    letter-spacing: -0.01em;\n  }\n\n  // Headline on level 3 following level 2\n  h2 + h3 {\n    margin-top: px2em(16px, 20px);\n  }\n\n  // Headline on level 4\n  h4 {\n    margin: px2em(16px) 0;\n    font-weight: 700;\n    letter-spacing: -0.01em;\n  }\n\n  // Headline on level 5-6\n  h5,\n  h6 {\n    margin: px2em(16px, 12.8px) 0;\n    color: var(--md-default-fg-color--light);\n    font-weight: 700;\n    font-size: px2em(12.8px);\n    letter-spacing: -0.01em;\n  }\n\n  // Headline on level 5\n  h5 {\n    text-transform: uppercase;\n  }\n\n  // Horizontal separator\n  hr {\n    display: flow-root;\n    margin: 1.5em 0;\n    border-bottom: px2rem(1px) solid var(--md-default-fg-color--lightest);\n  }\n\n  // Text link\n  a {\n    color: var(--md-typeset-a-color);\n    word-break: break-word;\n\n    // Also enable color transition on pseudo elements\n    &,\n    &::before {\n      transition: color 125ms;\n    }\n\n    // Text link on focus/hover\n    &:focus,\n    &:hover {\n      color: var(--md-accent-fg-color);\n\n      // Inline code block\n      code {\n        background-color: var(--md-accent-fg-color--transparent);\n      }\n    }\n\n    // Inline code block\n    code {\n      color: currentcolor;\n      transition: background-color 125ms;\n    }\n\n    // Show outline for keyboard devices\n    &.focus-visible {\n      outline-color: var(--md-accent-fg-color);\n      outline-offset: px2rem(4px);\n    }\n  }\n\n  // Code block\n  code,\n  pre,\n  kbd {\n    color: var(--md-code-fg-color);\n    direction: ltr;\n    font-variant-ligatures: none;\n\n    // [print]: Wrap text and hide scollbars\n    @media print {\n      white-space: pre-wrap;\n    }\n  }\n\n  // Inline code block\n  code {\n    padding: 0 px2em(4px, 13.6px);\n    font-size: px2em(13.6px);\n    word-break: break-word;\n    background-color: var(--md-code-bg-color);\n    border-radius: px2rem(2px);\n    box-decoration-break: clone;\n\n    // Hide outline for pointer devices\n    &:not(.focus-visible) {\n      outline: none;\n      -webkit-tap-highlight-color: transparent;\n    }\n  }\n\n  // Unformatted content\n  pre {\n    position: relative;\n    display: flow-root;\n    line-height: 1.4;\n\n    // Code block\n    > code {\n      display: block;\n      margin: 0;\n      padding: px2em(10.5px, 13.6px) px2em(16px, 13.6px);\n      overflow: auto;\n      word-break: normal;\n      outline-color: var(--md-accent-fg-color);\n      box-shadow: none;\n      box-decoration-break: slice;\n      touch-action: auto;\n      scrollbar-width: thin;\n      scrollbar-color: var(--md-default-fg-color--lighter) transparent;\n\n      // Code block on hover\n      &:hover {\n        scrollbar-color: var(--md-accent-fg-color) transparent;\n      }\n\n      // Webkit scrollbar\n      &::-webkit-scrollbar {\n        width: px2rem(4px);\n        height: px2rem(4px);\n      }\n\n      // Webkit scrollbar thumb\n      &::-webkit-scrollbar-thumb {\n        background-color: var(--md-default-fg-color--lighter);\n\n        // Webkit scrollbar thumb on hover\n        &:hover {\n          background-color: var(--md-accent-fg-color);\n        }\n      }\n    }\n  }\n\n  // sphinx-immaterial: reset margin for code-blocks with a caption\n  .code-block-caption + .notranslate {\n    pre,\n    .highlighttable {\n      margin-top: 0;\n    }\n  }\n\n  // Keyboard key\n  kbd {\n    display: inline-block;\n    padding: 0 px2em(8px, 12px);\n    color: var(--md-default-fg-color);\n    font-size: px2em(12px);\n    vertical-align: text-top;\n    word-break: break-word;\n    background-color: var(--md-typeset-kbd-color);\n    border-radius: px2rem(2px);\n    box-shadow:\n      0 px2rem(2px)  0 px2rem(1px) var(--md-typeset-kbd-border-color),\n      0 px2rem(2px)  0             var(--md-typeset-kbd-border-color),\n      0 px2rem(-2px) px2rem(4px)   var(--md-typeset-kbd-accent-color) inset;\n  }\n\n  // Text highlighting marker\n  mark {\n    color: inherit;\n    word-break: break-word;\n    background-color: var(--md-typeset-mark-color);\n    box-decoration-break: clone;\n  }\n\n  // Abbreviation\n  abbr {\n    text-decoration: none;\n    border-bottom: px2rem(1px) dotted var(--md-default-fg-color--light);\n    cursor: help;\n\n    // Show tooltip for touch devices\n    @media (hover: none) {\n      position: relative;\n\n      // Tooltip\n      &[title]:is(:focus, :hover)::after {\n        position: absolute;\n        inset-inline-start: 0;\n        display: inline-block;\n        width: auto;\n        min-width: max-content;\n        max-width: 80%;\n        margin-top: 2em;\n        padding: px2rem(4px) px2rem(6px);\n        color: var(--md-default-bg-color);\n        font-size: px2rem(14px);\n        background-color: var(--md-default-fg-color);\n        border-radius: px2rem(2px);\n        box-shadow: var(--md-shadow-z3);\n        content: attr(title);\n      }\n    }\n  }\n\n  // Small text\n  small {\n    opacity: 0.75;\n  }\n\n  // Superscript and subscript\n  sup,\n  sub {\n    margin-inline-start: px2em(1px, 12.8px);\n  }\n\n  // Blockquotes, possibly nested\n  blockquote {\n    padding-inline-start: px2rem(12px);\n    margin-inline: 0;\n    color: var(--md-default-fg-color--light);\n    border-inline-start: px2rem(4px) solid var(--md-default-fg-color--lighter);\n  }\n\n  // Unordered list\n  ul {\n    list-style-type: disc;\n  }\n\n  // Unordered and ordered list\n  ul,\n  ol {\n    margin-inline-start: px2em(10px);\n    padding: 0;\n\n    // Adjust display mode if not hidden\n    &:not([hidden]) {\n      display: flow-root;\n    }\n\n    // Nested ordered list\n    ol {\n      list-style-type: lower-alpha;\n\n      // Triply nested ordered list\n      ol {\n        list-style-type: lower-roman;\n      }\n    }\n\n    // List element\n    li {\n      margin-bottom: 0.5em;\n      margin-inline-start: px2em(20px);\n\n      // Adjust spacing\n      p,\n      blockquote {\n        margin: 0.5em 0;\n      }\n\n      // Adjust spacing on last child\n      &:last-child {\n        margin-bottom: 0;\n      }\n\n      // Nested list\n      :is(ul, ol) {\n        margin-block: 0.5em;\n        margin-inline-start: px2em(10px);\n      }\n    }\n  }\n\n  // Definition list\n  dd {\n    margin-block: 1em 1.5em;\n    margin-inline-start: px2em(30px);\n  }\n\n  // Image or video\n  img,\n  svg,\n  video {\n    max-width: 100%;\n    height: auto;\n  }\n\n  // Image\n  img {\n\n    // Adjust spacing when left-aligned\n    &[align=\"left\"] {\n      margin: 1em;\n      margin-left: 0;\n    }\n\n    // Adjust spacing when right-aligned\n    &[align=\"right\"] {\n      margin: 1em;\n      margin-right: 0;\n    }\n\n    // Adjust spacing when sole children\n    &[align]:only-child {\n      margin-top: 0;\n    }\n\n    // Hide images for dark mode\n    &[src$=\"#only-dark\"],\n    &[src$=\"#gh-dark-mode-only\"] {\n      display: none;\n    }\n  }\n\n  // Figure\n  figure {\n    display: flow-root;\n    width: fit-content;\n    max-width: 100%;\n    margin: 1em auto;\n    text-align: center;\n\n    // Figure images\n    img {\n      display: block;\n    }\n  }\n\n  // Figure caption\n  figcaption {\n    max-width: px2rem(480px);\n    margin: 1em auto;\n    font-style: italic;\n  }\n\n  // Limit width to container\n  iframe {\n    max-width: 100%;\n  }\n\n  // Data table\n  table.data:not(.plain) {\n    // sphinx-immaterial: set `display: block` rather than `display:\n    // inline-block` in order to allow center and right alignment to\n    // work.\n    display: block;\n    // sphinx-immaterial: set `width: max-content;` to ensure the\n    // table doesn't always fill the full width of its parent, as\n    // happens by default with `display: block`.\n    width: max-content;\n    max-width: 100%;\n    overflow: auto;\n    font-size: px2rem(12.8px);\n    background-color: var(--md-default-bg-color);\n    border: px2rem(1px) solid var(--md-typeset-table-color);\n    border-radius: px2rem(2px);\n    touch-action: auto;\n\n    // [print]: Reset display mode so table header wraps when printing\n    @media print {\n      display: table;\n    }\n\n    // Due to margin collapse because of the necessary inline-block hack, we\n    // cannot increase the bottom margin on the table, so we just increase the\n    // top margin on the following element\n    + * {\n      margin-top: 1.5em;\n    }\n\n    // Elements in table heading and cell\n    :is(th, td) > * {\n\n      // Adjust spacing on first child\n      &:first-child {\n        margin-top: 0;\n      }\n\n      // Adjust spacing on last child\n      &:last-child {\n        margin-bottom: 0;\n      }\n    }\n\n    // Table heading and cell\n    :is(th, td):not([align], .align-center, .align-left, .align-right) {\n      text-align: left;\n\n      // Adjust for right-to-left languages\n      [dir=\"rtl\"] & {\n        text-align: right;\n      }\n    }\n\n    // Table heading\n    th {\n      min-width: px2rem(100px);\n      padding: px2em(12px, 12.8px) px2em(16px, 12.8px);\n      font-weight: 700;\n      vertical-align: top;\n    }\n\n    // Table cell\n    td {\n      padding: px2em(12px, 12.8px) px2em(16px, 12.8px);\n      vertical-align: top;\n      border-top: px2rem(1px) solid var(--md-typeset-table-color);\n    }\n\n    // Table body row\n    tbody tr {\n      transition: background-color 125ms;\n\n      // Table row on hover\n      &:hover {\n        background-color: rgba(0, 0, 0, 0.035);\n        box-shadow: 0 px2rem(1px) 0 var(--md-default-bg-color) inset;\n      }\n    }\n\n    // Text link in table\n    a {\n      word-break: normal;\n    }\n  }\n\n  // Sortable table\n  table th[role=\"columnheader\"] {\n    cursor: pointer;\n\n    // Sort icon\n    &::after {\n      display: inline-block;\n      width: 1.2em;\n      height: 1.2em;\n      margin-inline-start: 0.5em;\n      vertical-align: text-bottom;\n      mask-image: var(--md-typeset-table-sort-icon);\n      mask-repeat: no-repeat;\n      mask-size: contain;\n      transition: background-color 125ms;\n      content: \"\";\n    }\n\n    // Show sort icon on hover\n    &:hover::after {\n      background-color: var(--md-default-fg-color--lighter);\n    }\n\n    // Sort ascending icon\n    &[aria-sort=\"ascending\"]::after {\n      background-color: var(--md-default-fg-color--light);\n      mask-image: var(--md-typeset-table-sort-icon--asc);\n    }\n\n    // Sort descending icon\n    &[aria-sort=\"descending\"]::after {\n      background-color: var(--md-default-fg-color--light);\n      mask-image: var(--md-typeset-table-sort-icon--desc);\n    }\n  }\n\n  // Data table scroll wrapper\n  &__scrollwrap {\n    margin: 1em px2rem(-16px);\n    overflow-x: auto;\n    touch-action: auto;\n  }\n\n  // Data table wrapper\n  &__table {\n    display: inline-block;\n    margin-bottom: 0.5em;\n    padding: 0 px2rem(16px);\n\n    // [print]: Reset display mode so table header wraps when printing\n    @media print {\n      display: block;\n    }\n\n    // Data table\n    html & table {\n      display: table;\n      width: 100%;\n      margin: 0;\n      overflow: hidden;\n    }\n  }\n}\n\n// ----------------------------------------------------------------------------\n// Rules: top-level\n// ----------------------------------------------------------------------------\n\n// [mobile -]: Align with body copy\n@include break-to-device(mobile) {\n\n  // Top-level unformatted content\n  .md-content__inner > pre {\n    margin: 1em px2rem(-16px);\n\n    // Code block\n    code {\n      border-radius: 0;\n    }\n  }\n}\n", "////\n/// Copyright (c) 2016-2022 Martin Donath \n///\n/// Permission is hereby granted, free of charge, to any person obtaining a\n/// copy of this software and associated documentation files (the \"Software\"),\n/// to deal in the Software without restriction, including without limitation\n/// the rights to use, copy, modify, merge, publish, distribute, sublicense,\n/// and/or sell copies of the Software, and to permit persons to whom the\n/// Software is furnished to do so, subject to the following conditions:\n///\n/// The above copyright notice and this permission notice shall be included in\n/// all copies or substantial portions of the Software.\n///\n/// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n/// FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL\n/// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n/// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n/// DEALINGS\n////\n\n@use \"sass:list\";\n@use \"sass:map\";\n@use \"sass:math\";\n\n// ----------------------------------------------------------------------------\n// Variables\n// ----------------------------------------------------------------------------\n\n///\n/// Device-specific breakpoints\n///\n/// @example\n///   $break-devices: (\n///     mobile: (\n///       portrait:  220px  479px,\n///       landscape: 480px  719px\n///     ),\n///     tablet: (\n///       portrait:  720px  959px,\n///       landscape: 960px  1219px\n///     ),\n///     screen: (\n///       small:     1220px 1599px,\n///       medium:    1600px 1999px,\n///       large:     2000px\n///     )\n///   );\n///\n$break-devices: () !default;\n\n// ----------------------------------------------------------------------------\n// Helpers\n// ----------------------------------------------------------------------------\n\n///\n/// Choose minimum and maximum device widths\n///\n@function break-select-min-max($devices) {\n  $min: 1000000;\n  $max: 0;\n  @each $key, $value in $devices {\n    @while type-of($value) == map {\n      $value: break-select-min-max($value);\n    }\n    @if type-of($value) == list {\n      @each $number in $value {\n        @if type-of($number) == number {\n          $min: math.min($number, $min);\n          @if $max {\n            $max: math.max($number, $max);\n          }\n        } @else {\n          @error \"Invalid number: #{$number}\";\n        }\n      }\n    } @else if type-of($value) == number {\n      $min: math.min($value, $min);\n      $max: null;\n    } @else {\n      @error \"Invalid value: #{$value}\";\n    }\n  }\n  @return $min, $max;\n}\n\n///\n/// Select minimum and maximum widths for a device breakpoint\n///\n@function break-select-device($device) {\n  $current: $break-devices;\n  @for $n from 1 through length($device) {\n    @if type-of($current) == map {\n      $current: map.get($current, list.nth($device, $n));\n    } @else {\n      @error \"Invalid device map: #{$devices}\";\n    }\n  }\n  @if type-of($current) == list or type-of($current) == number {\n    $current: (default: $current);\n  }\n  @return break-select-min-max($current);\n}\n\n// ----------------------------------------------------------------------------\n// Mixins\n// ----------------------------------------------------------------------------\n\n///\n/// A minimum-maximum media query breakpoint\n///\n@mixin break-at($breakpoint) {\n  @if type-of($breakpoint) == number {\n    @media screen and (min-width: $breakpoint) {\n      @content;\n    }\n  } @else if type-of($breakpoint) == list {\n    $min: list.nth($breakpoint, 1);\n    $max: list.nth($breakpoint, 2);\n    @if type-of($min) == number and type-of($max) == number {\n      @media screen and (min-width: $min) and (max-width: $max) {\n        @content;\n      }\n    } @else {\n      @error \"Invalid breakpoint: #{$breakpoint}\";\n    }\n  } @else {\n    @error \"Invalid breakpoint: #{$breakpoint}\";\n  }\n}\n\n///\n/// An orientation media query breakpoint\n///\n@mixin break-at-orientation($breakpoint) {\n  @if type-of($breakpoint) == string {\n    @media screen and (orientation: $breakpoint) {\n      @content;\n    }\n  } @else {\n    @error \"Invalid breakpoint: #{$breakpoint}\";\n  }\n}\n\n///\n/// A maximum-aspect-ratio media query breakpoint\n///\n@mixin break-at-ratio($breakpoint) {\n  @if type-of($breakpoint) == number {\n    @media screen and (max-aspect-ratio: $breakpoint) {\n      @content;\n    }\n  } @else {\n    @error \"Invalid breakpoint: #{$breakpoint}\";\n  }\n}\n\n///\n/// A minimum-maximum media query device breakpoint\n///\n@mixin break-at-device($device) {\n  @if type-of($device) == string {\n    $device: $device,;\n  }\n  @if type-of($device) == list {\n    $breakpoint: break-select-device($device);\n    @if list.nth($breakpoint, 2) {\n      $min: list.nth($breakpoint, 1);\n      $max: list.nth($breakpoint, 2);\n\n      @media screen and (min-width: $min) and (max-width: $max) {\n        @content;\n      }\n    } @else {\n      @error \"Invalid device: #{$device}\";\n    }\n  } @else {\n    @error \"Invalid device: #{$device}\";\n  }\n}\n\n///\n/// A minimum media query device breakpoint\n///\n@mixin break-from-device($device) {\n  @if type-of($device) == string {\n    $device: $device,;\n  }\n  @if type-of($device) == list {\n    $breakpoint: break-select-device($device);\n    $min: list.nth($breakpoint, 1);\n\n    @media screen and (min-width: $min) {\n      @content;\n    }\n  } @else {\n    @error \"Invalid device: #{$device}\";\n  }\n}\n\n///\n/// A maximum media query device breakpoint\n///\n@mixin break-to-device($device) {\n  @if type-of($device) == string {\n    $device: $device,;\n  }\n  @if type-of($device) == list {\n    $breakpoint: break-select-device($device);\n    $max: list.nth($breakpoint, 2);\n\n    @media screen and (max-width: $max) {\n      @content;\n    }\n  } @else {\n    @error \"Invalid device: #{$device}\";\n  }\n}\n", "////\n/// Copyright (c) 2016-2022 Martin Donath \n///\n/// Permission is hereby granted, free of charge, to any person obtaining a\n/// copy of this software and associated documentation files (the \"Software\"),\n/// to deal in the Software without restriction, including without limitation\n/// the rights to use, copy, modify, merge, publish, distribute, sublicense,\n/// and/or sell copies of the Software, and to permit persons to whom the\n/// Software is furnished to do so, subject to the following conditions:\n///\n/// The above copyright notice and this permission notice shall be included in\n/// all copies or substantial portions of the Software.\n///\n/// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n/// FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL\n/// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n/// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n/// DEALINGS\n////\n\n// ----------------------------------------------------------------------------\n// Rules\n// ----------------------------------------------------------------------------\n\n// Banner for announcements and warnings\n.md-banner {\n  overflow: auto;\n  color: var(--md-footer-fg-color);\n  background-color: var(--md-footer-bg-color);\n\n  // [print]: Hide banner\n  @media print {\n    display: none;\n  }\n\n  // Banner with warning\n  &--warning {\n    color: var(--md-default-fg-color);\n    background: var(--md-typeset-mark-color);\n  }\n\n  // Banner wrapper\n  &__inner {\n    margin: px2rem(12px) auto;\n    padding: 0 px2rem(16px);\n    font-size: px2rem(14px);\n  }\n\n  // Banner button\n  &__button {\n    float: inline-end;\n    color: inherit;\n    cursor: pointer;\n    transition: opacity 250ms;\n\n    // Button on hover\n    &:hover {\n      opacity: 0.7;\n    }\n  }\n}\n", "////\n/// Copyright (c) 2016-2022 Martin Donath \n///\n/// Permission is hereby granted, free of charge, to any person obtaining a\n/// copy of this software and associated documentation files (the \"Software\"),\n/// to deal in the Software without restriction, including without limitation\n/// the rights to use, copy, modify, merge, publish, distribute, sublicense,\n/// and/or sell copies of the Software, and to permit persons to whom the\n/// Software is furnished to do so, subject to the following conditions:\n///\n/// The above copyright notice and this permission notice shall be included in\n/// all copies or substantial portions of the Software.\n///\n/// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n/// FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL\n/// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n/// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n/// DEALINGS\n////\n\n// ----------------------------------------------------------------------------\n// Rules: base grid and containers\n// ----------------------------------------------------------------------------\n\n// Stretch container to viewport and set base `font-size`\nhtml {\n  height: 100%;\n  overflow-x: hidden;\n  // Hack: normally, we would set the base `font-size` to `62.5%`, so we can\n  // base all calculations on `10px`, but Chromium and Chrome define a minimal\n  // `font-size` of `12px` if the system language is set to Chinese. For this\n  // reason we just double the `font-size` and set it to `20px`.\n  //\n  // See https://github.com/squidfunk/mkdocs-material/issues/911\n  font-size: 125%;\n\n  // [screen medium +]: Set base `font-size` to `11px`\n  @include break-from-device(screen medium) {\n    font-size: 137.5%;\n  }\n\n  // [screen large +]: Set base `font-size` to `12px`\n  @include break-from-device(screen large) {\n    font-size: 150%;\n  }\n}\n\n// Stretch body to container - flexbox is used, so the footer will always be\n// aligned to the bottom of the viewport\nbody {\n  position: relative;\n  display: flex;\n  flex-direction: column;\n  width: 100%;\n  min-height: 100%;\n  // Hack: reset `font-size` to `10px`, so the spacing for all inline elements\n  // is correct again. Otherwise the spacing would be based on `20px`.\n  font-size: px2rem(10px);\n  background-color: var(--md-default-bg-color);\n\n  // [print]: Omit flexbox layout due to a Firefox bug (https://mzl.la/39DgR3m)\n  @media print {\n    display: block;\n  }\n\n  // Body in locked state\n  &[data-md-scrolllock] {\n\n    // [tablet portrait -]: Omit scroll bubbling\n    @include break-to-device(tablet portrait) {\n      position: fixed;\n    }\n  }\n}\n\n// ----------------------------------------------------------------------------\n\n// Grid container - this class is applied to wrapper elements within the\n// header, content area and footer, and makes sure that their width is limited\n// to `1220px`, and they are rendered centered if the screen is larger.\n.md-grid {\n  max-width: px2rem(1220px);\n  margin-inline: auto;\n}\n\n// Main container\n.md-container {\n  display: flex;\n  flex-direction: column;\n  flex-grow: 1;\n\n  // [print]: Omit flexbox layout due to a Firefox bug (https://mzl.la/39DgR3m)\n  @media print {\n    display: block;\n  }\n}\n\n// Main area - stretch to remaining space of container\n.md-main {\n  flex-grow: 1;\n\n  // Main area wrapper\n  &__inner {\n    display: flex;\n    height: 100%;\n    margin-top: px2rem(24px + 6px);\n  }\n}\n\n// Add ellipsis in case of overflowing text\n.md-ellipsis {\n  overflow: hidden;\n  white-space: nowrap;\n  text-overflow: ellipsis;\n}\n\n// ----------------------------------------------------------------------------\n// Rules: navigational elements\n// ----------------------------------------------------------------------------\n\n// Toggle - this class is applied to checkbox elements, which are used to\n// implement the CSS-only drawer and navigation, as well as the search\n.md-toggle {\n  display: none;\n}\n\n// Option - this class is applied to radio elements, which are used to\n// implement the color palette toggle\n.md-option {\n  position: absolute;\n  width: 0;\n  height: 0;\n  opacity: 0;\n\n  // Option label for checked radio button\n  &:checked + label:not([hidden]) {\n    display: block;\n  }\n\n  // Show outline for keyboard devices\n  &.focus-visible + label {\n    outline-style: auto;\n    outline-color: var(--md-accent-fg-color);\n  }\n}\n\n// Skip link\n.md-skip {\n  position: fixed;\n  // Hack: if we don't set the negative `z-index`, the skip link will force the\n  // creation of new layers when code blocks are near the header on scrolling\n  z-index: -1;\n  margin: px2rem(10px);\n  padding: px2rem(6px) px2rem(10px);\n  color: var(--md-default-bg-color);\n  font-size: px2rem(12.8px);\n  background-color: var(--md-default-fg-color);\n  border-radius: px2rem(2px);\n  outline-color: var(--md-accent-fg-color);\n  transform: translateY(px2rem(8px));\n  opacity: 0;\n\n  // Show skip link on focus\n  &:focus {\n    z-index: 10;\n    transform: translateY(0);\n    opacity: 1;\n    transition:\n      transform 250ms cubic-bezier(0.4, 0, 0.2, 1),\n      opacity   175ms 75ms;\n  }\n}\n\n// ----------------------------------------------------------------------------\n// Rules: print styles\n// ----------------------------------------------------------------------------\n\n// Add margins to page\n@page {\n  margin: 25mm;\n}\n", "////\n/// Copyright (c) 2016-2022 Martin Donath \n///\n/// Permission is hereby granted, free of charge, to any person obtaining a\n/// copy of this software and associated documentation files (the \"Software\"),\n/// to deal in the Software without restriction, including without limitation\n/// the rights to use, copy, modify, merge, publish, distribute, sublicense,\n/// and/or sell copies of the Software, and to permit persons to whom the\n/// Software is furnished to do so, subject to the following conditions:\n///\n/// The above copyright notice and this permission notice shall be included in\n/// all copies or substantial portions of the Software.\n///\n/// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n/// FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL\n/// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n/// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n/// DEALINGS\n////\n\n// ----------------------------------------------------------------------------\n// Rules\n// ----------------------------------------------------------------------------\n\n// Clipboard button variables\n:root {\n  --md-clipboard-icon: svg-load(\"material/content-copy.svg\");\n}\n\n// ----------------------------------------------------------------------------\n\n// Clipboard button\n.md-clipboard {\n  position: absolute;\n  top: px2em(8px);\n  right: px2em(8px);\n  z-index: 1;\n  width: px2em(24px);\n  height: px2em(24px);\n  color: var(--md-default-fg-color--lightest);\n  border-radius: px2rem(2px);\n  outline-color: var(--md-accent-fg-color);\n  outline-offset: px2rem(2px);\n  cursor: pointer;\n  transition: color 250ms;\n\n  // [print]: Hide button\n  @media print {\n    display: none;\n  }\n\n  // Hide outline for pointer devices\n  &:not(.focus-visible) {\n    outline: none;\n    -webkit-tap-highlight-color: transparent;\n  }\n\n  // Darken color on code block hover\n  :hover > & {\n    color: var(--md-default-fg-color--light);\n  }\n\n  // Button on focus/hover\n  &:is(:focus, :hover) {\n    color: var(--md-accent-fg-color);\n  }\n\n  // Button icon - the width and height are defined in `em`, so the size is\n  // automatically adjusted for nested code blocks (e.g. in admonitions)\n  &::after {\n    display: block;\n    width: px2em(18px);\n    height: px2em(18px);\n    margin: 0 auto;\n    background-color: currentcolor;\n    mask-image: var(--md-clipboard-icon);\n    mask-position: center;\n    mask-repeat: no-repeat;\n    mask-size: contain;\n    content: \"\";\n  }\n\n  // Inline clipboard button\n  &--inline {\n    cursor: pointer;\n\n    // Code block\n    code {\n      transition:\n        color            250ms,\n        background-color 250ms;\n    }\n\n    // Code block on focus/hover\n    &:is(:focus, :hover) code {\n      color: var(--md-accent-fg-color);\n      background-color: var(--md-accent-fg-color--transparent);\n    }\n  }\n}\n", "////\n/// Copyright (c) 2016-2022 Martin Donath \n///\n/// Permission is hereby granted, free of charge, to any person obtaining a\n/// copy of this software and associated documentation files (the \"Software\"),\n/// to deal in the Software without restriction, including without limitation\n/// the rights to use, copy, modify, merge, publish, distribute, sublicense,\n/// and/or sell copies of the Software, and to permit persons to whom the\n/// Software is furnished to do so, subject to the following conditions:\n///\n/// The above copyright notice and this permission notice shall be included in\n/// all copies or substantial portions of the Software.\n///\n/// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n/// FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL\n/// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n/// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n/// DEALINGS\n////\n\n// ----------------------------------------------------------------------------\n// Keyframes\n// ----------------------------------------------------------------------------\n\n// Show consent\n@keyframes consent {\n  0% {\n    transform: translateY(100%);\n    opacity: 0;\n  }\n\n  100% {\n    transform: translateY(0);\n    opacity: 1;\n  }\n}\n\n// Show consent overlay\n@keyframes overlay {\n  0% {\n    opacity: 0;\n  }\n\n  100% {\n    opacity: 1;\n  }\n}\n\n// ----------------------------------------------------------------------------\n// Rules\n// ----------------------------------------------------------------------------\n\n// Consent\n.md-consent {\n\n  // Consent overlay\n  &__overlay {\n    position: fixed;\n    top: 0;\n    z-index: 5;\n    width: 100%;\n    height: 100%;\n    background-color: hsla(0, 0%, 0%, 0.54);\n    opacity: 1;\n    backdrop-filter: blur(px2rem(2px));\n    animation: overlay 250ms both;\n  }\n\n  // Consent wrapper\n  &__inner {\n    position: fixed;\n    bottom: 0;\n    z-index: 5;\n    width: 100%;\n    max-height: 100%;\n    padding: 0;\n    overflow: auto;\n    background-color: var(--md-default-bg-color);\n    border: 0;\n    border-radius: px2rem(2px);\n    box-shadow:\n      0 0           px2rem(4px) rgba(0, 0, 0, 0.1),\n      0 px2rem(4px) px2rem(8px) rgba(0, 0, 0, 0.2);\n    animation: consent 500ms cubic-bezier(0.1, 0.7, 0.1, 1) both;\n  }\n\n  // Consent form\n  &__form {\n    padding: px2rem(16px);\n  }\n\n  // Consent settings\n  &__settings {\n    display: none;\n    margin: 1em 0;\n\n    // Show settings\n    input:checked + & {\n      display: block;\n    }\n  }\n\n  // Consent controls\n  &__controls {\n    margin-bottom: px2rem(16px);\n\n    // Consent control button\n    .md-typeset & .md-button {\n      display: inline;\n\n      // [tablet +]: Align buttons horizontally\n      @include break-to-device(mobile) {\n        display: block;\n        width: 100%;\n        margin-top: px2rem(8px);\n        text-align: center;\n      }\n    }\n  }\n\n  // Ensure users realize that labels are clickab\u00f6e\n  label {\n    cursor: pointer;\n  }\n}\n", "////\n/// Copyright (c) 2016-2022 Martin Donath \n///\n/// Permission is hereby granted, free of charge, to any person obtaining a\n/// copy of this software and associated documentation files (the \"Software\"),\n/// to deal in the Software without restriction, including without limitation\n/// the rights to use, copy, modify, merge, publish, distribute, sublicense,\n/// and/or sell copies of the Software, and to permit persons to whom the\n/// Software is furnished to do so, subject to the following conditions:\n///\n/// The above copyright notice and this permission notice shall be included in\n/// all copies or substantial portions of the Software.\n///\n/// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n/// FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL\n/// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n/// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n/// DEALINGS\n////\n\n// ----------------------------------------------------------------------------\n// Rules\n// ----------------------------------------------------------------------------\n\n// Content area\n.md-content {\n  flex-grow: 1;\n  // Hack: we must use `min-width: 0`, so the content area is capped by the\n  // dimensions of its parent. Otherwise, long code blocks might lead to a\n  // wider content area which will overflow. See https://bit.ly/3bP3f8k\n  min-width: 0;\n\n  // Content wrapper\n  &__inner {\n    margin: 0 px2rem(16px) px2rem(24px);\n    padding-top: px2rem(12px);\n\n    // [screen +]: Adjust spacing between content area and sidebars\n    @include break-from-device(screen) {\n\n      // Sidebar with navigation is visible\n      .md-sidebar--primary:not([hidden]) ~ .md-content > & {\n        margin-inline-start: px2rem(24px);\n      }\n\n      // Sidebar with table of contents is visible\n      .md-sidebar--secondary:not([hidden]) ~ .md-content > & {\n        margin-inline-end: px2rem(24px);\n      }\n    }\n\n    // Hack: add pseudo element for spacing, as the overflow of the content\n    // container may not be hidden due to an imminent offset error on targets\n    &::before {\n      display: block;\n      height: px2rem(8px);\n      content: \"\";\n    }\n\n    // Adjust spacing on last child\n    > :last-child {\n      margin-bottom: 0;\n    }\n  }\n\n  // Button inside of the content area - these buttons are meant for actions on\n  // a document-level, i.e. linking to related source code files, printing etc.\n  &__button {\n    float: inline-end;\n    margin: px2rem(8px) 0;\n    margin-inline-start: px2rem(8px);\n    padding: 0;\n\n    // [print]: Hide buttons\n    @media print {\n      display: none;\n    }\n\n    // Adjust default link color for icons\n    .md-typeset & {\n      color: var(--md-default-fg-color--lighter);\n    }\n\n    // Align with body copy located next to icon\n    svg {\n      display: inline;\n      vertical-align: top;\n\n      // Adjust for right-to-left languages\n      [dir=\"rtl\"] & {\n        transform: scaleX(-1);\n      }\n    }\n  }\n}\n", "////\n/// Copyright (c) 2016-2022 Martin Donath \n///\n/// Permission is hereby granted, free of charge, to any person obtaining a\n/// copy of this software and associated documentation files (the \"Software\"),\n/// to deal in the Software without restriction, including without limitation\n/// the rights to use, copy, modify, merge, publish, distribute, sublicense,\n/// and/or sell copies of the Software, and to permit persons to whom the\n/// Software is furnished to do so, subject to the following conditions:\n///\n/// The above copyright notice and this permission notice shall be included in\n/// all copies or substantial portions of the Software.\n///\n/// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n/// FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL\n/// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n/// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n/// DEALINGS\n////\n\n// ----------------------------------------------------------------------------\n// Rules\n// ----------------------------------------------------------------------------\n\n// Dialog\n.md-dialog {\n  position: fixed;\n  inset-inline-end: px2rem(16px);\n  bottom: px2rem(16px);\n  z-index: 4;\n  min-width: px2rem(222px);\n  padding: px2rem(8px) px2rem(12px);\n  background-color: var(--md-default-fg-color);\n  border-radius: px2rem(2px);\n  box-shadow: var(--md-shadow-z3);\n  transform: translateY(100%);\n  opacity: 0;\n  transition:\n    transform 0ms   400ms,\n    opacity   400ms;\n  pointer-events: none;\n\n  // [print]: Hide dialog\n  @media print {\n    display: none;\n  }\n\n  // Active dialog\n  &--active {\n    transform: translateY(0);\n    opacity: 1;\n    transition:\n      transform 400ms cubic-bezier(0.075, 0.85, 0.175, 1),\n      opacity   400ms;\n    pointer-events: initial;\n  }\n\n  // Dialog wrapper\n  &__inner {\n    color: var(--md-default-bg-color);\n    font-size: px2rem(14px);\n  }\n}\n", "////\n/// Copyright (c) 2016-2022 Martin Donath \n///\n/// Permission is hereby granted, free of charge, to any person obtaining a\n/// copy of this software and associated documentation files (the \"Software\"),\n/// to deal in the Software without restriction, including without limitation\n/// the rights to use, copy, modify, merge, publish, distribute, sublicense,\n/// and/or sell copies of the Software, and to permit persons to whom the\n/// Software is furnished to do so, subject to the following conditions:\n///\n/// The above copyright notice and this permission notice shall be included in\n/// all copies or substantial portions of the Software.\n///\n/// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n/// FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL\n/// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n/// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n/// DEALINGS\n////\n\n// ----------------------------------------------------------------------------\n// Rules\n// ----------------------------------------------------------------------------\n\n// Was this page helpful?\n.md-feedback {\n  margin: 2em 0 1em;\n  text-align: center;\n\n  // Feedback fieldset\n  fieldset {\n    margin: 0;\n    padding: 0;\n    border: none;\n  }\n\n  // Feedback title\n  &__title {\n    margin: 1em auto;\n    font-weight: 700;\n  }\n\n  // Feedback wrapper\n  &__inner {\n    position: relative;\n  }\n\n  // Feedback list\n  &__list {\n    position: relative;\n    display: flex;\n    flex-wrap: wrap;\n    align-content: baseline;\n    justify-content: center;\n\n    // Feedback icon on hover\n    &:hover .md-icon:not(:disabled) {\n      color: var(--md-default-fg-color--lighter);\n    }\n\n    // Adjust height after submission\n    :disabled & {\n      min-height: px2rem(36px);\n    }\n  }\n\n  // Feedback icon\n  &__icon {\n    flex-shrink: 0;\n    margin: 0 px2rem(2px);\n    color: var(--md-default-fg-color--light);\n    cursor: pointer;\n    transition: color 125ms;\n\n    // Feedback icon on hover\n    &:not(:disabled).md-icon:hover {\n      color: var(--md-accent-fg-color);\n    }\n\n    // Feedback icon after submit\n    &:disabled {\n      color: var(--md-default-fg-color--lightest);\n      pointer-events: none;\n    }\n  }\n\n  // Feedback note\n  &__note {\n    position: relative;\n    transform: translateY(px2rem(8px));\n    opacity: 0;\n    transition:\n      transform 400ms cubic-bezier(0.1, 0.7, 0.1, 1),\n      opacity   150ms;\n\n    // Feedback note value\n    > * {\n      max-width: px2rem(320px);\n      margin: 0 auto;\n    }\n\n    // Show after submission\n    :disabled & {\n      transform: translateY(0);\n      opacity: 1;\n    }\n  }\n}\n", "////\n/// Copyright (c) 2016-2022 Martin Donath \n///\n/// Permission is hereby granted, free of charge, to any person obtaining a\n/// copy of this software and associated documentation files (the \"Software\"),\n/// to deal in the Software without restriction, including without limitation\n/// the rights to use, copy, modify, merge, publish, distribute, sublicense,\n/// and/or sell copies of the Software, and to permit persons to whom the\n/// Software is furnished to do so, subject to the following conditions:\n///\n/// The above copyright notice and this permission notice shall be included in\n/// all copies or substantial portions of the Software.\n///\n/// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n/// FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL\n/// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n/// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n/// DEALINGS\n////\n\n// ----------------------------------------------------------------------------\n// Rules\n// ----------------------------------------------------------------------------\n\n// Footer\n.md-footer {\n  color: var(--md-footer-fg-color);\n  background-color: var(--md-footer-bg-color);\n\n  // [print]: Hide footer\n  @media print {\n    display: none;\n  }\n\n  // Footer wrapper\n  &__inner {\n    justify-content: space-between;\n    padding: px2rem(4px);\n    overflow: auto;\n\n    // Footer is visible\n    &:not([hidden]) {\n      display: flex;\n    }\n  }\n\n  // Footer link to previous and next page\n  &__link {\n    display: flex;\n    // Hack: some browsers induce ellipsis on flex children that are set to\n    // `overflow: hidden` and `text-overflow: ellipsis`. Enforcing growth by\n    // a tiny factor seems to get rid of the ellipsis and renders the text as\n    // it should - see https://bit.ly/2ZUCXQ8\n    flex-grow: 0.01;\n    padding-top: px2rem(28px);\n    padding-bottom: px2rem(8px);\n    overflow: hidden;\n    outline-color: var(--md-accent-fg-color);\n    transition: opacity 250ms;\n\n    // Footer link on focus/hover\n    &:is(:focus, :hover) {\n      opacity: 0.7;\n    }\n\n    // Adjust for right-to-left languages\n    [dir=\"rtl\"] & svg {\n      transform: scaleX(-1);\n    }\n\n    // Footer link to previous page\n    &--prev {\n\n      // [mobile -]: Adjust width to 25/75 and hide title\n      @include break-to-device(mobile) {\n\n        // Hide footer title\n        .md-footer__title {\n          display: none;\n        }\n      }\n    }\n\n    // Footer link to next page\n    &--next {\n      margin-inline-start: auto;\n      text-align: right;\n\n      // Adjust for right-to-left languages\n      [dir=\"rtl\"] & {\n        text-align: left;\n      }\n    }\n  }\n\n  // Footer title\n  &__title {\n    position: relative;\n    flex-grow: 1;\n    max-width: calc(100% - #{px2rem(48px)});\n    padding: 0 px2rem(20px);\n    font-size: px2rem(18px);\n    line-height: px2rem(48px);\n    white-space: nowrap;\n  }\n\n  // Footer link button\n  &__button {\n    margin: px2rem(4px);\n    padding: px2rem(8px);\n  }\n\n  // Footer link direction (i.e. prev and next)\n  &__direction {\n    position: absolute;\n    inset-inline: 0;\n    margin-top: px2rem(-20px);\n    padding: 0 px2rem(20px);\n    font-size: px2rem(12.8px);\n    opacity: 0.7;\n  }\n}\n\n// Footer metadata\n.md-footer-meta {\n  background-color: var(--md-footer-bg-color--dark);\n\n  // Footer metadata wrapper\n  &__inner {\n    display: flex;\n    flex-wrap: wrap;\n    justify-content: space-between;\n    padding: px2rem(4px);\n  }\n\n  // Lighten color for non-hovered text links\n  html &.md-typeset a {\n    color: var(--md-footer-fg-color--light);\n\n    // Text link on focus/hover\n    &:is(:focus, :hover) {\n      color: var(--md-footer-fg-color);\n    }\n  }\n}\n\n// ----------------------------------------------------------------------------\n\n// Copyright and theme information\n.md-copyright {\n  width: 100%;\n  margin: auto px2rem(12px);\n  padding: px2rem(8px) 0;\n  color: var(--md-footer-fg-color--lighter);\n  font-size: px2rem(12.8px);\n\n  // [tablet portrait +]: Show copyright and social links in one line\n  @include break-from-device(tablet portrait) {\n    width: auto;\n  }\n\n  // Footer copyright highlight - this is the upper part of the copyright and\n  // theme information, which will include a darker color than the theme link\n  &__highlight {\n    color: var(--md-footer-fg-color--light);\n  }\n}\n\n// ----------------------------------------------------------------------------\n\n// Social links\n.md-social {\n  margin: 0 px2rem(8px);\n  padding: px2rem(4px) 0 px2rem(12px);\n\n  // [tablet portrait +]: Show copyright and social links in one line\n  @include break-from-device(tablet portrait) {\n    padding: px2rem(12px) 0;\n  }\n\n  // Footer social link\n  &__link {\n    display: inline-block;\n    width: px2rem(32px);\n    height: px2rem(32px);\n    text-align: center;\n\n    // Adjust line-height to match height for correct alignment\n    &::before {\n      line-height: 1.9;\n    }\n\n    // Fill icon with current color\n    svg {\n      max-height: px2rem(16px);\n      vertical-align: -25%;\n      fill: currentcolor;\n    }\n  }\n}\n", "////\n/// Copyright (c) 2016-2022 Martin Donath \n///\n/// Permission is hereby granted, free of charge, to any person obtaining a\n/// copy of this software and associated documentation files (the \"Software\"),\n/// to deal in the Software without restriction, including without limitation\n/// the rights to use, copy, modify, merge, publish, distribute, sublicense,\n/// and/or sell copies of the Software, and to permit persons to whom the\n/// Software is furnished to do so, subject to the following conditions:\n///\n/// The above copyright notice and this permission notice shall be included in\n/// all copies or substantial portions of the Software.\n///\n/// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n/// FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL\n/// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n/// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n/// DEALINGS\n////\n\n// ----------------------------------------------------------------------------\n// Rules\n// ----------------------------------------------------------------------------\n\n// Scoped in typesetted content to match specificity of regular content\n.md-typeset {\n\n  // Form button\n  .md-button {\n    display: inline-block;\n    padding: px2em(10px) px2em(32px);\n    color: var(--md-primary-fg-color);\n    font-weight: 700;\n    border: px2rem(2px) solid currentcolor;\n    border-radius: px2rem(2px);\n    cursor: pointer;\n    transition:\n      color            125ms,\n      background-color 125ms,\n      border-color     125ms;\n\n    // Primary button\n    &--primary {\n      color: var(--md-primary-bg-color);\n      background-color: var(--md-primary-fg-color);\n      border-color: var(--md-primary-fg-color);\n    }\n\n    // Button on focus/hover\n    &:is(:focus, :hover) {\n      color: var(--md-accent-bg-color);\n      background-color: var(--md-accent-fg-color);\n      border-color: var(--md-accent-fg-color);\n    }\n  }\n\n  // Form input\n  .md-input {\n    height: px2rem(36px);\n    padding: 0 px2rem(12px);\n    font-size: px2rem(16px);\n    border-bottom: px2rem(2px) solid var(--md-default-fg-color--lighter);\n    border-start-start-radius: px2rem(2px);\n    border-start-end-radius: px2rem(2px);\n    box-shadow: var(--md-shadow-z1);\n    transition:\n      border     250ms,\n      box-shadow 250ms;\n\n    // Input on focus/hover\n    &:is(:focus, :hover) {\n      border-bottom-color: var(--md-accent-fg-color);\n      box-shadow: var(--md-shadow-z2);\n    }\n\n    // Stretch to full width\n    &--stretch {\n      width: 100%;\n    }\n  }\n}\n", "////\n/// Copyright (c) 2016-2022 Martin Donath \n///\n/// Permission is hereby granted, free of charge, to any person obtaining a\n/// copy of this software and associated documentation files (the \"Software\"),\n/// to deal in the Software without restriction, including without limitation\n/// the rights to use, copy, modify, merge, publish, distribute, sublicense,\n/// and/or sell copies of the Software, and to permit persons to whom the\n/// Software is furnished to do so, subject to the following conditions:\n///\n/// The above copyright notice and this permission notice shall be included in\n/// all copies or substantial portions of the Software.\n///\n/// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n/// FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL\n/// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n/// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n/// DEALINGS\n////\n\n// ----------------------------------------------------------------------------\n// Rules\n// ----------------------------------------------------------------------------\n\n// Header - by default, the header will be sticky and stay always on top of the\n// viewport. If this behavior is not desired, just set `position: static`.\n.md-header {\n  position: sticky;\n  top: 0;\n  inset-inline: 0;\n  z-index: 4;\n  display: block;\n  color: var(--md-primary-bg-color);\n  background-color: var(--md-primary-fg-color);\n  // Hack: reduce jitter by adding a transparent box shadow of the same size\n  // so the size of the layer doesn't change during animation\n  box-shadow:\n    0 0           px2rem(4px) rgba(0, 0, 0, 0),\n    0 px2rem(4px) px2rem(8px) rgba(0, 0, 0, 0);\n\n  // [print]: Hide header\n  @media print {\n    display: none;\n  }\n\n  // Header is hidden\n  &[hidden] {\n    transform: translateY(-100%);\n    transition:\n      transform 250ms cubic-bezier(0.8, 0, 0.6, 1),\n      box-shadow 250ms;\n  }\n\n  // Header in shadow state, i.e. shadow is visible\n  &--shadow {\n    box-shadow:\n      0 0           px2rem(4px) rgba(0, 0, 0, 0.1),\n      0 px2rem(4px) px2rem(8px) rgba(0, 0, 0, 0.2);\n    transition:\n      transform  250ms cubic-bezier(0.1, 0.7, 0.1, 1),\n      box-shadow 250ms;\n  }\n\n  // Header wrapper\n  &__inner {\n    display: flex;\n    align-items: center;\n    padding: 0 px2rem(4px);\n  }\n\n  // Header button\n  &__button {\n    position: relative;\n    z-index: 1;\n    margin: px2rem(4px);\n    padding: px2rem(8px);\n    color: currentcolor;\n    vertical-align: middle;\n    outline-color: var(--md-accent-fg-color);\n    cursor: pointer;\n    transition: opacity 250ms;\n\n    // Button on hover\n    &:hover {\n      opacity: 0.7;\n    }\n\n    // Header button is visible\n    &:not([hidden]) {\n      display: inline-block;\n    }\n\n    // Hide outline for pointer devices\n    &:not(.focus-visible) {\n      outline: none;\n      -webkit-tap-highlight-color: transparent;\n    }\n\n    // Button with logo, pointing to `config.site_url`\n    &.md-logo {\n      margin: px2rem(4px);\n      padding: px2rem(8px);\n\n      // [tablet -]: Hide button\n      @include break-to-device(tablet) {\n        display: none;\n      }\n\n      // Image or icon\n      :is(img, svg) {\n        display: block;\n        width: auto;\n        height: px2rem(24px);\n        fill: currentcolor;\n      }\n    }\n\n    // Button for search\n    &[for=\"__search\"] {\n\n      // [tablet landscape +]: Hide button\n      @include break-from-device(tablet landscape) {\n        display: none;\n      }\n\n      // [no-js]: Hide button\n      .no-js & {\n        display: none;\n      }\n\n      // Adjust for right-to-left languages\n      [dir=\"rtl\"] & svg {\n        transform: scaleX(-1);\n      }\n    }\n\n    // Button for drawer\n    &[for=\"__drawer\"] {\n\n      // [screen +]: Hide button\n      @include break-from-device(screen) {\n        display: none;\n      }\n    }\n  }\n\n  // Header topic\n  &__topic {\n    position: absolute;\n    display: flex;\n    max-width: 100%;\n    white-space: nowrap;\n    transition:\n      transform 400ms cubic-bezier(0.1, 0.7, 0.1, 1),\n      opacity   150ms;\n\n    // Second header topic - title of the current page\n    & + & {\n      z-index: -1;\n      transform: translateX(px2rem(25px));\n      opacity: 0;\n      transition:\n        transform 400ms cubic-bezier(1, 0.7, 0.1, 0.1),\n        opacity   150ms;\n      pointer-events: none;\n\n      // Adjust for right-to-left languages\n      [dir=\"rtl\"] & {\n        transform: translateX(px2rem(-25px));\n      }\n    }\n\n    // Adjust font weight of site title\n    &:first-child {\n      font-weight: 700;\n    }\n  }\n\n  // Header title\n  &__title {\n    flex-grow: 1;\n    height: px2rem(48px);\n    margin-inline-end: px2rem(8px);\n    margin-inline-start: px2rem(20px);\n    font-size: px2rem(18px);\n    line-height: px2rem(48px);\n\n    // Header title in active state, i.e. page title is visible\n    &--active .md-header__topic {\n      z-index: -1;\n      transform: translateX(px2rem(-25px));\n      opacity: 0;\n      transition:\n        transform 400ms cubic-bezier(1, 0.7, 0.1, 0.1),\n        opacity   150ms;\n      pointer-events: none;\n\n      // Adjust for right-to-left languages\n      [dir=\"rtl\"] & {\n        transform: translateX(px2rem(25px));\n      }\n\n      // Second header topic - title of the current page\n      + .md-header__topic {\n        z-index: 0;\n        transform: translateX(0);\n        opacity: 1;\n        transition:\n          transform 400ms cubic-bezier(0.1, 0.7, 0.1, 1),\n          opacity   150ms;\n        pointer-events: initial;\n      }\n    }\n\n    // Add ellipsis in case of overflowing text\n    > .md-header__ellipsis {\n      position: relative;\n      width: 100%;\n      height: 100%;\n    }\n  }\n\n  // Header option\n  &__option {\n    display: flex;\n    flex-shrink: 0;\n    max-width: 100%;\n    white-space: nowrap;\n    transition:\n      max-width  0ms 250ms,\n      opacity  250ms 250ms;\n\n    // Hide toggle when search is active\n    [data-md-toggle=\"search\"]:checked ~ .md-header & {\n      max-width: 0;\n      opacity: 0;\n      transition:\n        max-width 0ms,\n        opacity   0ms;\n    }\n  }\n\n  // Repository information container\n  &__source {\n    display: none;\n\n    // [tablet landscape +]: Show repository information\n    @include break-from-device(tablet landscape) {\n      display: block;\n      width: px2rem(234px);\n      max-width: px2rem(234px);\n      margin-inline-start: px2rem(20px);\n    }\n\n    // [screen +]: Adjust spacing of search bar\n    @include break-from-device(screen) {\n      margin-inline-start: px2rem(28px);\n    }\n  }\n}\n", "////\n/// Copyright (c) 2016-2020 Martin Donath \n///\n/// Permission is hereby granted, free of charge, to any person obtaining a\n/// copy of this software and associated documentation files (the \"Software\"),\n/// to deal in the Software without restriction, including without limitation\n/// the rights to use, copy, modify, merge, publish, distribute, sublicense,\n/// and/or sell copies of the Software, and to permit persons to whom the\n/// Software is furnished to do so, subject to the following conditions:\n///\n/// The above copyright notice and this permission notice shall be included in\n/// all copies or substantial portions of the Software.\n///\n/// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n/// FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL\n/// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n/// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n/// DEALINGS\n////\n\n// ----------------------------------------------------------------------------\n// Rules\n// ----------------------------------------------------------------------------\n\n// Hero teaser\n.md-hero {\n  overflow: hidden;\n  color: var(--md-primary-bg-color);\n  font-size: px2rem(20px);\n  background-color: var(--md-primary-fg-color);\n  transition: background 250ms;\n\n  // Inner wrapper\n  &__inner {\n    margin-top: px2rem(20px);\n    padding: px2rem(16px) px2rem(16px) px2rem(8px);\n    transition:\n      transform 400ms cubic-bezier(0.1, 0.7, 0.1, 1),\n      opacity   250ms;\n    transition-delay: 100ms;\n\n    // [tablet -]: Compensate for missing tabs\n    @include break-to-device(tablet) {\n      margin-top: px2rem(48px);\n      margin-bottom: px2rem(24px);\n    }\n\n    // Fade-out tabs background upon scrolling\n    [data-md-state=\"hidden\"] & {\n      transform: translateY(px2rem(12.5px));\n      opacity: 0;\n      transition:\n        transform   0ms 400ms,\n        opacity   100ms   0ms;\n      pointer-events: none;\n    }\n\n    // Adjust bottom spacing if there are no tabs\n    .md-hero--expand & {\n      margin-bottom: px2rem(24px);\n    }\n  }\n}\n", "////\n/// Copyright (c) 2016-2022 Martin Donath \n///\n/// Permission is hereby granted, free of charge, to any person obtaining a\n/// copy of this software and associated documentation files (the \"Software\"),\n/// to deal in the Software without restriction, including without limitation\n/// the rights to use, copy, modify, merge, publish, distribute, sublicense,\n/// and/or sell copies of the Software, and to permit persons to whom the\n/// Software is furnished to do so, subject to the following conditions:\n///\n/// The above copyright notice and this permission notice shall be included in\n/// all copies or substantial portions of the Software.\n///\n/// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n/// FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL\n/// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n/// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n/// DEALINGS\n////\n\n// ----------------------------------------------------------------------------\n// Rules\n// ----------------------------------------------------------------------------\n\n// Navigation variables\n:root {\n  --md-nav-icon--prev: svg-load(\"material/arrow-left.svg\");\n  --md-nav-icon--next: svg-load(\"material/chevron-right.svg\");\n  --md-toc-icon: svg-load(\"material/table-of-contents.svg\");\n}\n\n// ----------------------------------------------------------------------------\n\n// Navigation\n.md-nav {\n  font-size: px2rem(14px);\n  line-height: 1.3;\n\n  // Navigation title\n  &__title {\n    // sphinx-immaterial: display object description icon as a\n    // separate column, don't allow title text to wrap underneath it.\n    display: flex;\n    // sphinx-immaterial: ensure icons are centered vertically with text.\n    align-items: center;\n    padding: 0 px2rem(12px);\n    overflow: hidden;\n    font-weight: 700;\n    text-overflow: ellipsis;\n\n    // Navigaton button\n    .md-nav__button {\n      display: none;\n\n      // Stretch images based on height, as it's the smaller dimension\n      img {\n        width: auto;\n        height: 100%;\n      }\n\n      // Button with logo, pointing to `config.site_url`\n      &.md-logo {\n\n        // Image or icon\n        :is(img, svg) {\n          display: block;\n          width: auto;\n          max-width: 100%;\n          height: px2rem(48px);\n          object-fit: contain;\n          fill: currentcolor;\n        }\n      }\n    }\n  }\n\n  // Navigation list\n  &__list {\n    margin: 0;\n    padding: 0;\n    list-style: none;\n  }\n\n  // Navigation item\n  &__item {\n    padding: 0 px2rem(12px);\n\n    // Navigation item on level 2\n    & & {\n      padding-inline-end: 0;\n    }\n  }\n\n  // Navigation link\n  &__link {\n    display: flex;\n    align-items: center;\n\n    $margin-height: 0.625em;\n\n    margin-top: #{$margin-height};\n    cursor: pointer;\n    transition: color 125ms;\n    scroll-snap-align: start;\n\n    // sphinx-immaterial: used for toc.sticky feature to create a gap between\n    // sticky header and scrolling content\n    &.md-nav__sticky {\n      box-shadow:\n        0 -#{$margin-height} var(--md-default-bg-color),\n        0 #{$margin-height} var(--md-default-bg-color);\n    }\n\n    // Navigation link that was passed\n    &--passed {\n      color: var(--md-default-fg-color--light);\n    }\n\n    // Active link\n    .md-nav__item &--active {\n      color: var(--md-typeset-a-color);\n    }\n\n    // sphinx-immaterial: show nav links corresponding to current viewport\n    &--in-viewport {\n      position: relative;\n\n      &::before {\n        position: absolute;\n        top: 0;\n        right: calc(100% + px2rem(6px));\n        bottom: 0;\n        width: px2rem(1px);\n        height: 100%;\n        background-color: var(--md-primary-fg-color);\n        content: \"\";\n      }\n    }\n\n    // Stretch section index link to full width\n    .md-nav__item &--index [href] {\n      width: 100%;\n    }\n\n    // Navigation link on focus/hover\n    &:is(:focus, :hover) {\n      color: var(--md-accent-fg-color);\n    }\n\n    // Show outline for keyboard devices\n    &.focus-visible {\n      outline-color: var(--md-accent-fg-color);\n      outline-offset: px2rem(4px);\n    }\n\n    // Navigation link for table of contents\n    .md-nav--primary &[for=\"__toc\"] {\n      display: none;\n\n      // Table of contents icon\n      .md-icon::after {\n        display: block;\n        width: 100%;\n        height: 100%;\n        mask-image: var(--md-toc-icon);\n        background-color: currentcolor;\n      }\n\n      // Hide table of contents\n      ~ .md-nav {\n        display: none;\n      }\n    }\n\n    // Navigation link children (for section indexes)\n    > * {\n      display: flex;\n      cursor: pointer;\n    }\n  }\n\n  // sphinx-immaterial: used when `toc.sticky` is enabled\n  &__sticky {\n    position: sticky;\n    top: var(--md-nav__header-height, 0);\n    z-index: var(--md-nav__sticky-zindex);\n    background-color: var(--md-default-bg-color);\n  }\n\n  .md-ellipsis {\n    // sphinx-immaterial: don't inherit display:flex (flex-grow still applies)\n    display: block;\n    // sphinx-immaterial: Ensures the md-nav__icon element that comes after is\n    // right-aligned.\n    flex-grow: 1;\n    // sphinx-immaterial: allow wrapping of nav item titles\n    white-space: normal;\n  }\n\n  // Navigation icon\n  &__icon {\n    flex-shrink: 0;\n  }\n\n  // Repository information container\n  &__source {\n    display: none;\n  }\n\n  // [tablet -]: Layered navigation\n  @include break-to-device(tablet) {\n\n    // Primary and nested navigation\n    &--primary,\n    &--primary & {\n      position: absolute;\n      top: 0;\n      inset-inline: 0;\n      z-index: 1;\n      display: flex;\n      flex-direction: column;\n      height: 100%;\n      background-color: var(--md-default-bg-color);\n    }\n\n    // Primary navigation\n    &--primary {\n\n      // sphinx-immaterial: disable `toc.sticky` behavior for layered navigation\n      .md-nav__sticky {\n        position: static;\n        z-index: auto;\n        background-color: transparent;\n        box-shadow: none;\n      }\n\n      // Navigation title and item\n      :is(.md-nav__title, .md-nav__item) {\n        font-size: px2rem(16px);\n        line-height: 1.5;\n      }\n\n      // Navigation title\n      .md-nav__title {\n        position: relative;\n        // sphinx-immaterial: word wrapping can require larger height\n        min-height: px2rem(112px);\n        padding: px2rem(60px) px2rem(16px) px2rem(4px);\n        color: var(--md-default-fg-color--light);\n        line-height: px2rem(48px);\n        white-space: nowrap;\n        background-color: var(--md-default-fg-color--lightest);\n        cursor: pointer;\n\n        // Navigation icon\n        .md-nav__icon {\n          position: absolute;\n          top: px2rem(8px);\n          inset-inline-start: px2rem(8px);\n          display: block;\n          width: px2rem(24px);\n          height: px2rem(24px);\n          margin: px2rem(4px);\n\n          // Navigation icon in link to previous level\n          &::after {\n            display: block;\n            width: 100%;\n            height: 100%;\n            background-color: currentcolor;\n            mask-image: var(--md-nav-icon--prev);\n            mask-position: center;\n            mask-repeat: no-repeat;\n            mask-size: contain;\n            content: \"\";\n          }\n        }\n\n        // Navigation list\n        ~ .md-nav__list {\n          overflow-y: auto;\n          background-color: var(--md-default-bg-color);\n          box-shadow:\n            0 px2rem(1px) 0 var(--md-default-fg-color--lightest) inset;\n          scroll-snap-type: y mandatory;\n          touch-action: pan-y;\n\n          // Omit border on first child\n          > :first-child {\n            border-top: 0;\n          }\n        }\n\n        // Top-level navigation title\n        &[for=\"__drawer\"] {\n          color: var(--md-primary-bg-color);\n          font-weight: 700;\n          background-color: var(--md-primary-fg-color);\n        }\n\n        // Button with logo, pointing to `config.site_url`\n        .md-logo {\n          position: absolute;\n          top: px2rem(4px);\n          inset-inline: px2rem(4px);\n          display: block;\n          margin: px2rem(4px);\n          padding: px2rem(8px);\n        }\n      }\n\n      // Navigation list\n      .md-nav__list {\n        flex: 1;\n      }\n\n      // Navigation item\n      .md-nav__item {\n        padding: 0;\n        border-top: px2rem(1px) solid var(--md-default-fg-color--lightest);\n\n        // Navigation link in active navigation\n        &--active > .md-nav__link {\n          color: var(--md-typeset-a-color);\n\n          // Navigation link on focus/hover\n          &:is(:focus, :hover) {\n            color: var(--md-accent-fg-color);\n          }\n        }\n      }\n\n      // Navigation link\n      .md-nav__link {\n        margin-top: 0;\n        padding: px2rem(12px) px2rem(16px);\n\n        // Navigation icon\n        .md-nav__icon {\n          width: px2rem(24px);\n          height: px2rem(24px);\n          margin-inline-end: px2rem(-4px);\n          font-size: px2rem(24px);\n\n          // Navigation icon in link to next level\n          &::after {\n            display: block;\n            width: 100%;\n            height: 100%;\n            background-color: currentcolor;\n            mask-image: var(--md-nav-icon--next);\n            mask-position: center;\n            mask-repeat: no-repeat;\n            mask-size: contain;\n            content: \"\";\n          }\n        }\n      }\n\n      // Flip icon vertically\n      .md-nav__icon {\n\n        // Adjust for right-to-left languages\n        [dir=\"rtl\"] &::after {\n          transform: scale(-1);\n        }\n      }\n\n      // Table of contents contained in primary navigation\n      .md-nav--secondary {\n\n        // Navigation on level 2-6\n        .md-nav {\n          position: static;\n          background-color: transparent;\n\n          // Navigation link on level 3\n          .md-nav__link {\n            padding-inline-start: px2rem(28px);\n          }\n\n          // Navigation link on level 4\n          .md-nav .md-nav__link {\n            padding-inline-start: px2rem(40px);\n          }\n\n          // Navigation link on level 5\n          .md-nav .md-nav .md-nav__link {\n            padding-inline-start: px2rem(52px);\n          }\n\n          // Navigation link on level 6\n          .md-nav .md-nav .md-nav .md-nav__link {\n            padding-inline-start: px2rem(64px);\n          }\n        }\n      }\n    }\n\n    // Table of contents\n    &--secondary {\n      background-color: transparent;\n    }\n\n    // Toggle for nested navigation\n    &__toggle ~ & {\n      display: flex;\n      transform: translateX(100%);\n      opacity: 0;\n      transition:\n        transform 250ms cubic-bezier(0.8, 0, 0.6, 1),\n        opacity   125ms 50ms;\n\n      // Adjust for right-to-left languages\n      [dir=\"rtl\"] & {\n        transform: translateX(-100%);\n      }\n    }\n\n    // Show nested navigation when toggle is active\n    &__toggle:checked ~ & {\n      transform: translateX(0);\n      opacity: 1;\n      transition:\n        transform 250ms cubic-bezier(0.4, 0, 0.2, 1),\n        opacity   125ms 125ms;\n\n      // Navigation list\n      > .md-nav__list {\n        // Hack: promote to own layer to reduce jitter\n        backface-visibility: hidden;\n      }\n    }\n\n    // sphinx-immaterial: ensure long titles in mobile/tablet layout\n    // are truncated with an ellipsis rather than wrapping.\n    .md-nav__title .md-ellipsis {\n      white-space: nowrap;\n\n      // In Chrome,  elements override `white-space: nowrap`, but\n      // setting them to `display: none` prevents that.\n      wbr {\n        display: none;\n      }\n    }\n  }\n\n  // [tablet portrait -]: Layered navigation with table of contents\n  @include break-to-device(tablet portrait) {\n\n    // sphinx-immaterial: hide nested nav items of current page, since\n    // they are redundant with integrated toc.\n    &__current-nested {\n      display: none;\n    }\n\n    // Show link to table of contents\n    &--primary &__link[for=\"__toc\"] {\n      display: flex;\n\n      // Show table of contents icon\n      .md-icon::after {\n        content: \"\";\n      }\n\n      // Hide navigation link to current page\n      + .md-nav__link {\n        display: none;\n      }\n\n      // Show table of contents\n      ~ .md-nav {\n        display: flex;\n      }\n    }\n\n    // Repository information container\n    &__source {\n      display: block;\n      padding: 0 px2rem(4px);\n      color: var(--md-primary-bg-color);\n      background-color: var(--md-primary-fg-color--dark);\n    }\n  }\n\n  // [tablet landscape]: Layered navigation with table of contents\n  @include break-at-device(tablet landscape) {\n\n    // Show link to integrated table of contents\n    &--integrated &__link[for=\"__toc\"] {\n      display: flex;\n\n      // Show table of contents icon\n      .md-icon::after {\n        content: \"\";\n      }\n\n      // Hide navigation link to current page\n      + .md-nav__link {\n        display: none;\n      }\n\n      // Show table of contents\n      ~ .md-nav {\n        display: flex;\n      }\n    }\n  }\n\n  // [tablet landscape +]: Tree-like table of contents\n  @include break-from-device(tablet landscape) {\n\n    // sphinx-immaterial: hide integreated toc, since it is redundant with any nested items.\n    &__current-toc {\n      display: none;\n    }\n\n    // Navigation title\n    &--secondary &__title {\n      position: sticky;\n      top: 0;\n      // Hack: because of the hack that we need to make .md-ellipsis work in\n      // Safari, we need to set `z-index` here as - see https://bit.ly/3s5M2jm\n      z-index: 1;\n      background: var(--md-default-bg-color);\n      box-shadow: 0 0 px2rem(8px) px2rem(8px) var(--md-default-bg-color);\n\n      // Adjust snapping behavior\n      &[for=\"__toc\"] {\n        scroll-snap-align: start;\n      }\n\n      // Hide navigation icon\n      .md-nav__icon {\n        display: none;\n      }\n    }\n  }\n\n  // [screen +]: Tree-like navigation\n  @include break-from-device(screen) {\n    transition: max-height 250ms cubic-bezier(0.86, 0, 0.07, 1);\n\n    // Navigation title\n    &--primary &__title {\n      position: sticky;\n      top: 0;\n      // Hack: because of the hack that we need to make .md-ellipsis work in\n      // Safari, we need to set `z-index` here as - see https://bit.ly/3s5M2jm\n      z-index: 1;\n      background: var(--md-default-bg-color);\n      box-shadow: 0 0 px2rem(8px) px2rem(8px) var(--md-default-bg-color);\n\n      // Adjust snapping behavior\n      &[for=\"__drawer\"] {\n        scroll-snap-align: start;\n      }\n\n      // Hide navigation icon\n      .md-nav__icon {\n        display: none;\n      }\n    }\n\n    // Hide toggle for nested navigation\n    &__toggle ~ & {\n      display: none;\n    }\n\n    // Show nested navigation when toggle is active or indeterminate\n    &__toggle:is(:checked, :indeterminate) ~ & {\n      display: block;\n    }\n\n    // Hide navigation title in nested navigation\n    &__item--nested > & > &__title {\n      display: none;\n    }\n\n    // Navigation section\n    &__item--section {\n      display: block;\n      margin: 1.25em 0;\n\n      // Adjust spacing on last child\n      &:last-child {\n        margin-bottom: 0;\n      }\n\n      // Show navigation link as title\n      > .md-nav__link {\n        font-weight: 700;\n        pointer-events: none;\n\n        // Make navigation link clickable\n        &--index [href] {\n          pointer-events: initial;\n        }\n\n        // Hide naviation icon\n        .md-nav__icon {\n          display: none;\n        }\n      }\n\n      // Navigation\n      > .md-nav {\n        display: block;\n\n        // Adjust spacing on next level item\n        > .md-nav__list > .md-nav__item {\n          padding: 0;\n        }\n      }\n    }\n\n    // Navigation icon\n    &__icon {\n      width: px2rem(18px);\n      height: px2rem(18px);\n      border-radius: 100%;\n      transition:\n        background-color 250ms,\n        transform        250ms;\n\n      // Adjust for right-to-left languages\n      [dir=\"rtl\"] & {\n        transform: rotate(180deg);\n      }\n\n      // Navigation icon on hover\n      &:hover {\n        background-color: var(--md-accent-fg-color--transparent);\n      }\n\n      // Navigation icon content\n      &::after {\n        display: inline-block;\n        width: 100%;\n        height: 100%;\n        vertical-align: px2rem(-2px);\n        background-color: currentcolor;\n        mask-image: var(--md-nav-icon--next);\n        mask-position: center;\n        mask-repeat: no-repeat;\n        mask-size: contain;\n        content: \"\";\n      }\n\n      // Navigation icon - rotate icon when toggle is active or indeterminate\n      .md-nav__item--nested .md-nav__toggle:checked ~ .md-nav__link &,\n      .md-nav__item--nested .md-nav__toggle:indeterminate ~ .md-nav__link & {\n        transform: rotate(90deg);\n      }\n    }\n\n    // Modifier for when navigation tabs are rendered\n    &--lifted {\n\n      // Hide nested level 0 navigation items and site title\n      > .md-nav__list > .md-nav__item--nested,\n      > .md-nav__title {\n        display: none;\n      }\n\n      // Hide level 0 navigation items\n      > .md-nav__list > .md-nav__item {\n        display: none;\n\n        // Active parent navigation item\n        &--active {\n          display: block;\n          padding: 0;\n\n          // Show navigation link as title\n          > .md-nav__link {\n            position: sticky;\n            top: 0;\n            z-index: var(--md-nav__sticky-zindex, 1);\n            margin-top: 0;\n            padding: 0 px2rem(12px);\n            font-weight: 700;\n            background: var(--md-default-bg-color);\n            box-shadow: 0 0 px2rem(8px) px2rem(8px) var(--md-default-bg-color);\n\n            // Non-index section should not be clickable\n            &:not(.md-nav__link--index) {\n              pointer-events: none;\n            }\n\n            // Hide naviation icon\n            .md-nav__icon {\n              display: none;\n            }\n          }\n        }\n      }\n\n      // Hack: Always show active navigation tab on breakpoint screen, despite\n      // of checkbox being checked or not. Fixes #1655.\n      .md-nav[data-md-level=\"1\"] {\n        display: block;\n\n        // Adjust spacing for level 1 navigation items\n        > .md-nav__list > .md-nav__item {\n          padding-inline-end: px2rem(12px);\n        }\n      }\n    }\n\n    // Modifier for when table of contents is rendered in primary navigation\n    &--integrated > .md-nav__list > .md-nav__item--active {\n\n      // Add spacing to container for non-nested navigation items\n      &:not(.md-nav__item--nested) {\n        padding: 0 px2rem(12px);\n\n        // Remove padding as it's given by container\n        > .md-nav__link {\n          padding: 0;\n        }\n      }\n\n      // Show integrated table of contents\n      .md-nav--secondary {\n        display: block;\n        margin-bottom: 1.25em;\n        border-inline-start: px2rem(1px) solid var(--md-primary-fg-color);\n\n        // Hide table of contents title\n        > .md-nav__title {\n          display: none;\n        }\n      }\n    }\n  }\n}\n", "////\n/// Copyright (c) 2016-2022 Martin Donath \n///\n/// Permission is hereby granted, free of charge, to any person obtaining a\n/// copy of this software and associated documentation files (the \"Software\"),\n/// to deal in the Software without restriction, including without limitation\n/// the rights to use, copy, modify, merge, publish, distribute, sublicense,\n/// and/or sell copies of the Software, and to permit persons to whom the\n/// Software is furnished to do so, subject to the following conditions:\n///\n/// The above copyright notice and this permission notice shall be included in\n/// all copies or substantial portions of the Software.\n///\n/// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n/// FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL\n/// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n/// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n/// DEALINGS\n////\n\n// ----------------------------------------------------------------------------\n// Rules\n// ----------------------------------------------------------------------------\n\n// Search variables\n:root {\n  --md-search-result-icon: svg-load(\"material/file-search-outline.svg\");\n}\n\n// ----------------------------------------------------------------------------\n\n// Search\n.md-search {\n  position: relative;\n\n  // [tablet landscape +]: Header-embedded search\n  @include break-from-device(tablet landscape) {\n    padding: px2rem(4px) 0;\n  }\n\n  // [no-js]: Hide search\n  .no-js & {\n    display: none;\n  }\n\n  // Search overlay\n  &__overlay {\n    z-index: 1;\n    opacity: 0;\n\n    // [tablet portrait -]: Search modal\n    @include break-to-device(tablet portrait) {\n      position: absolute;\n      top: px2rem(-20px);\n      inset-inline-start: px2rem(-44px);\n      width: px2rem(40px);\n      height: px2rem(40px);\n      overflow: hidden;\n      background-color: var(--md-default-bg-color);\n      border-radius: px2rem(20px);\n      transform-origin: center;\n      transition:\n        transform 300ms 100ms,\n        opacity   200ms 200ms;\n      pointer-events: none;\n\n      // Show overlay when search is active\n      [data-md-toggle=\"search\"]:checked ~ .md-header & {\n        opacity: 1;\n        transition:\n          transform 400ms,\n          opacity   100ms;\n      }\n    }\n\n    // [tablet landscape +]: Header-embedded search\n    @include break-from-device(tablet landscape) {\n      position: fixed;\n      top: 0;\n      inset-inline-start: 0;\n      width: 0;\n      height: 0;\n      background-color: hsla(0, 0%, 0%, 0.54);\n      cursor: pointer;\n      transition:\n        width     0ms 250ms,\n        height    0ms 250ms,\n        opacity 250ms;\n\n      // Show overlay when search is active\n      [data-md-toggle=\"search\"]:checked ~ .md-header & {\n        width: 100%;\n        // Hack: when the header is translated upon scrolling, a new layer is\n        // induced, which means that the height will now refer to the height of\n        // the header, albeit positioning is fixed. This should be mitigated\n        // in all cases when setting the height to 2x the viewport.\n        height: 200vh;\n        opacity: 1;\n        transition:\n          width     0ms,\n          height    0ms,\n          opacity 250ms;\n      }\n    }\n\n    // Adjust appearance when search is active\n    [data-md-toggle=\"search\"]:checked ~ .md-header & {\n\n      // [mobile portrait -]: Scale up 45 times\n      @include break-to-device(mobile portrait) {\n        transform: scale(45);\n      }\n\n      // [mobile landscape]: Scale up 60 times\n      @include break-at-device(mobile landscape) {\n        transform: scale(60);\n      }\n\n      // [tablet portrait]: Scale up 75 times\n      @include break-at-device(tablet portrait) {\n        transform: scale(75);\n      }\n    }\n  }\n\n  // Search wrapper\n  &__inner {\n    // Hack: promote to own layer to reduce jitter\n    backface-visibility: hidden;\n\n    // [tablet portrait -]: Search modal\n    @include break-to-device(tablet portrait) {\n      position: fixed;\n      top: 0;\n      inset-inline-start: 0;\n      z-index: 2;\n      width: 0;\n      height: 0;\n      overflow: hidden;\n      transform: translateX(5%);\n      opacity: 0;\n      transition:\n        width       0ms 300ms,\n        height      0ms 300ms,\n        transform 150ms 150ms cubic-bezier(0.4, 0, 0.2, 1),\n        opacity   150ms 150ms;\n\n      // Adjust for right-to-left languages\n      [dir=\"rtl\"] & {\n        transform: translateX(-5%);\n      }\n\n      // Adjust appearance when search is active\n      [data-md-toggle=\"search\"]:checked ~ .md-header & {\n        width: 100%;\n        height: 100%;\n        transform: translateX(0);\n        opacity: 1;\n        transition:\n          width       0ms   0ms,\n          height      0ms   0ms,\n          transform 150ms 150ms cubic-bezier(0.1, 0.7, 0.1, 1),\n          opacity   150ms 150ms;\n      }\n    }\n\n    // [tablet landscape +]: Header-embedded search\n    @include break-from-device(tablet landscape) {\n      position: relative;\n      float: inline-end;\n      width: px2rem(234px);\n      padding: px2rem(2px) 0;\n      transition: width 250ms cubic-bezier(0.1, 0.7, 0.1, 1);\n    }\n\n    // Adjust appearance when search is active\n    [data-md-toggle=\"search\"]:checked ~ .md-header & {\n\n      // [tablet landscape]: Omit overlaying header title\n      @include break-at-device(tablet landscape) {\n        width: px2rem(468px);\n      }\n\n      // [screen +]: Match width of content area\n      @include break-from-device(screen) {\n        width: px2rem(688px);\n      }\n    }\n  }\n\n  // Search form\n  &__form {\n    position: relative;\n    z-index: 2;\n    height: px2rem(48px);\n    background-color: var(--md-default-bg-color);\n    box-shadow: 0 0 px2rem(12px) transparent;\n    transition:\n      color            250ms,\n      background-color 250ms;\n\n    // [tablet landscape +]: Header-embedded search\n    @include break-from-device(tablet landscape) {\n      height: px2rem(36px);\n      background-color: hsla(0, 0%, 0%, 0.26);\n      border-radius: px2rem(2px);\n\n      // Search form on hover\n      &:hover {\n        background-color: hsla(0, 0%, 100%, 0.12);\n      }\n    }\n\n    // Adjust appearance when search is active\n    [data-md-toggle=\"search\"]:checked ~ .md-header & {\n      color: var(--md-default-fg-color);\n      background-color: var(--md-default-bg-color);\n      border-radius: px2rem(2px) px2rem(2px) 0 0;\n      box-shadow: 0 0 px2rem(12px) hsla(0, 0%, 0%, 0.07);\n    }\n  }\n\n  // Search input\n  &__input {\n    position: relative;\n    z-index: 2;\n    width: 100%;\n    height: 100%;\n    padding-inline: px2rem(72px) px2rem(44px);\n    font-size: px2rem(18px);\n    text-overflow: ellipsis;\n    background: transparent;\n\n    // Search placeholder\n    &::placeholder {\n      transition: color 250ms;\n    }\n\n    // Search icon and placeholder\n    ~ .md-search__icon,\n    &::placeholder {\n      color: var(--md-default-fg-color--light);\n    }\n\n    // Remove the \"x\" rendered by Internet Explorer\n    &::-ms-clear {\n      display: none;\n    }\n\n    // [tablet portrait -]: Search modal\n    @include break-to-device(tablet portrait) {\n      width: 100%;\n      height: px2rem(48px);\n      font-size: px2rem(18px);\n    }\n\n    // [tablet landscape +]: Header-embedded search\n    @include break-from-device(tablet landscape) {\n      padding-inline-start: px2rem(44px);\n      color: inherit;\n      font-size: px2rem(16px);\n\n      // Search placeholder\n      &::placeholder {\n        color: var(--md-primary-bg-color--light);\n      }\n\n      // Search icon\n      + .md-search__icon {\n        color: var(--md-primary-bg-color);\n      }\n\n      // Adjust appearance when search is active\n      [data-md-toggle=\"search\"]:checked ~ .md-header & {\n        text-overflow: clip;\n\n        // Search icon and placeholder\n        + .md-search__icon,\n        &::placeholder {\n          color: var(--md-default-fg-color--light);\n        }\n      }\n    }\n  }\n\n  // Search icon\n  &__icon {\n    display: inline-block;\n    width: px2rem(24px);\n    height: px2rem(24px);\n    cursor: pointer;\n    transition:\n      color   250ms,\n      opacity 250ms;\n\n    // Search icon on hover\n    &:hover {\n      opacity: 0.7;\n    }\n\n    // Search focus button\n    &[for=\"__search\"] {\n      position: absolute;\n      top: px2rem(6px);\n      inset-inline-start: px2rem(10px);\n      z-index: 2;\n\n      // Adjust for right-to-left languages\n      [dir=\"rtl\"] & svg {\n        transform: scaleX(-1);\n      }\n\n      // [tablet portrait -]: Search modal\n      @include break-to-device(tablet portrait) {\n        top: px2rem(12px);\n        inset-inline-start: px2rem(16px);\n\n        // Hide the magnifying glass\n        svg:first-child {\n          display: none;\n        }\n      }\n\n      // [tablet landscape +]: Header-embedded search\n      @include break-from-device(tablet landscape) {\n        pointer-events: none;\n\n        // Hide the back arrow\n        svg:last-child {\n          display: none;\n        }\n      }\n    }\n  }\n\n  // Search options\n  &__options {\n    position: absolute;\n    top: px2rem(6px);\n    inset-inline-end: px2rem(10px);\n    z-index: 2;\n    pointer-events: none;\n\n    // [tablet portrait -]: Search modal\n    @include break-to-device(tablet portrait) {\n      top: px2rem(12px);\n      inset-inline-end: px2rem(16px);\n    }\n\n    // Search option buttons\n    > * {\n      margin-inline-start: px2rem(4px);\n      color: var(--md-default-fg-color--light);\n      transform: scale(0.75);\n      opacity: 0;\n      transition:\n        transform 150ms cubic-bezier(0.1, 0.7, 0.1, 1),\n        opacity   150ms;\n\n      // Hide outline for pointer devices\n      &:not(.focus-visible) {\n        outline: none;\n        -webkit-tap-highlight-color: transparent;\n      }\n\n      // Show reset button when search is active and input non-empty\n      [data-md-toggle=\"search\"]:checked ~ .md-header\n      .md-search__input:valid ~ & {\n        transform: scale(1);\n        opacity: 1;\n        pointer-events: initial;\n\n        // Search focus icon\n        &:hover {\n          opacity: 0.7;\n        }\n      }\n    }\n  }\n\n  // Search suggestions\n  &__suggest {\n    position: absolute;\n    top: 0;\n    display: flex;\n    align-items: center;\n    width: 100%;\n    height: 100%;\n    padding-inline: px2rem(72px) px2rem(44px);\n    color: var(--md-default-fg-color--lighter);\n    font-size: px2rem(18px);\n    white-space: nowrap;\n    opacity: 0;\n    transition: opacity 50ms;\n\n    // [tablet landscape +]: Header-embedded search\n    @include break-from-device(tablet landscape) {\n      padding-inline-start: px2rem(44px);\n      font-size: px2rem(16px);\n    }\n\n    // Show suggestions when search is active\n    [data-md-toggle=\"search\"]:checked ~ .md-header & {\n      opacity: 1;\n      transition: opacity 300ms 100ms;\n    }\n  }\n\n  // Search output\n  &__output {\n    position: absolute;\n    z-index: 1;\n    width: 100%;\n    overflow: hidden;\n    border-end-start-radius: px2rem(2px);\n    border-end-end-radius: px2rem(2px);\n\n    // [tablet portrait -]: Search modal\n    @include break-to-device(tablet portrait) {\n      top: px2rem(48px);\n      bottom: 0;\n    }\n\n    // [tablet landscape +]: Header-embedded search\n    @include break-from-device(tablet landscape) {\n      top: px2rem(38px);\n      opacity: 0;\n      transition: opacity 400ms;\n\n      // Show output when search is active\n      [data-md-toggle=\"search\"]:checked ~ .md-header & {\n        box-shadow: var(--md-shadow-z3);\n        opacity: 1;\n      }\n    }\n  }\n\n  // Search scroll wrapper\n  &__scrollwrap {\n    height: 100%;\n    overflow-y: auto;\n    background-color: var(--md-default-bg-color);\n    // Hack: promote to own layer to reduce jitter\n    backface-visibility: hidden;\n    // Hack: Chrome 88+ has weird overscroll behavior. Overall, scroll snapping\n    // seems to be something that is not ready for prime time on some browsers.\n    // scroll-snap-type: y mandatory;\n    touch-action: pan-y;\n\n    // Mitigiate excessive repaints on non-retina devices\n    @media (max-resolution: 1dppx) {\n      transform: translateZ(0);\n    }\n\n    // [tablet landscape]: Set fixed width to omit unnecessary reflow\n    @include break-at-device(tablet landscape) {\n      width: px2rem(468px);\n    }\n\n    // [screen +]: Set fixed width to omit unnecessary reflow\n    @include break-from-device(screen) {\n      width: px2rem(688px);\n    }\n\n    // [tablet landscape +]: Limit height to viewport\n    @include break-from-device(tablet landscape) {\n      max-height: 0;\n      scrollbar-width: thin;\n      scrollbar-color: var(--md-default-fg-color--lighter) transparent;\n\n      // Show scroll wrapper when search is active\n      [data-md-toggle=\"search\"]:checked ~ .md-header & {\n        max-height: 75vh;\n      }\n\n      // Search scroll wrapper on hover\n      &:hover {\n        scrollbar-color: var(--md-accent-fg-color) transparent;\n      }\n\n      // Webkit scrollbar\n      &::-webkit-scrollbar {\n        width: px2rem(4px);\n        height: px2rem(4px);\n      }\n\n      // Webkit scrollbar thumb\n      &::-webkit-scrollbar-thumb {\n        background-color: var(--md-default-fg-color--lighter);\n\n        // Webkit scrollbar thumb on hover\n        &:hover {\n          background-color: var(--md-accent-fg-color);\n        }\n      }\n    }\n  }\n}\n\n// Search result\n.md-search-result {\n  color: var(--md-default-fg-color);\n  word-break: break-word;\n\n  // Search result metadata\n  &__meta {\n    padding: 0 px2rem(16px);\n    color: var(--md-default-fg-color--light);\n    font-size: px2rem(12.8px);\n    line-height: px2rem(36px);\n    background-color: var(--md-default-fg-color--lightest);\n    scroll-snap-align: start;\n\n    // [tablet landscape +]: Adjust spacing\n    @include break-from-device(tablet landscape) {\n      padding-inline-start: px2rem(44px);\n    }\n  }\n\n  // Search result list\n  &__list {\n    margin: 0;\n    padding: 0;\n    list-style: none;\n    // Hack: omit accidental text selection on fast toggle of more button\n    user-select: none;\n  }\n\n  // Search result item\n  &__item {\n    box-shadow: 0 px2rem(-1px) var(--md-default-fg-color--lightest);\n\n    // Omit border on first child\n    &:first-child {\n      box-shadow: none;\n    }\n  }\n\n  // Search result link\n  &__link {\n    display: block;\n    outline: none;\n    transition: background-color 250ms;\n    scroll-snap-align: start;\n\n    // Search result link on focus/hover\n    &:is(:focus, :hover) {\n      background-color: var(--md-accent-fg-color--transparent);\n    }\n\n    // Adjust spacing on last child of last link\n    &:last-child p:last-child {\n      margin-bottom: px2rem(12px);\n    }\n  }\n\n  // Search result more link\n  &__more summary {\n    display: block;\n    padding: px2em(12px) px2rem(16px);\n    color: var(--md-typeset-a-color);\n    font-size: px2rem(12.8px);\n    outline: none;\n    cursor: pointer;\n    transition:\n      color            250ms,\n      background-color 250ms;\n    scroll-snap-align: start;\n\n    // [tablet landscape +]: Adjust spacing\n    @include break-from-device(tablet landscape) {\n      padding-inline-start: px2rem(44px);\n    }\n\n    // Search result more link on focus/hover\n    &:is(:focus, :hover) {\n      color: var(--md-accent-fg-color);\n      background-color: var(--md-accent-fg-color--transparent);\n    }\n\n    // Hide native details marker - modern\n    &::marker {\n      display: none;\n    }\n\n    // Hide native details marker - legacy, must be split into a seprate rule,\n    // so older browsers don't consider the selector list as invalid\n    &::-webkit-details-marker {\n      display: none;\n    }\n\n    // Adjust transparency of less relevant results\n    ~ * > * {\n      opacity: 0.65;\n    }\n  }\n\n  // Search result article\n  &__article {\n    position: relative;\n    padding: 0 px2rem(16px);\n    overflow: hidden;\n\n    // [tablet landscape +]: Adjust spacing\n    @include break-from-device(tablet landscape) {\n      padding-inline-start: px2rem(44px);\n    }\n\n    // Search result article document\n    &--document {\n\n      // Search result title\n      .md-search-result__title {\n        margin: px2rem(11px) 0;\n        font-weight: 400;\n        font-size: px2rem(16px);\n        line-height: 1.4;\n      }\n    }\n  }\n\n  // Search result icon\n  &__icon {\n    position: absolute;\n    inset-inline-start: 0;\n    width: px2rem(24px);\n    height: px2rem(24px);\n    margin: px2rem(10px);\n    color: var(--md-default-fg-color--light);\n\n    // [tablet portrait -]: Hide icon\n    @include break-to-device(tablet portrait) {\n      display: none;\n    }\n\n    // Search result icon content\n    &::after {\n      display: inline-block;\n      width: 100%;\n      height: 100%;\n      background-color: currentcolor;\n      mask-image: var(--md-search-result-icon);\n      mask-position: center;\n      mask-repeat: no-repeat;\n      mask-size: contain;\n      content: \"\";\n\n      // Adjust for right-to-left languages\n      [dir=\"rtl\"] & {\n        transform: scaleX(-1);\n      }\n    }\n  }\n\n  // Search result title\n  &__title {\n    margin: 0.5em 0;\n    font-weight: 700;\n    font-size: px2rem(12.8px);\n    line-height: 1.6;\n  }\n\n  // Search result teaser\n  &__teaser {\n    display: -webkit-box;\n    max-height: px2rem(40px);\n    margin: 0.5em 0;\n    overflow: hidden;\n    color: var(--md-default-fg-color--light);\n    font-size: px2rem(12.8px);\n    line-height: 1.6;\n    text-overflow: ellipsis;\n    -webkit-box-orient: vertical;\n    -webkit-line-clamp: 2;\n\n    // [mobile -]: Adjust number of lines\n    @include break-to-device(mobile) {\n      max-height: px2rem(60px);\n      -webkit-line-clamp: 3;\n    }\n\n    // [tablet landscape]: Adjust number of lines\n    @include break-at-device(tablet landscape) {\n      max-height: px2rem(60px);\n      -webkit-line-clamp: 3;\n    }\n\n    // Search term highlighting\n    mark {\n      text-decoration: underline;\n      background-color: transparent;\n    }\n  }\n\n  // Search result terms\n  &__terms {\n    margin: 0.5em 0;\n    font-size: px2rem(12.8px);\n    font-style: italic;\n  }\n\n  // Search term highlighting\n  mark {\n    color: var(--md-accent-fg-color);\n    background-color: transparent;\n  }\n}\n", "////\n/// Copyright (c) 2016-2022 Martin Donath \n///\n/// Permission is hereby granted, free of charge, to any person obtaining a\n/// copy of this software and associated documentation files (the \"Software\"),\n/// to deal in the Software without restriction, including without limitation\n/// the rights to use, copy, modify, merge, publish, distribute, sublicense,\n/// and/or sell copies of the Software, and to permit persons to whom the\n/// Software is furnished to do so, subject to the following conditions:\n///\n/// The above copyright notice and this permission notice shall be included in\n/// all copies or substantial portions of the Software.\n///\n/// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n/// FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL\n/// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n/// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n/// DEALINGS\n////\n\n// ----------------------------------------------------------------------------\n// Rules\n// ----------------------------------------------------------------------------\n\n// Selection\n.md-select {\n  position: relative;\n  z-index: 1;\n\n  // Selection tooltip\n  &__inner {\n    position: absolute;\n    top: calc(100% - #{px2rem(4px)});\n    left: 50%;\n    max-height: 0;\n    margin-top: px2rem(4px);\n    color: var(--md-default-fg-color);\n    background-color: var(--md-default-bg-color);\n    border-radius: px2rem(2px);\n    box-shadow: var(--md-shadow-z2);\n    transform: translate3d(-50%, px2rem(6px), 0);\n    opacity: 0;\n    transition:\n      transform  250ms 375ms,\n      opacity    250ms 250ms,\n      max-height   0ms 500ms;\n\n    // Selection bubble on parent focus/hover\n    .md-select:is(:focus-within, :hover) & {\n      max-height: px2rem(200px);\n      transform: translate3d(-50%, 0, 0);\n      opacity: 1;\n      transition:\n        transform  250ms cubic-bezier(0.1, 0.7, 0.1, 1),\n        opacity    250ms,\n        max-height   0ms;\n    }\n\n    // Selection bubble handle\n    &::after {\n      position: absolute;\n      top: 0;\n      left: 50%;\n      width: 0;\n      height: 0;\n      margin-top: px2rem(-4px);\n      margin-left: px2rem(-4px);\n      border: px2rem(4px) solid transparent;\n      border-top: 0;\n      border-bottom-color: var(--md-default-bg-color);\n      content: \"\";\n    }\n  }\n\n  // Selection list\n  &__list {\n    max-height: inherit;\n    margin: 0;\n    padding: 0;\n    overflow: auto;\n    font-size: px2rem(16px);\n    list-style-type: none;\n    border-radius: px2rem(2px);\n  }\n\n  // Selection item\n  &__item {\n    line-height: px2rem(36px);\n  }\n\n  // Selection link\n  &__link {\n    display: block;\n    width: 100%;\n    padding-inline: px2rem(12px) px2rem(24px);\n    outline: none;\n    cursor: pointer;\n    transition:\n      background-color 250ms,\n      color            250ms;\n    scroll-snap-align: start;\n\n    // Link on focus/hover\n    &:is(:focus, :hover) {\n      color: var(--md-accent-fg-color);\n    }\n\n    // Link on focus\n    &:focus {\n      background-color: var(--md-default-fg-color--lightest);\n    }\n  }\n}\n", "////\n/// Copyright (c) 2016-2022 Martin Donath \n///\n/// Permission is hereby granted, free of charge, to any person obtaining a\n/// copy of this software and associated documentation files (the \"Software\"),\n/// to deal in the Software without restriction, including without limitation\n/// the rights to use, copy, modify, merge, publish, distribute, sublicense,\n/// and/or sell copies of the Software, and to permit persons to whom the\n/// Software is furnished to do so, subject to the following conditions:\n///\n/// The above copyright notice and this permission notice shall be included in\n/// all copies or substantial portions of the Software.\n///\n/// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n/// FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL\n/// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n/// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n/// DEALINGS\n////\n\n// ----------------------------------------------------------------------------\n// Rules\n// ----------------------------------------------------------------------------\n\n// Sidebar\n.md-sidebar {\n  position: sticky;\n  top: px2rem(48px);\n  flex-shrink: 0;\n  align-self: flex-start;\n  width: px2rem(242px);\n  padding: px2rem(24px) 0;\n\n  // [print]: Hide sidebar\n  @media print {\n    display: none;\n  }\n\n  // Primary sidebar with navigation\n  &--primary {\n\n    // [tablet -]: Show navigation as drawer\n    @include break-to-device(tablet) {\n      position: fixed;\n      top: 0;\n      inset-inline-start: px2rem(-242px);\n      z-index: 5;\n      display: block;\n      width: px2rem(242px);\n      height: 100%;\n      background-color: var(--md-default-bg-color);\n      transform: translateX(0);\n      transition:\n        transform  250ms cubic-bezier(0.4, 0, 0.2, 1),\n        box-shadow 250ms;\n\n      // Show sidebar when drawer is active\n      [data-md-toggle=\"drawer\"]:checked ~ .md-container & {\n        box-shadow: var(--md-shadow-z3);\n        transform: translateX(px2rem(242px));\n\n        // Adjust for right-to-left languages\n        [dir=\"rtl\"] & {\n          transform: translateX(px2rem(-242px));\n        }\n      }\n\n      // Stretch scroll wrapper for primary sidebar\n      .md-sidebar__scrollwrap {\n        position: absolute;\n        inset: 0;\n        margin: 0;\n        scroll-snap-type: none;\n        overflow: hidden;\n      }\n    }\n  }\n\n  // [screen +]: Show navigation as sidebar\n  @include break-from-device(screen) {\n    height: 0;\n\n    // [no-js]: Switch to native sticky behavior\n    .no-js & {\n      height: auto;\n    }\n\n    // Adjust spacing for sticky navigation tabs\n    .md-header--lifted ~ .md-container & {\n      top: px2rem(96px);\n    }\n  }\n\n  // Secondary sidebar with table of contents\n  &--secondary {\n    display: none;\n    order: 2;\n\n    // [tablet landscape +]: Show table of contents as sidebar\n    @include break-from-device(tablet landscape) {\n      height: 0;\n\n      // [no-js]: Switch to native sticky behavior\n      .no-js & {\n        height: auto;\n      }\n\n      // Sidebar is visible\n      &:not([hidden]) {\n        display: block;\n      }\n\n      // Ensure smooth scrolling on iOS\n      .md-sidebar__scrollwrap {\n        touch-action: pan-y;\n      }\n    }\n  }\n\n  // Sidebar scroll wrapper\n  &__scrollwrap {\n    margin: 0 px2rem(4px);\n    overflow-y: auto;\n    // Hack: promote to own layer to reduce jitter\n    backface-visibility: hidden;\n    // Hack: Chrome 81+ exhibits a strange bug, where it scrolls the container\n    // to the bottom if `scroll-snap-type` is set on the initial render. For\n    // this reason, we disable scroll snapping until this is resolved (#1667).\n    // scroll-snap-type: y mandatory;\n    scrollbar-width: thin;\n    scrollbar-gutter: stable;\n    scrollbar-color: var(--md-default-fg-color--lighter) transparent;\n\n    // Sidebar scroll wrapper on hover\n    &:hover {\n      scrollbar-color: var(--md-accent-fg-color) transparent;\n    }\n\n    // Webkit scrollbar\n    &::-webkit-scrollbar {\n      width: px2rem(4px);\n      height: px2rem(4px);\n    }\n\n    // Webkit scrollbar thumb\n    &::-webkit-scrollbar-thumb {\n      background-color: var(--md-default-fg-color--lighter);\n\n      // Webkit scrollbar thumb on hover\n      &:hover {\n        background-color: var(--md-accent-fg-color);\n      }\n    }\n  }\n\n  // Hack: the scrollbar is only visible when the sidebar's contents overflow,\n  // which is nice, but leads to the problem where the chevrons of expandable\n  // sections will jump by `4px` when the sidebar is shown. We wanted to fix\n  // this problem for so long, but haven't found a clean way of doing it.\n  // Until now. The following declaration is only applied to Webkit browsers\n  // (e.g. Chrome and Safari), which support styling of scrollbars. The trick\n  // is to add conditional padding on the side of the scrollbar only if the\n  // sidebar's content doesn't overflow. This hack is inspired and adapted\n  // from Ayke van La\u00ebthem's year old trick \u2013 see https://bit.ly/3Sb1qql\n  @supports selector(::-webkit-scrollbar) {\n\n    // Sidebar scroll wrapper\n    &__scrollwrap {\n      scrollbar-gutter: auto;\n    }\n\n    // Sidebar wrapper\n    &__inner {\n      padding-inline-end: calc(100% - #{px2rem(230px)});\n    }\n  }\n}\n\n// [tablet -]: Show overlay on active drawer\n@include break-to-device(tablet) {\n\n  // Drawer overlay\n  .md-overlay {\n    position: fixed;\n    top: 0;\n    z-index: 5;\n    width: 0;\n    height: 0;\n    background-color: hsla(0, 0%, 0%, 0.54);\n    opacity: 0;\n    transition:\n      width     0ms 250ms,\n      height    0ms 250ms,\n      opacity 250ms;\n\n    // Show overlay when drawer is active\n    [data-md-toggle=\"drawer\"]:checked ~ & {\n      width: 100%;\n      height: 100%;\n      opacity: 1;\n      transition:\n        width     0ms,\n        height    0ms,\n        opacity 250ms;\n    }\n  }\n}\n", "////\n/// Copyright (c) 2016-2022 Martin Donath \n///\n/// Permission is hereby granted, free of charge, to any person obtaining a\n/// copy of this software and associated documentation files (the \"Software\"),\n/// to deal in the Software without restriction, including without limitation\n/// the rights to use, copy, modify, merge, publish, distribute, sublicense,\n/// and/or sell copies of the Software, and to permit persons to whom the\n/// Software is furnished to do so, subject to the following conditions:\n///\n/// The above copyright notice and this permission notice shall be included in\n/// all copies or substantial portions of the Software.\n///\n/// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n/// FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL\n/// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n/// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n/// DEALINGS\n////\n\n// ----------------------------------------------------------------------------\n// Keyframes\n// ----------------------------------------------------------------------------\n\n// Show repository facts\n@keyframes facts {\n  0% {\n    height: 0;\n  }\n\n  100% {\n    height: px2rem(13px);\n  }\n}\n\n// Show repository fact\n@keyframes fact {\n  0% {\n    transform: translateY(100%);\n    opacity: 0;\n  }\n\n  50% {\n    opacity: 0;\n  }\n\n  100% {\n    transform: translateY(0%);\n    opacity: 1;\n  }\n}\n\n// ----------------------------------------------------------------------------\n// Rules\n// ----------------------------------------------------------------------------\n\n// Repository information variables\n:root {\n  --md-source-forks-icon: svg-load(\"octicons/repo-forked-16.svg\");\n  --md-source-repositories-icon: svg-load(\"octicons/repo-16.svg\");\n  --md-source-stars-icon: svg-load(\"octicons/star-16.svg\");\n  --md-source-version-icon: svg-load(\"octicons/tag-16.svg\");\n}\n\n// ----------------------------------------------------------------------------\n\n// Repository information\n.md-source {\n  display: block;\n  font-size: px2rem(13px);\n  line-height: 1.2;\n  white-space: nowrap;\n  outline-color: var(--md-accent-fg-color);\n  // Hack: promote to own layer to reduce jitter\n  backface-visibility: hidden;\n  transition: opacity 250ms;\n\n  // Repository information on hover\n  &:hover {\n    opacity: 0.7;\n  }\n\n  // Repository icon\n  &__icon {\n    display: inline-block;\n    width: px2rem(40px);\n    height: px2rem(48px);\n    vertical-align: middle;\n\n    // Align with margin only (as opposed to normal button alignment)\n    svg {\n      margin-top: px2rem(12px);\n      margin-inline-start: px2rem(12px);\n    }\n\n    // Adjust spacing if icon is present\n    + .md-source__repository {\n      margin-inline-start: px2rem(-40px);\n      padding-inline-start: px2rem(40px);\n    }\n  }\n\n  // Repository name\n  &__repository {\n    display: inline-block;\n    max-width: calc(100% - #{px2rem(24px)});\n    margin-inline-start: px2rem(12px);\n    overflow: hidden;\n    text-overflow: ellipsis;\n    vertical-align: middle;\n  }\n\n  // Repository facts\n  &__facts {\n    display: flex;\n    gap: px2rem(8px);\n    width: 100%;\n    margin: px2rem(2px) 0 0;\n    padding: 0;\n    overflow: hidden;\n    font-size: px2rem(11px);\n    list-style-type: none;\n    opacity: 0.75;\n\n    // Show after the data was loaded\n    .md-source__repository--active & {\n      animation: facts 250ms ease-in;\n    }\n  }\n\n  // Repository fact\n  &__fact {\n    overflow: hidden;\n    text-overflow: ellipsis;\n\n    // Show after the data was loaded\n    .md-source__repository--active & {\n      animation: fact 400ms ease-out;\n    }\n\n    // Repository fact icon\n    &::before {\n      display: inline-block;\n      width: px2rem(12px);\n      height: px2rem(12px);\n      margin-inline-end: px2rem(2px);\n      vertical-align: text-top;\n      background-color: currentcolor;\n      mask-position: center;\n      mask-repeat: no-repeat;\n      mask-size: contain;\n      content: \"\";\n    }\n\n    // Adjust spacing for 2nd+ fact\n    &:nth-child(1n+2) {\n      flex-shrink: 0;\n    }\n\n    // Repository fact: version\n    &--version::before {\n      mask-image: var(--md-source-version-icon);\n    }\n\n    // Repository fact: stars\n    &--stars::before {\n      mask-image: var(--md-source-stars-icon);\n    }\n\n    // Repository fact: forks\n    &--forks::before {\n      mask-image: var(--md-source-forks-icon);\n    }\n\n    // Repository fact: repositories\n    &--repositories::before {\n      mask-image: var(--md-source-repositories-icon);\n    }\n  }\n}\n", "////\n/// Copyright (c) 2016-2022 Martin Donath \n///\n/// Permission is hereby granted, free of charge, to any person obtaining a\n/// copy of this software and associated documentation files (the \"Software\"),\n/// to deal in the Software without restriction, including without limitation\n/// the rights to use, copy, modify, merge, publish, distribute, sublicense,\n/// and/or sell copies of the Software, and to permit persons to whom the\n/// Software is furnished to do so, subject to the following conditions:\n///\n/// The above copyright notice and this permission notice shall be included in\n/// all copies or substantial portions of the Software.\n///\n/// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n/// FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL\n/// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n/// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n/// DEALINGS\n////\n\n// ----------------------------------------------------------------------------\n// Rules\n// ----------------------------------------------------------------------------\n\n// Navigation tabs\n.md-tabs {\n  // Must be higher than the z-index of the back-to-top button, or the button\n  // will overlay the navigation tabs bar when scrolling up fast.\n  z-index: 3;\n  display: block;\n  width: 100%;\n  overflow: auto;\n  color: var(--md-primary-bg-color);\n  line-height: 1.3;\n  background-color: var(--md-primary-fg-color);\n\n  // [print]: Hide tabs\n  @media print {\n    display: none;\n  }\n\n  // [tablet -]: Hide tabs\n  @include break-to-device(tablet) {\n    display: none;\n  }\n\n  // Navigation tabs are hidden\n  &[hidden] {\n    pointer-events: none;\n  }\n\n  // Navigation tabs list\n  &__list {\n    margin: 0;\n    margin-inline-start: px2rem(4px);\n    padding: 0;\n    white-space: nowrap;\n    list-style: none;\n    contain: content;\n  }\n\n  // Navigation tabs item\n  &__item {\n    display: inline-block;\n    height: px2rem(48px);\n    padding-inline: px2rem(12px);\n  }\n\n  // Navigation tabs link - could be defined as block elements and aligned via\n  // line height, but this would imply more repaints when scrolling\n  &__link {\n    display: block;\n    margin-top: px2rem(16px);\n    font-size: px2rem(14px);\n    outline-color: var(--md-accent-fg-color);\n    outline-offset: px2rem(4px);\n    // Hack: save a repaint when tabs are appearing on scrolling up\n    backface-visibility: hidden;\n    opacity: 0.7;\n    transition:\n      transform 400ms cubic-bezier(0.1, 0.7, 0.1, 1),\n      opacity   250ms;\n\n    // Active link and link on focus/hover\n    &--active,\n    &:is(:focus, :hover) {\n      color: inherit;\n      opacity: 1;\n    }\n\n    // Delay transitions by a small amount\n    @for $i from 2 through 16 {\n      .md-tabs__item:nth-child(#{$i}) & {\n        transition-delay: 20ms * ($i - 1);\n      }\n    }\n\n    // Hide tabs upon scrolling - disable transition to minimizes repaints\n    // while scrolling down, while scrolling up seems to be okay\n    .md-tabs[hidden] & {\n      transform: translateY(50%);\n      opacity: 0;\n      transition:\n        transform 0ms 100ms,\n        opacity 100ms;\n    }\n  }\n}\n", "////\n/// Copyright (c) 2016-2022 Martin Donath \n///\n/// Permission is hereby granted, free of charge, to any person obtaining a\n/// copy of this software and associated documentation files (the \"Software\"),\n/// to deal in the Software without restriction, including without limitation\n/// the rights to use, copy, modify, merge, publish, distribute, sublicense,\n/// and/or sell copies of the Software, and to permit persons to whom the\n/// Software is furnished to do so, subject to the following conditions:\n///\n/// The above copyright notice and this permission notice shall be included in\n/// all copies or substantial portions of the Software.\n///\n/// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n/// FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL\n/// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n/// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n/// DEALINGS\n////\n\n// ----------------------------------------------------------------------------\n// Rules\n// ----------------------------------------------------------------------------\n\n// Tag variables\n:root {\n  --md-tag-icon: svg-load(\"material/pound.svg\");\n}\n\n// ----------------------------------------------------------------------------\n\n// Scoped in typesetted content to match specificity of regular content\n.md-typeset {\n\n  // Tag list\n  .md-tags {\n    margin-top: px2em(-2px);\n    margin-bottom: px2em(12px);\n  }\n\n  // Tag\n  .md-tag {\n    display: inline-block;\n    margin-inline-end: 0.5em;\n    margin-bottom: 0.5em;\n    padding: px2em(4px, 12.8px) px2em(12px, 12.8px);\n    font-weight: 700;\n    font-size: px2rem(12.8px);\n    line-height: 1.6;\n    letter-spacing: initial;\n    vertical-align: middle;\n    background: var(--md-default-fg-color--lightest);\n    border-radius: px2rem(48px);\n\n    // Linked tag\n    &[href] {\n      color: inherit;\n      outline: none;\n      -webkit-tap-highlight-color: transparent;\n      transition:\n        color            125ms,\n        background-color 125ms;\n\n      // Linked tag on focus/hover\n      &:focus,\n      &:hover {\n        color: var(--md-accent-bg-color);\n        background-color: var(--md-accent-fg-color);\n      }\n    }\n\n    // Tag inside headline\n    [id] > & {\n      vertical-align: text-top;\n    }\n  }\n\n  // Tag icon\n  .md-tag-icon {\n\n    // Tag icon content\n    &::before {\n      display: inline-block;\n      width: 1.2em;\n      height: 1.2em;\n      margin-right: 0.4em;\n      vertical-align: text-bottom;\n      background-color: var(--md-default-fg-color--lighter);\n      mask-image: var(--md-tag-icon);\n      mask-position: center;\n      mask-repeat: no-repeat;\n      mask-size: contain;\n      transition: background-color 125ms;\n      content: \"\";\n    }\n\n    // Linked tag on focus/hover\n    &:is(a:focus, a:hover)::before {\n      background-color: var(--md-accent-bg-color);\n    }\n  }\n}\n", "////\n/// Copyright (c) 2016-2022 Martin Donath \n///\n/// Permission is hereby granted, free of charge, to any person obtaining a\n/// copy of this software and associated documentation files (the \"Software\"),\n/// to deal in the Software without restriction, including without limitation\n/// the rights to use, copy, modify, merge, publish, distribute, sublicense,\n/// and/or sell copies of the Software, and to permit persons to whom the\n/// Software is furnished to do so, subject to the following conditions:\n///\n/// The above copyright notice and this permission notice shall be included in\n/// all copies or substantial portions of the Software.\n///\n/// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n/// FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL\n/// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n/// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n/// DEALINGS\n////\n\n// ----------------------------------------------------------------------------\n// Keyframes\n// ----------------------------------------------------------------------------\n\n// Continuous pulse animation\n@keyframes pulse {\n  0% {\n    box-shadow: 0 0 0 0 var(--md-default-fg-color--lightest);\n    transform: scale(0.95);\n  }\n\n  75% {\n    box-shadow: 0 0 0 px2em(10px) transparent;\n    transform: scale(1);\n  }\n\n  100% {\n    box-shadow: 0 0 0 0 transparent;\n    transform: scale(0.95);\n  }\n}\n\n// ----------------------------------------------------------------------------\n// Rules\n// ----------------------------------------------------------------------------\n\n// Tooltip variables\n:root {\n  --md-tooltip-width: #{px2rem(400px)};\n}\n\n// ----------------------------------------------------------------------------\n\n// Tooltip\n.md-tooltip {\n  position: absolute;\n  top: var(--md-tooltip-y);\n  left:\n    clamp(\n      var(--md-tooltip-0, #{px2rem(0px)}) + #{px2rem(16px)},\n      var(--md-tooltip-x),\n      100vw +\n      var(--md-tooltip-0, #{px2rem(0px)}) + #{px2rem(16px)} -\n      var(--md-tooltip-width) -\n      2 * #{px2rem(16px)}\n    );\n  // Hack: set an explicit `z-index` so we can transition it to ensure that any\n  // following elements are not overlaying the tooltip during the transition.\n  z-index: 0;\n  width: var(--md-tooltip-width);\n  max-width: calc(100vw - 2 * #{px2rem(16px)});\n  color: var(--md-default-fg-color);\n  font-family: var(--md-text-font-family);\n  background-color: var(--md-default-bg-color);\n  border-radius: px2rem(2px);\n  box-shadow: var(--md-shadow-z2);\n  transform: translateY(px2rem(-8px));\n  // Hack: promote to own layer to reduce jitter\n  backface-visibility: hidden;\n  opacity: 0;\n  transition:\n    transform 0ms 250ms,\n    opacity 250ms,\n    z-index 250ms;\n\n  // Active tooltip\n  &--active {\n    z-index: 2;\n    transform: translateY(0);\n    opacity: 1;\n    transition:\n      transform 250ms cubic-bezier(0.1, 0.7, 0.1, 1),\n      opacity   250ms,\n      z-index     0ms;\n  }\n\n  // Show outline on target and for keyboard devices\n  :is(.focus-visible > &, &:target) {\n    outline: var(--md-accent-fg-color) auto;\n  }\n\n  // Tooltip wrapper\n  &__inner {\n    padding: px2rem(16px);\n    font-size: px2rem(12.8px);\n\n    // Adjust spacing on first child\n    &.md-typeset > :first-child {\n      margin-top: 0;\n    }\n\n    // Adjust spacing on last child\n    &.md-typeset > :last-child {\n      margin-bottom: 0;\n    }\n  }\n}\n\n// ----------------------------------------------------------------------------\n\n// Annotation\n.md-annotation {\n  font-weight: 400;\n  white-space: normal;\n  outline: none;\n\n  // Adjust for right-to-left languages\n  [dir=\"rtl\"] & {\n    direction: rtl;\n  }\n\n  // Annotation is not hidden (e.g. when copying)\n  &:not([hidden]) {\n    display: inline-block;\n    // Hack: ensure that the line height doesn't exceed the line height of the\n    // hosting line, because it will lead to dancing pixels.\n    line-height: 1.325;\n  }\n\n  // Annotation index\n  &__index {\n    position: relative;\n    z-index: 0;\n    margin: 0 1ch;\n    font-size: px2em(13.6px, 16px);\n    font-family: var(--md-code-font-family);\n    outline: none;\n    cursor: pointer;\n    user-select: none;\n\n    // Hack: increase specificity to override default for anchors\n    .md-annotation & {\n      color: hsla(0, 0%, 100%, 1);\n      transition: z-index 250ms;\n\n      // Text link on focus/hover\n      &:is(:focus, :hover) {\n        color: hsla(0, 0%, 100%, 1);\n      }\n    }\n\n    // Annotation marker \u2013 the marker must be positioned absolutely behind\n    // the index, because it shouldn't impact the rendering of a code block.\n    // Otherwise, small rounding differences in browsers can sometimes mess up\n    // alignment of text following an annotation.\n    &::after {\n      position: absolute;\n      top: 0;\n      left: px2em(-2px);\n      z-index: -1;\n      // Hack: the first property is used as a fallback for older browsers\n      // which don't support the min/max/clamp math functions.\n      width: calc(100% + 1.2ch);\n      width: max(2.2ch, 100% + 1.2ch);\n      height: 2.2ch;\n      margin: 0 -0.4ch;\n      padding: 0 0.4ch;\n      background-color: var(--md-default-fg-color--lighter);\n      border-radius: 2ch;\n      transition:\n        color            250ms,\n        background-color 250ms;\n      content: \"\";\n\n      // [reduced motion]: Disable animation\n      @media not all and (prefers-reduced-motion) {\n\n        // Annotation marker is visible\n        [data-md-visible] > & {\n          animation: pulse 2000ms infinite;\n        }\n      }\n\n      // Annotation marker for active tooltip\n      .md-tooltip--active + & {\n        transition:\n          color            250ms,\n          background-color 250ms;\n        animation: none;\n      }\n    }\n\n    // Annotation index in code block\n    code & {\n      font-size: inherit;\n      font-family: var(--md-code-font-family);\n    }\n\n    // Annotation index for active tooltip or on hover\n    :is(.md-tooltip--active + &, :hover > &) {\n      color: var(--md-accent-bg-color);\n\n      // Annotation marker\n      &::after {\n        background-color: var(--md-accent-fg-color);\n      }\n    }\n\n    // Annotation index for active tooltip\n    .md-tooltip--active + & {\n      z-index: 2;\n      transition: none;\n      animation: none;\n    }\n\n    // Annotation marker\n    [data-md-annotation-id] {\n      display: inline-block;\n      line-height: 90%;\n\n      // Annotation marker content\n      &::before {\n        display: inline-block;\n        padding-bottom: 0.1em;\n        vertical-align: 0.065em;\n        transform: scale(1.15);\n        transition: transform 400ms cubic-bezier(0.1, 0.7, 0.1, 1);\n        content: attr(data-md-annotation-id);\n\n        // [not print]: if we're not in print mode, show a `+` sign instead of\n        // the original numbers, as context is already given by the position.\n        @media not print {\n          content: \"+\";\n\n          // Annotation marker content on focus\n          :focus-within > & {\n            transform: scale(1.25) rotate(45deg);\n          }\n        }\n      }\n    }\n  }\n}\n", "////\n/// Copyright (c) 2016-2022 Martin Donath \n///\n/// Permission is hereby granted, free of charge, to any person obtaining a\n/// copy of this software and associated documentation files (the \"Software\"),\n/// to deal in the Software without restriction, including without limitation\n/// the rights to use, copy, modify, merge, publish, distribute, sublicense,\n/// and/or sell copies of the Software, and to permit persons to whom the\n/// Software is furnished to do so, subject to the following conditions:\n///\n/// The above copyright notice and this permission notice shall be included in\n/// all copies or substantial portions of the Software.\n///\n/// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n/// FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL\n/// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n/// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n/// DEALINGS\n////\n\n// ----------------------------------------------------------------------------\n// Rules\n// ----------------------------------------------------------------------------\n\n// Back-to-top button\n.md-top {\n  position: fixed;\n  top: px2rem(48px + 16px);\n  z-index: 2;\n  display: block;\n  margin-inline-start: 50%;\n  padding: px2rem(8px) px2rem(16px);\n  color: var(--md-default-fg-color--light);\n  font-size: px2rem(14px);\n  background-color: var(--md-default-bg-color);\n  border-radius: px2rem(32px);\n  outline: none;\n  box-shadow: var(--md-shadow-z2);\n  transform: translate(-50%, 0);\n  transition:\n    color            125ms,\n    background-color 125ms,\n    transform        125ms cubic-bezier(0.4, 0, 0.2, 1),\n    opacity          125ms;\n\n  // [print]: Hide back-to-top button\n  @media print {\n    display: none;\n  }\n\n  // Adjust for right-to-left languages\n  [dir=\"rtl\"] & {\n    transform: translate(50%, 0);\n  }\n\n  // Back-to-top button is hidden\n  &[hidden] {\n    transform: translate(-50%, px2rem(4px));\n    opacity: 0;\n    transition-duration: 0ms;\n    pointer-events: none;\n\n    // Adjust for right-to-left languages\n    [dir=\"rtl\"] & {\n      transform: translate(50%, px2rem(4px));\n    }\n  }\n\n  // Back-to-top button on focus/hover\n  &:is(:focus, :hover) {\n    color: var(--md-accent-bg-color);\n    background-color: var(--md-accent-fg-color);\n  }\n\n  // Inline icon\n  svg {\n    display: inline-block;\n    vertical-align: -0.5em;\n  }\n}\n", "////\n/// Copyright (c) 2016-2022 Martin Donath \n///\n/// Permission is hereby granted, free of charge, to any person obtaining a\n/// copy of this software and associated documentation files (the \"Software\"),\n/// to deal in the Software without restriction, including without limitation\n/// the rights to use, copy, modify, merge, publish, distribute, sublicense,\n/// and/or sell copies of the Software, and to permit persons to whom the\n/// Software is furnished to do so, subject to the following conditions:\n///\n/// The above copyright notice and this permission notice shall be included in\n/// all copies or substantial portions of the Software.\n///\n/// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n/// FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL\n/// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n/// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n/// DEALINGS\n////\n\n// ----------------------------------------------------------------------------\n// Keyframes\n// ----------------------------------------------------------------------------\n\n// See https://github.com/squidfunk/mkdocs-material/issues/2429\n@keyframes hoverfix {\n  0% {\n    pointer-events: none;\n  }\n}\n\n// ----------------------------------------------------------------------------\n// Rules\n// ----------------------------------------------------------------------------\n\n// Version selection variables\n:root {\n  --md-version-icon: svg-load(\"fontawesome/solid/caret-down.svg\");\n}\n\n// ----------------------------------------------------------------------------\n\n// Version selection\n.md-version {\n  flex-shrink: 0;\n  height: px2rem(48px);\n  font-size: px2rem(16px);\n\n  // Current selection\n  &__current {\n    position: relative;\n    // Hack: in general, we would use `vertical-align` to align the version at\n    // the bottom with the title, but since the list uses absolute positioning,\n    // this won't work consistently. Furthermore, we would need to use inline\n    // positioning to align the links, which looks jagged.\n    top: px2rem(1px);\n    margin-inline: px2rem(28px) px2rem(8px);\n    color: inherit;\n    outline: none;\n    cursor: pointer;\n\n    // Version selection icon\n    &::after {\n      display: inline-block;\n      width: px2rem(8px);\n      height: px2rem(12px);\n      margin-inline-start: px2rem(8px);\n      background-color: currentcolor;\n      mask-image: var(--md-version-icon);\n      mask-position: center;\n      mask-repeat: no-repeat;\n      mask-size: contain;\n      content: \"\";\n    }\n  }\n\n  // Version selection list\n  &__list {\n    position: absolute;\n    top: px2rem(3px);\n    z-index: 3;\n    max-height: 0;\n    margin: px2rem(4px) px2rem(16px);\n    padding: 0;\n    overflow: auto;\n    color: var(--md-default-fg-color);\n    list-style-type: none;\n    background-color: var(--md-default-bg-color);\n    border-radius: px2rem(2px);\n    box-shadow: var(--md-shadow-z2);\n    opacity: 0;\n    transition:\n      max-height 0ms 500ms,\n      opacity  250ms 250ms;\n    scroll-snap-type: y mandatory;\n\n    // Version selection list on parent focus/hover\n    .md-version:is(:focus-within, :hover) & {\n      max-height: px2rem(200px);\n      opacity: 1;\n      transition:\n        max-height 0ms,\n        opacity  250ms;\n    }\n\n    // Fix hover on touch devices\n    @media (pointer: coarse) {\n\n      // Switch off on hover\n      .md-version:hover & {\n        animation: hoverfix 250ms forwards;\n      }\n\n      // Enable on focus\n      .md-version:focus-within & {\n        animation: none;\n      }\n    }\n  }\n\n  // Version selection item\n  &__item {\n    line-height: px2rem(36px);\n  }\n\n  // Version selection link\n  &__link {\n    display: block;\n    width: 100%;\n    padding-inline: px2rem(12px) px2rem(24px);\n    white-space: nowrap;\n    outline: none;\n    cursor: pointer;\n    transition:\n      color            250ms,\n      background-color 250ms;\n    scroll-snap-align: start;\n\n    // Link on focus/hover\n    &:is(:focus, :hover) {\n      color: var(--md-accent-fg-color);\n    }\n\n    // Link on focus\n    &:focus {\n      background-color: var(--md-default-fg-color--lightest);\n    }\n  }\n}\n", "////\n/// Copyright (c) 2016-2022 Martin Donath \n///\n/// Permission is hereby granted, free of charge, to any person obtaining a\n/// copy of this software and associated documentation files (the \"Software\"),\n/// to deal in the Software without restriction, including without limitation\n/// the rights to use, copy, modify, merge, publish, distribute, sublicense,\n/// and/or sell copies of the Software, and to permit persons to whom the\n/// Software is furnished to do so, subject to the following conditions:\n///\n/// The above copyright notice and this permission notice shall be included in\n/// all copies or substantial portions of the Software.\n///\n/// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n/// FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL\n/// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n/// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n/// DEALINGS\n////\n\n@use \"sass:color\";\n@use \"sass:list\";\n\n// ----------------------------------------------------------------------------\n// Variables\n// ----------------------------------------------------------------------------\n\n/// Admonition flavours\n$admonitions: (\n  note:                       pencil-circle $clr-blue-a200,\n  abstract summary tldr:      clipboard-text $clr-light-blue-a400,\n  info todo:                  information $clr-cyan-a700,\n  tip hint important:         fire $clr-teal-a700,\n  success check done:         check $clr-green-a700,\n  question help faq:          help-circle $clr-light-green-a700,\n  warning caution attention:  alert $clr-orange-a400,\n  failure fail missing:       close $clr-red-a200,\n  danger error:               lightning-bolt-circle $clr-red-a400,\n  bug:                        shield-bug $clr-pink-a400,\n  example:                    test-tube $clr-deep-purple-a200,\n  quote cite:                 format-quote-close $clr-grey\n) !default;\n\n// ----------------------------------------------------------------------------\n// Rules: layout\n// ----------------------------------------------------------------------------\n\n// Admonition variables\n:root {\n  @each $names, $props in $admonitions {\n    --md-admonition-icon--#{nth($names, 1)}:\n      svg-load(\"material/#{nth($props, 1)}.svg\");\n  }\n}\n\n// ----------------------------------------------------------------------------\n\n// Scoped in typesetted content to match specificity of regular content\n.md-typeset {\n\n  // Admonition - note that all styles also apply to details tags, which are\n  // rendered as collapsible admonitions with summary elements as titles.\n  .admonition,\n  details {\n    display: flow-root;\n    margin: px2em(20px, 12.8px) 0;\n    padding: 0 px2rem(12px);\n    color: var(--md-admonition-fg-color);\n    font-size: px2rem(12.8px);\n    page-break-inside: avoid;\n    background-color: var(--md-admonition-bg-color);\n    border: px2rem(1px) solid $clr-blue-a200;\n    border-radius: px2rem(4px);\n    box-shadow: var(--md-shadow-z1);\n\n    // [print]: Omit shadow as it may lead to rendering errors\n    @media print {\n      box-shadow: none;\n    }\n\n    // Hack: Chrome exhibits a weird issue where it will set nested elements to\n    // content-box. Doesn't happen in other browsers, so looks like a bug.\n    > * {\n      box-sizing: border-box;\n    }\n\n    // Adjust vertical spacing for nested admonitions\n    :is(.admonition, details) {\n      margin-top: 1em;\n      margin-bottom: 1em;\n    }\n\n    // Adjust spacing for contained table wrappers\n    .md-typeset__scrollwrap {\n      margin: 1em px2rem(-12px);\n    }\n\n    // Adjust spacing for contained tables\n    .md-typeset__table {\n      padding: 0 px2rem(12px);\n    }\n\n    // Adjust spacing for single-child tabbed block container\n    > .tabbed-set:only-child {\n      margin-top: 0;\n    }\n\n    // Adjust spacing on last child\n    html & > :last-child {\n      margin-bottom: px2rem(12px);\n    }\n  }\n\n  // Admonition title\n  .admonition-title,\n  summary {\n    position: relative;\n    margin-block: 0;\n    margin-inline: px2rem(-12px);\n    padding-block: px2rem(8px);\n    padding-inline: px2rem(40px) px2rem(12px);\n    font-weight: 700;\n    background-color: color.adjust($clr-blue-a200, $alpha: -0.9);\n    border: none;\n    border-inline-start-width: px2rem(4px);\n    border-start-start-radius: px2rem(2px);\n    border-start-end-radius: px2rem(2px);\n\n    // Adjust spacing for title-only admonitions\n    html &:last-child {\n      margin-bottom: 0;\n    }\n\n    // Admonition icon\n    &::before {\n      position: absolute;\n      top: px2em(10px);\n      inset-inline-start: px2rem(12px);\n      width: px2rem(20px);\n      height: px2rem(20px);\n      background-color: $clr-blue-a200;\n      mask-image: var(--md-admonition-icon--note);\n      mask-position: center;\n      mask-repeat: no-repeat;\n      mask-size: contain;\n      content: \"\";\n    }\n\n    // Inline code block\n    code {\n      box-shadow: 0 0 0 px2rem(1px) var(--md-default-fg-color--lightest);\n    }\n  }\n}\n\n// ----------------------------------------------------------------------------\n// Rules: flavours\n// ----------------------------------------------------------------------------\n\n// Define admonition flavors\n@each $names, $props in $admonitions {\n  $name: list.nth($names, 1);\n  $tint: list.nth($props, 2);\n\n  // Admonition flavour selectors\n  $flavours: ();\n  @each $name in $names {\n    $flavours: list.join($flavours, \".#{$name}\", $separator: comma);\n  }\n\n  // Admonition flavour\n  .md-typeset :is(.admonition, details):is(#{$flavours}) {\n    border-color: $tint;\n  }\n\n  // Admonition flavour title\n  .md-typeset :is(#{$flavours}) > :is(.admonition-title, summary) {\n    background-color: color.adjust($tint, $alpha: -0.9);\n\n    // Admonition icon\n    &::before {\n      background-color: $tint;\n      mask-image: var(--md-admonition-icon--#{$name});\n    }\n\n    // Details marker\n    &::after {\n      color: $tint;\n    }\n  }\n}\n", "// ==========================================================================\n//\n// Name:        UI Color Palette\n// Description: The color palette of material design.\n// Version:     2.3.1\n//\n// Author:      Denis Malinochkin\n// Git:         https://github.com/mrmlnc/material-color\n//\n// twitter:     @mrmlnc\n//\n// ==========================================================================\n\n\n//\n// List of base colors\n//\n\n// $clr-red\n// $clr-pink\n// $clr-purple\n// $clr-deep-purple\n// $clr-indigo\n// $clr-blue\n// $clr-light-blue\n// $clr-cyan\n// $clr-teal\n// $clr-green\n// $clr-light-green\n// $clr-lime\n// $clr-yellow\n// $clr-amber\n// $clr-orange\n// $clr-deep-orange\n// $clr-brown\n// $clr-grey\n// $clr-blue-grey\n// $clr-black\n// $clr-white\n\n\n//\n// Red\n//\n\n$clr-red-list: (\n  \"base\": #f44336,\n  \"50\":   #ffebee,\n  \"100\":  #ffcdd2,\n  \"200\":  #ef9a9a,\n  \"300\":  #e57373,\n  \"400\":  #ef5350,\n  \"500\":  #f44336,\n  \"600\":  #e53935,\n  \"700\":  #d32f2f,\n  \"800\":  #c62828,\n  \"900\":  #b71c1c,\n  \"a100\": #ff8a80,\n  \"a200\": #ff5252,\n  \"a400\": #ff1744,\n  \"a700\": #d50000\n);\n\n$clr-red:      map-get($clr-red-list, \"base\");\n\n$clr-red-50:   map-get($clr-red-list, \"50\");\n$clr-red-100:  map-get($clr-red-list, \"100\");\n$clr-red-200:  map-get($clr-red-list, \"200\");\n$clr-red-300:  map-get($clr-red-list, \"300\");\n$clr-red-400:  map-get($clr-red-list, \"400\");\n$clr-red-500:  map-get($clr-red-list, \"500\");\n$clr-red-600:  map-get($clr-red-list, \"600\");\n$clr-red-700:  map-get($clr-red-list, \"700\");\n$clr-red-800:  map-get($clr-red-list, \"800\");\n$clr-red-900:  map-get($clr-red-list, \"900\");\n$clr-red-a100: map-get($clr-red-list, \"a100\");\n$clr-red-a200: map-get($clr-red-list, \"a200\");\n$clr-red-a400: map-get($clr-red-list, \"a400\");\n$clr-red-a700: map-get($clr-red-list, \"a700\");\n\n\n//\n// Pink\n//\n\n$clr-pink-list: (\n  \"base\": #e91e63,\n  \"50\":   #fce4ec,\n  \"100\":  #f8bbd0,\n  \"200\":  #f48fb1,\n  \"300\":  #f06292,\n  \"400\":  #ec407a,\n  \"500\":  #e91e63,\n  \"600\":  #d81b60,\n  \"700\":  #c2185b,\n  \"800\":  #ad1457,\n  \"900\":  #880e4f,\n  \"a100\": #ff80ab,\n  \"a200\": #ff4081,\n  \"a400\": #f50057,\n  \"a700\": #c51162\n);\n\n$clr-pink:      map-get($clr-pink-list, \"base\");\n\n$clr-pink-50:   map-get($clr-pink-list, \"50\");\n$clr-pink-100:  map-get($clr-pink-list, \"100\");\n$clr-pink-200:  map-get($clr-pink-list, \"200\");\n$clr-pink-300:  map-get($clr-pink-list, \"300\");\n$clr-pink-400:  map-get($clr-pink-list, \"400\");\n$clr-pink-500:  map-get($clr-pink-list, \"500\");\n$clr-pink-600:  map-get($clr-pink-list, \"600\");\n$clr-pink-700:  map-get($clr-pink-list, \"700\");\n$clr-pink-800:  map-get($clr-pink-list, \"800\");\n$clr-pink-900:  map-get($clr-pink-list, \"900\");\n$clr-pink-a100: map-get($clr-pink-list, \"a100\");\n$clr-pink-a200: map-get($clr-pink-list, \"a200\");\n$clr-pink-a400: map-get($clr-pink-list, \"a400\");\n$clr-pink-a700: map-get($clr-pink-list, \"a700\");\n\n\n//\n// Purple\n//\n\n$clr-purple-list: (\n  \"base\": #9c27b0,\n  \"50\":   #f3e5f5,\n  \"100\":  #e1bee7,\n  \"200\":  #ce93d8,\n  \"300\":  #ba68c8,\n  \"400\":  #ab47bc,\n  \"500\":  #9c27b0,\n  \"600\":  #8e24aa,\n  \"700\":  #7b1fa2,\n  \"800\":  #6a1b9a,\n  \"900\":  #4a148c,\n  \"a100\": #ea80fc,\n  \"a200\": #e040fb,\n  \"a400\": #d500f9,\n  \"a700\": #aa00ff\n);\n\n$clr-purple:      map-get($clr-purple-list, \"base\");\n\n$clr-purple-50:   map-get($clr-purple-list, \"50\");\n$clr-purple-100:  map-get($clr-purple-list, \"100\");\n$clr-purple-200:  map-get($clr-purple-list, \"200\");\n$clr-purple-300:  map-get($clr-purple-list, \"300\");\n$clr-purple-400:  map-get($clr-purple-list, \"400\");\n$clr-purple-500:  map-get($clr-purple-list, \"500\");\n$clr-purple-600:  map-get($clr-purple-list, \"600\");\n$clr-purple-700:  map-get($clr-purple-list, \"700\");\n$clr-purple-800:  map-get($clr-purple-list, \"800\");\n$clr-purple-900:  map-get($clr-purple-list, \"900\");\n$clr-purple-a100: map-get($clr-purple-list, \"a100\");\n$clr-purple-a200: map-get($clr-purple-list, \"a200\");\n$clr-purple-a400: map-get($clr-purple-list, \"a400\");\n$clr-purple-a700: map-get($clr-purple-list, \"a700\");\n\n\n//\n// Deep purple\n//\n\n$clr-deep-purple-list: (\n  \"base\": #673ab7,\n  \"50\":   #ede7f6,\n  \"100\":  #d1c4e9,\n  \"200\":  #b39ddb,\n  \"300\":  #9575cd,\n  \"400\":  #7e57c2,\n  \"500\":  #673ab7,\n  \"600\":  #5e35b1,\n  \"700\":  #512da8,\n  \"800\":  #4527a0,\n  \"900\":  #311b92,\n  \"a100\": #b388ff,\n  \"a200\": #7c4dff,\n  \"a400\": #651fff,\n  \"a700\": #6200ea\n);\n\n$clr-deep-purple:      map-get($clr-deep-purple-list, \"base\");\n\n$clr-deep-purple-50:   map-get($clr-deep-purple-list, \"50\");\n$clr-deep-purple-100:  map-get($clr-deep-purple-list, \"100\");\n$clr-deep-purple-200:  map-get($clr-deep-purple-list, \"200\");\n$clr-deep-purple-300:  map-get($clr-deep-purple-list, \"300\");\n$clr-deep-purple-400:  map-get($clr-deep-purple-list, \"400\");\n$clr-deep-purple-500:  map-get($clr-deep-purple-list, \"500\");\n$clr-deep-purple-600:  map-get($clr-deep-purple-list, \"600\");\n$clr-deep-purple-700:  map-get($clr-deep-purple-list, \"700\");\n$clr-deep-purple-800:  map-get($clr-deep-purple-list, \"800\");\n$clr-deep-purple-900:  map-get($clr-deep-purple-list, \"900\");\n$clr-deep-purple-a100: map-get($clr-deep-purple-list, \"a100\");\n$clr-deep-purple-a200: map-get($clr-deep-purple-list, \"a200\");\n$clr-deep-purple-a400: map-get($clr-deep-purple-list, \"a400\");\n$clr-deep-purple-a700: map-get($clr-deep-purple-list, \"a700\");\n\n\n//\n// Indigo\n//\n\n$clr-indigo-list: (\n  \"base\": #3f51b5,\n  \"50\":   #e8eaf6,\n  \"100\":  #c5cae9,\n  \"200\":  #9fa8da,\n  \"300\":  #7986cb,\n  \"400\":  #5c6bc0,\n  \"500\":  #3f51b5,\n  \"600\":  #3949ab,\n  \"700\":  #303f9f,\n  \"800\":  #283593,\n  \"900\":  #1a237e,\n  \"a100\": #8c9eff,\n  \"a200\": #536dfe,\n  \"a400\": #3d5afe,\n  \"a700\": #304ffe\n);\n\n$clr-indigo:      map-get($clr-indigo-list, \"base\");\n\n$clr-indigo-50:   map-get($clr-indigo-list, \"50\");\n$clr-indigo-100:  map-get($clr-indigo-list, \"100\");\n$clr-indigo-200:  map-get($clr-indigo-list, \"200\");\n$clr-indigo-300:  map-get($clr-indigo-list, \"300\");\n$clr-indigo-400:  map-get($clr-indigo-list, \"400\");\n$clr-indigo-500:  map-get($clr-indigo-list, \"500\");\n$clr-indigo-600:  map-get($clr-indigo-list, \"600\");\n$clr-indigo-700:  map-get($clr-indigo-list, \"700\");\n$clr-indigo-800:  map-get($clr-indigo-list, \"800\");\n$clr-indigo-900:  map-get($clr-indigo-list, \"900\");\n$clr-indigo-a100: map-get($clr-indigo-list, \"a100\");\n$clr-indigo-a200: map-get($clr-indigo-list, \"a200\");\n$clr-indigo-a400: map-get($clr-indigo-list, \"a400\");\n$clr-indigo-a700: map-get($clr-indigo-list, \"a700\");\n\n\n//\n// Blue\n//\n\n$clr-blue-list: (\n  \"base\": #2196f3,\n  \"50\":   #e3f2fd,\n  \"100\":  #bbdefb,\n  \"200\":  #90caf9,\n  \"300\":  #64b5f6,\n  \"400\":  #42a5f5,\n  \"500\":  #2196f3,\n  \"600\":  #1e88e5,\n  \"700\":  #1976d2,\n  \"800\":  #1565c0,\n  \"900\":  #0d47a1,\n  \"a100\": #82b1ff,\n  \"a200\": #448aff,\n  \"a400\": #2979ff,\n  \"a700\": #2962ff\n);\n\n$clr-blue:      map-get($clr-blue-list, \"base\");\n\n$clr-blue-50:   map-get($clr-blue-list, \"50\");\n$clr-blue-100:  map-get($clr-blue-list, \"100\");\n$clr-blue-200:  map-get($clr-blue-list, \"200\");\n$clr-blue-300:  map-get($clr-blue-list, \"300\");\n$clr-blue-400:  map-get($clr-blue-list, \"400\");\n$clr-blue-500:  map-get($clr-blue-list, \"500\");\n$clr-blue-600:  map-get($clr-blue-list, \"600\");\n$clr-blue-700:  map-get($clr-blue-list, \"700\");\n$clr-blue-800:  map-get($clr-blue-list, \"800\");\n$clr-blue-900:  map-get($clr-blue-list, \"900\");\n$clr-blue-a100: map-get($clr-blue-list, \"a100\");\n$clr-blue-a200: map-get($clr-blue-list, \"a200\");\n$clr-blue-a400: map-get($clr-blue-list, \"a400\");\n$clr-blue-a700: map-get($clr-blue-list, \"a700\");\n\n\n//\n// Light Blue\n//\n\n$clr-light-blue-list: (\n  \"base\": #03a9f4,\n  \"50\":   #e1f5fe,\n  \"100\":  #b3e5fc,\n  \"200\":  #81d4fa,\n  \"300\":  #4fc3f7,\n  \"400\":  #29b6f6,\n  \"500\":  #03a9f4,\n  \"600\":  #039be5,\n  \"700\":  #0288d1,\n  \"800\":  #0277bd,\n  \"900\":  #01579b,\n  \"a100\": #80d8ff,\n  \"a200\": #40c4ff,\n  \"a400\": #00b0ff,\n  \"a700\": #0091ea\n);\n\n$clr-light-blue:      map-get($clr-light-blue-list, \"base\");\n\n$clr-light-blue-50:   map-get($clr-light-blue-list, \"50\");\n$clr-light-blue-100:  map-get($clr-light-blue-list, \"100\");\n$clr-light-blue-200:  map-get($clr-light-blue-list, \"200\");\n$clr-light-blue-300:  map-get($clr-light-blue-list, \"300\");\n$clr-light-blue-400:  map-get($clr-light-blue-list, \"400\");\n$clr-light-blue-500:  map-get($clr-light-blue-list, \"500\");\n$clr-light-blue-600:  map-get($clr-light-blue-list, \"600\");\n$clr-light-blue-700:  map-get($clr-light-blue-list, \"700\");\n$clr-light-blue-800:  map-get($clr-light-blue-list, \"800\");\n$clr-light-blue-900:  map-get($clr-light-blue-list, \"900\");\n$clr-light-blue-a100: map-get($clr-light-blue-list, \"a100\");\n$clr-light-blue-a200: map-get($clr-light-blue-list, \"a200\");\n$clr-light-blue-a400: map-get($clr-light-blue-list, \"a400\");\n$clr-light-blue-a700: map-get($clr-light-blue-list, \"a700\");\n\n\n//\n// Cyan\n//\n\n$clr-cyan-list: (\n  \"base\": #00bcd4,\n  \"50\":   #e0f7fa,\n  \"100\":  #b2ebf2,\n  \"200\":  #80deea,\n  \"300\":  #4dd0e1,\n  \"400\":  #26c6da,\n  \"500\":  #00bcd4,\n  \"600\":  #00acc1,\n  \"700\":  #0097a7,\n  \"800\":  #00838f,\n  \"900\":  #006064,\n  \"a100\": #84ffff,\n  \"a200\": #18ffff,\n  \"a400\": #00e5ff,\n  \"a700\": #00b8d4\n);\n\n$clr-cyan:      map-get($clr-cyan-list, \"base\");\n\n$clr-cyan-50:   map-get($clr-cyan-list, \"50\");\n$clr-cyan-100:  map-get($clr-cyan-list, \"100\");\n$clr-cyan-200:  map-get($clr-cyan-list, \"200\");\n$clr-cyan-300:  map-get($clr-cyan-list, \"300\");\n$clr-cyan-400:  map-get($clr-cyan-list, \"400\");\n$clr-cyan-500:  map-get($clr-cyan-list, \"500\");\n$clr-cyan-600:  map-get($clr-cyan-list, \"600\");\n$clr-cyan-700:  map-get($clr-cyan-list, \"700\");\n$clr-cyan-800:  map-get($clr-cyan-list, \"800\");\n$clr-cyan-900:  map-get($clr-cyan-list, \"900\");\n$clr-cyan-a100: map-get($clr-cyan-list, \"a100\");\n$clr-cyan-a200: map-get($clr-cyan-list, \"a200\");\n$clr-cyan-a400: map-get($clr-cyan-list, \"a400\");\n$clr-cyan-a700: map-get($clr-cyan-list, \"a700\");\n\n\n//\n// Teal\n//\n\n$clr-teal-list: (\n  \"base\": #009688,\n  \"50\":   #e0f2f1,\n  \"100\":  #b2dfdb,\n  \"200\":  #80cbc4,\n  \"300\":  #4db6ac,\n  \"400\":  #26a69a,\n  \"500\":  #009688,\n  \"600\":  #00897b,\n  \"700\":  #00796b,\n  \"800\":  #00695c,\n  \"900\":  #004d40,\n  \"a100\": #a7ffeb,\n  \"a200\": #64ffda,\n  \"a400\": #1de9b6,\n  \"a700\": #00bfa5\n);\n\n$clr-teal:      map-get($clr-teal-list, \"base\");\n\n$clr-teal-50:   map-get($clr-teal-list, \"50\");\n$clr-teal-100:  map-get($clr-teal-list, \"100\");\n$clr-teal-200:  map-get($clr-teal-list, \"200\");\n$clr-teal-300:  map-get($clr-teal-list, \"300\");\n$clr-teal-400:  map-get($clr-teal-list, \"400\");\n$clr-teal-500:  map-get($clr-teal-list, \"500\");\n$clr-teal-600:  map-get($clr-teal-list, \"600\");\n$clr-teal-700:  map-get($clr-teal-list, \"700\");\n$clr-teal-800:  map-get($clr-teal-list, \"800\");\n$clr-teal-900:  map-get($clr-teal-list, \"900\");\n$clr-teal-a100: map-get($clr-teal-list, \"a100\");\n$clr-teal-a200: map-get($clr-teal-list, \"a200\");\n$clr-teal-a400: map-get($clr-teal-list, \"a400\");\n$clr-teal-a700: map-get($clr-teal-list, \"a700\");\n\n\n//\n// Green\n//\n\n$clr-green-list: (\n  \"base\": #4caf50,\n  \"50\":   #e8f5e9,\n  \"100\":  #c8e6c9,\n  \"200\":  #a5d6a7,\n  \"300\":  #81c784,\n  \"400\":  #66bb6a,\n  \"500\":  #4caf50,\n  \"600\":  #43a047,\n  \"700\":  #388e3c,\n  \"800\":  #2e7d32,\n  \"900\":  #1b5e20,\n  \"a100\": #b9f6ca,\n  \"a200\": #69f0ae,\n  \"a400\": #00e676,\n  \"a700\": #00c853\n);\n\n$clr-green:      map-get($clr-green-list, \"base\");\n\n$clr-green-50:   map-get($clr-green-list, \"50\");\n$clr-green-100:  map-get($clr-green-list, \"100\");\n$clr-green-200:  map-get($clr-green-list, \"200\");\n$clr-green-300:  map-get($clr-green-list, \"300\");\n$clr-green-400:  map-get($clr-green-list, \"400\");\n$clr-green-500:  map-get($clr-green-list, \"500\");\n$clr-green-600:  map-get($clr-green-list, \"600\");\n$clr-green-700:  map-get($clr-green-list, \"700\");\n$clr-green-800:  map-get($clr-green-list, \"800\");\n$clr-green-900:  map-get($clr-green-list, \"900\");\n$clr-green-a100: map-get($clr-green-list, \"a100\");\n$clr-green-a200: map-get($clr-green-list, \"a200\");\n$clr-green-a400: map-get($clr-green-list, \"a400\");\n$clr-green-a700: map-get($clr-green-list, \"a700\");\n\n\n//\n// Light green\n//\n\n$clr-light-green-list: (\n  \"base\": #8bc34a,\n  \"50\":   #f1f8e9,\n  \"100\":  #dcedc8,\n  \"200\":  #c5e1a5,\n  \"300\":  #aed581,\n  \"400\":  #9ccc65,\n  \"500\":  #8bc34a,\n  \"600\":  #7cb342,\n  \"700\":  #689f38,\n  \"800\":  #558b2f,\n  \"900\":  #33691e,\n  \"a100\": #ccff90,\n  \"a200\": #b2ff59,\n  \"a400\": #76ff03,\n  \"a700\": #64dd17\n);\n\n$clr-light-green:      map-get($clr-light-green-list, \"base\");\n\n$clr-light-green-50:   map-get($clr-light-green-list, \"50\");\n$clr-light-green-100:  map-get($clr-light-green-list, \"100\");\n$clr-light-green-200:  map-get($clr-light-green-list, \"200\");\n$clr-light-green-300:  map-get($clr-light-green-list, \"300\");\n$clr-light-green-400:  map-get($clr-light-green-list, \"400\");\n$clr-light-green-500:  map-get($clr-light-green-list, \"500\");\n$clr-light-green-600:  map-get($clr-light-green-list, \"600\");\n$clr-light-green-700:  map-get($clr-light-green-list, \"700\");\n$clr-light-green-800:  map-get($clr-light-green-list, \"800\");\n$clr-light-green-900:  map-get($clr-light-green-list, \"900\");\n$clr-light-green-a100: map-get($clr-light-green-list, \"a100\");\n$clr-light-green-a200: map-get($clr-light-green-list, \"a200\");\n$clr-light-green-a400: map-get($clr-light-green-list, \"a400\");\n$clr-light-green-a700: map-get($clr-light-green-list, \"a700\");\n\n\n//\n// Lime\n//\n\n$clr-lime-list: (\n  \"base\": #cddc39,\n  \"50\":   #f9fbe7,\n  \"100\":  #f0f4c3,\n  \"200\":  #e6ee9c,\n  \"300\":  #dce775,\n  \"400\":  #d4e157,\n  \"500\":  #cddc39,\n  \"600\":  #c0ca33,\n  \"700\":  #afb42b,\n  \"800\":  #9e9d24,\n  \"900\":  #827717,\n  \"a100\": #f4ff81,\n  \"a200\": #eeff41,\n  \"a400\": #c6ff00,\n  \"a700\": #aeea00\n);\n\n$clr-lime:      map-get($clr-lime-list, \"base\");\n\n$clr-lime-50:   map-get($clr-lime-list, \"50\");\n$clr-lime-100:  map-get($clr-lime-list, \"100\");\n$clr-lime-200:  map-get($clr-lime-list, \"200\");\n$clr-lime-300:  map-get($clr-lime-list, \"300\");\n$clr-lime-400:  map-get($clr-lime-list, \"400\");\n$clr-lime-500:  map-get($clr-lime-list, \"500\");\n$clr-lime-600:  map-get($clr-lime-list, \"600\");\n$clr-lime-700:  map-get($clr-lime-list, \"700\");\n$clr-lime-800:  map-get($clr-lime-list, \"800\");\n$clr-lime-900:  map-get($clr-lime-list, \"900\");\n$clr-lime-a100: map-get($clr-lime-list, \"a100\");\n$clr-lime-a200: map-get($clr-lime-list, \"a200\");\n$clr-lime-a400: map-get($clr-lime-list, \"a400\");\n$clr-lime-a700: map-get($clr-lime-list, \"a700\");\n\n\n//\n// Yellow\n//\n\n$clr-yellow-list: (\n  \"base\": #ffeb3b,\n  \"50\":   #fffde7,\n  \"100\":  #fff9c4,\n  \"200\":  #fff59d,\n  \"300\":  #fff176,\n  \"400\":  #ffee58,\n  \"500\":  #ffeb3b,\n  \"600\":  #fdd835,\n  \"700\":  #fbc02d,\n  \"800\":  #f9a825,\n  \"900\":  #f57f17,\n  \"a100\": #ffff8d,\n  \"a200\": #ffff00,\n  \"a400\": #ffea00,\n  \"a700\": #ffd600\n);\n\n$clr-yellow:      map-get($clr-yellow-list, \"base\");\n\n$clr-yellow-50:   map-get($clr-yellow-list, \"50\");\n$clr-yellow-100:  map-get($clr-yellow-list, \"100\");\n$clr-yellow-200:  map-get($clr-yellow-list, \"200\");\n$clr-yellow-300:  map-get($clr-yellow-list, \"300\");\n$clr-yellow-400:  map-get($clr-yellow-list, \"400\");\n$clr-yellow-500:  map-get($clr-yellow-list, \"500\");\n$clr-yellow-600:  map-get($clr-yellow-list, \"600\");\n$clr-yellow-700:  map-get($clr-yellow-list, \"700\");\n$clr-yellow-800:  map-get($clr-yellow-list, \"800\");\n$clr-yellow-900:  map-get($clr-yellow-list, \"900\");\n$clr-yellow-a100: map-get($clr-yellow-list, \"a100\");\n$clr-yellow-a200: map-get($clr-yellow-list, \"a200\");\n$clr-yellow-a400: map-get($clr-yellow-list, \"a400\");\n$clr-yellow-a700: map-get($clr-yellow-list, \"a700\");\n\n\n//\n// amber\n//\n\n$clr-amber-list: (\n  \"base\": #ffc107,\n  \"50\":   #fff8e1,\n  \"100\":  #ffecb3,\n  \"200\":  #ffe082,\n  \"300\":  #ffd54f,\n  \"400\":  #ffca28,\n  \"500\":  #ffc107,\n  \"600\":  #ffb300,\n  \"700\":  #ffa000,\n  \"800\":  #ff8f00,\n  \"900\":  #ff6f00,\n  \"a100\": #ffe57f,\n  \"a200\": #ffd740,\n  \"a400\": #ffc400,\n  \"a700\": #ffab00\n);\n\n$clr-amber:      map-get($clr-amber-list, \"base\");\n\n$clr-amber-50:   map-get($clr-amber-list, \"50\");\n$clr-amber-100:  map-get($clr-amber-list, \"100\");\n$clr-amber-200:  map-get($clr-amber-list, \"200\");\n$clr-amber-300:  map-get($clr-amber-list, \"300\");\n$clr-amber-400:  map-get($clr-amber-list, \"400\");\n$clr-amber-500:  map-get($clr-amber-list, \"500\");\n$clr-amber-600:  map-get($clr-amber-list, \"600\");\n$clr-amber-700:  map-get($clr-amber-list, \"700\");\n$clr-amber-800:  map-get($clr-amber-list, \"800\");\n$clr-amber-900:  map-get($clr-amber-list, \"900\");\n$clr-amber-a100: map-get($clr-amber-list, \"a100\");\n$clr-amber-a200: map-get($clr-amber-list, \"a200\");\n$clr-amber-a400: map-get($clr-amber-list, \"a400\");\n$clr-amber-a700: map-get($clr-amber-list, \"a700\");\n\n\n//\n// Orange\n//\n\n$clr-orange-list: (\n  \"base\": #ff9800,\n  \"50\":   #fff3e0,\n  \"100\":  #ffe0b2,\n  \"200\":  #ffcc80,\n  \"300\":  #ffb74d,\n  \"400\":  #ffa726,\n  \"500\":  #ff9800,\n  \"600\":  #fb8c00,\n  \"700\":  #f57c00,\n  \"800\":  #ef6c00,\n  \"900\":  #e65100,\n  \"a100\": #ffd180,\n  \"a200\": #ffab40,\n  \"a400\": #ff9100,\n  \"a700\": #ff6d00\n);\n\n$clr-orange:      map-get($clr-orange-list, \"base\");\n\n$clr-orange-50:   map-get($clr-orange-list, \"50\");\n$clr-orange-100:  map-get($clr-orange-list, \"100\");\n$clr-orange-200:  map-get($clr-orange-list, \"200\");\n$clr-orange-300:  map-get($clr-orange-list, \"300\");\n$clr-orange-400:  map-get($clr-orange-list, \"400\");\n$clr-orange-500:  map-get($clr-orange-list, \"500\");\n$clr-orange-600:  map-get($clr-orange-list, \"600\");\n$clr-orange-700:  map-get($clr-orange-list, \"700\");\n$clr-orange-800:  map-get($clr-orange-list, \"800\");\n$clr-orange-900:  map-get($clr-orange-list, \"900\");\n$clr-orange-a100: map-get($clr-orange-list, \"a100\");\n$clr-orange-a200: map-get($clr-orange-list, \"a200\");\n$clr-orange-a400: map-get($clr-orange-list, \"a400\");\n$clr-orange-a700: map-get($clr-orange-list, \"a700\");\n\n\n//\n// Deep orange\n//\n\n$clr-deep-orange-list: (\n  \"base\": #ff5722,\n  \"50\":   #fbe9e7,\n  \"100\":  #ffccbc,\n  \"200\":  #ffab91,\n  \"300\":  #ff8a65,\n  \"400\":  #ff7043,\n  \"500\":  #ff5722,\n  \"600\":  #f4511e,\n  \"700\":  #e64a19,\n  \"800\":  #d84315,\n  \"900\":  #bf360c,\n  \"a100\": #ff9e80,\n  \"a200\": #ff6e40,\n  \"a400\": #ff3d00,\n  \"a700\": #dd2c00\n);\n\n$clr-deep-orange:      map-get($clr-deep-orange-list, \"base\");\n\n$clr-deep-orange-50:   map-get($clr-deep-orange-list, \"50\");\n$clr-deep-orange-100:  map-get($clr-deep-orange-list, \"100\");\n$clr-deep-orange-200:  map-get($clr-deep-orange-list, \"200\");\n$clr-deep-orange-300:  map-get($clr-deep-orange-list, \"300\");\n$clr-deep-orange-400:  map-get($clr-deep-orange-list, \"400\");\n$clr-deep-orange-500:  map-get($clr-deep-orange-list, \"500\");\n$clr-deep-orange-600:  map-get($clr-deep-orange-list, \"600\");\n$clr-deep-orange-700:  map-get($clr-deep-orange-list, \"700\");\n$clr-deep-orange-800:  map-get($clr-deep-orange-list, \"800\");\n$clr-deep-orange-900:  map-get($clr-deep-orange-list, \"900\");\n$clr-deep-orange-a100: map-get($clr-deep-orange-list, \"a100\");\n$clr-deep-orange-a200: map-get($clr-deep-orange-list, \"a200\");\n$clr-deep-orange-a400: map-get($clr-deep-orange-list, \"a400\");\n$clr-deep-orange-a700: map-get($clr-deep-orange-list, \"a700\");\n\n\n//\n// Brown\n//\n\n$clr-brown-list: (\n  \"base\": #795548,\n  \"50\":   #efebe9,\n  \"100\":  #d7ccc8,\n  \"200\":  #bcaaa4,\n  \"300\":  #a1887f,\n  \"400\":  #8d6e63,\n  \"500\":  #795548,\n  \"600\":  #6d4c41,\n  \"700\":  #5d4037,\n  \"800\":  #4e342e,\n  \"900\":  #3e2723,\n);\n\n$clr-brown:     map-get($clr-brown-list, \"base\");\n\n$clr-brown-50:  map-get($clr-brown-list, \"50\");\n$clr-brown-100: map-get($clr-brown-list, \"100\");\n$clr-brown-200: map-get($clr-brown-list, \"200\");\n$clr-brown-300: map-get($clr-brown-list, \"300\");\n$clr-brown-400: map-get($clr-brown-list, \"400\");\n$clr-brown-500: map-get($clr-brown-list, \"500\");\n$clr-brown-600: map-get($clr-brown-list, \"600\");\n$clr-brown-700: map-get($clr-brown-list, \"700\");\n$clr-brown-800: map-get($clr-brown-list, \"800\");\n$clr-brown-900: map-get($clr-brown-list, \"900\");\n\n\n//\n// Grey\n//\n\n$clr-grey-list: (\n  \"base\": #9e9e9e,\n  \"50\":   #fafafa,\n  \"100\":  #f5f5f5,\n  \"200\":  #eeeeee,\n  \"300\":  #e0e0e0,\n  \"400\":  #bdbdbd,\n  \"500\":  #9e9e9e,\n  \"600\":  #757575,\n  \"700\":  #616161,\n  \"800\":  #424242,\n  \"900\":  #212121,\n);\n\n$clr-grey:     map-get($clr-grey-list, \"base\");\n\n$clr-grey-50:  map-get($clr-grey-list, \"50\");\n$clr-grey-100: map-get($clr-grey-list, \"100\");\n$clr-grey-200: map-get($clr-grey-list, \"200\");\n$clr-grey-300: map-get($clr-grey-list, \"300\");\n$clr-grey-400: map-get($clr-grey-list, \"400\");\n$clr-grey-500: map-get($clr-grey-list, \"500\");\n$clr-grey-600: map-get($clr-grey-list, \"600\");\n$clr-grey-700: map-get($clr-grey-list, \"700\");\n$clr-grey-800: map-get($clr-grey-list, \"800\");\n$clr-grey-900: map-get($clr-grey-list, \"900\");\n\n\n//\n// Blue grey\n//\n\n$clr-blue-grey-list: (\n  \"base\": #607d8b,\n  \"50\":   #eceff1,\n  \"100\":  #cfd8dc,\n  \"200\":  #b0bec5,\n  \"300\":  #90a4ae,\n  \"400\":  #78909c,\n  \"500\":  #607d8b,\n  \"600\":  #546e7a,\n  \"700\":  #455a64,\n  \"800\":  #37474f,\n  \"900\":  #263238,\n);\n\n$clr-blue-grey:     map-get($clr-blue-grey-list, \"base\");\n\n$clr-blue-grey-50:  map-get($clr-blue-grey-list, \"50\");\n$clr-blue-grey-100: map-get($clr-blue-grey-list, \"100\");\n$clr-blue-grey-200: map-get($clr-blue-grey-list, \"200\");\n$clr-blue-grey-300: map-get($clr-blue-grey-list, \"300\");\n$clr-blue-grey-400: map-get($clr-blue-grey-list, \"400\");\n$clr-blue-grey-500: map-get($clr-blue-grey-list, \"500\");\n$clr-blue-grey-600: map-get($clr-blue-grey-list, \"600\");\n$clr-blue-grey-700: map-get($clr-blue-grey-list, \"700\");\n$clr-blue-grey-800: map-get($clr-blue-grey-list, \"800\");\n$clr-blue-grey-900: map-get($clr-blue-grey-list, \"900\");\n\n\n//\n// Black\n//\n\n$clr-black-list: (\n  \"base\": #000\n);\n\n$clr-black: map-get($clr-black-list, \"base\");\n\n\n//\n// White\n//\n\n$clr-white-list: (\n  \"base\": #fff\n);\n\n$clr-white: map-get($clr-white-list, \"base\");\n\n\n//\n// List for all Colors for looping\n//\n\n$clr-list-all: (\n  \"red\":         $clr-red-list,\n  \"pink\":        $clr-pink-list,\n  \"purple\":      $clr-purple-list,\n  \"deep-purple\": $clr-deep-purple-list,\n  \"indigo\":      $clr-indigo-list,\n  \"blue\":        $clr-blue-list,\n  \"light-blue\":  $clr-light-blue-list,\n  \"cyan\":        $clr-cyan-list,\n  \"teal\":        $clr-teal-list,\n  \"green\":       $clr-green-list,\n  \"light-green\": $clr-light-green-list,\n  \"lime\":        $clr-lime-list,\n  \"yellow\":      $clr-yellow-list,\n  \"amber\":       $clr-amber-list,\n  \"orange\":      $clr-orange-list,\n  \"deep-orange\": $clr-deep-orange-list,\n  \"brown\":       $clr-brown-list,\n  \"grey\":        $clr-grey-list,\n  \"blue-grey\":   $clr-blue-grey-list,\n  \"black\":       $clr-black-list,\n  \"white\":       $clr-white-list\n);\n\n\n//\n// Typography\n//\n\n$clr-ui-display-4: $clr-grey-600;\n$clr-ui-display-3: $clr-grey-600;\n$clr-ui-display-2: $clr-grey-600;\n$clr-ui-display-1: $clr-grey-600;\n$clr-ui-headline:  $clr-grey-900;\n$clr-ui-title:     $clr-grey-900;\n$clr-ui-subhead-1: $clr-grey-900;\n$clr-ui-body-2:    $clr-grey-900;\n$clr-ui-body-1:    $clr-grey-900;\n$clr-ui-caption:   $clr-grey-600;\n$clr-ui-menu:      $clr-grey-900;\n$clr-ui-button:    $clr-grey-900;\n", "////\n/// Copyright (c) 2016-2022 Martin Donath \n///\n/// Permission is hereby granted, free of charge, to any person obtaining a\n/// copy of this software and associated documentation files (the \"Software\"),\n/// to deal in the Software without restriction, including without limitation\n/// the rights to use, copy, modify, merge, publish, distribute, sublicense,\n/// and/or sell copies of the Software, and to permit persons to whom the\n/// Software is furnished to do so, subject to the following conditions:\n///\n/// The above copyright notice and this permission notice shall be included in\n/// all copies or substantial portions of the Software.\n///\n/// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n/// FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL\n/// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n/// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n/// DEALINGS\n////\n\n// ----------------------------------------------------------------------------\n// Rules\n// ----------------------------------------------------------------------------\n\n// Footnotes variables\n:root {\n  --md-footnotes-icon: svg-load(\"material/keyboard-return.svg\");\n}\n\n// ----------------------------------------------------------------------------\n\n// Scoped in typesetted content to match specificity of regular content\n.md-typeset {\n\n  // Footnote container\n  .footnote {\n    color: var(--md-default-fg-color--light);\n    font-size: px2rem(12.8px);\n\n    // Footnote list - omit left indentation\n    > ol {\n      margin-inline-start: 0;\n\n      // Footnote item - footnote items can contain lists, so we need to scope\n      // the spacing adjustments to the top-level footnote item.\n      > li {\n        transition: color 125ms;\n\n        // Darken color on target\n        &:target {\n          color: var(--md-default-fg-color);\n        }\n\n        // Show backreferences on footnote focus without transition\n        &:focus-within .footnote-backref {\n          transform: translateX(0);\n          opacity: 1;\n          transition: none;\n        }\n\n        // Show backreferences on footnote hover/target\n        &:is(:hover, :target) .footnote-backref {\n          transform: translateX(0);\n          opacity: 1;\n        }\n\n        // Adjust spacing on first child\n        > :first-child {\n          margin-top: 0;\n        }\n      }\n    }\n  }\n\n  // Footnote reference\n  .footnote-ref {\n    font-weight: 700;\n    font-size: px2em(12px, 16px);\n\n    // Hack: increase specificity to override default\n    html & {\n      outline-offset: px2rem(2px);\n    }\n  }\n\n  // Show outline for all devices\n  [id^=\"fnref:\"]:target > .footnote-ref {\n    outline: auto;\n  }\n\n  // Footnote backreference\n  .footnote-backref {\n    display: inline-block;\n    color: var(--md-typeset-a-color);\n    // Hack: omit Unicode arrow for replacement with icon\n    font-size: 0;\n    vertical-align: text-bottom;\n    transform: translateX(px2rem(5px));\n    opacity: 0;\n    transition:\n      color     250ms,\n      transform 250ms 250ms,\n      opacity   125ms 250ms;\n\n    // [print]: Show footnote backreferences\n    @media print {\n      color: var(--md-typeset-a-color);\n      transform: translateX(0);\n      opacity: 1;\n    }\n\n    // Adjust for right-to-left languages\n    [dir=\"rtl\"] & {\n      transform: translateX(px2rem(-5px));\n    }\n\n    // Adjust color on hover\n    &:hover {\n      color: var(--md-accent-fg-color);\n    }\n\n    // Footnote backreference icon\n    &::before {\n      display: inline-block;\n      width: px2rem(16px);\n      height: px2rem(16px);\n      background-color: currentcolor;\n      mask-image: var(--md-footnotes-icon);\n      mask-position: center;\n      mask-repeat: no-repeat;\n      mask-size: contain;\n      content: \"\";\n\n      // Adjust for right-to-left languages\n      [dir=\"rtl\"] & {\n\n        // Flip icon vertically\n        svg {\n          transform: scaleX(-1);\n        }\n      }\n    }\n  }\n}\n", "////\n/// Copyright (c) 2016-2022 Martin Donath \n///\n/// Permission is hereby granted, free of charge, to any person obtaining a\n/// copy of this software and associated documentation files (the \"Software\"),\n/// to deal in the Software without restriction, including without limitation\n/// the rights to use, copy, modify, merge, publish, distribute, sublicense,\n/// and/or sell copies of the Software, and to permit persons to whom the\n/// Software is furnished to do so, subject to the following conditions:\n///\n/// The above copyright notice and this permission notice shall be included in\n/// all copies or substantial portions of the Software.\n///\n/// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n/// FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL\n/// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n/// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n/// DEALINGS\n////\n\n// ----------------------------------------------------------------------------\n// Rules\n// ----------------------------------------------------------------------------\n\n// Scoped in typesetted content to match specificity of regular content\n.md-typeset {\n\n  // Headerlink\n  .headerlink {\n    display: inline-block;\n    margin-inline-start: px2rem(10px);\n    color: var(--md-default-fg-color--lighter);\n    opacity: 0;\n    transition:\n      color   250ms,\n      opacity 125ms;\n\n    // [print]: Hide headerlinks\n    @media print {\n      display: none;\n    }\n  }\n\n  // Show headerlinks on parent hover\n  :is(:hover, :target) > .headerlink,\n  .headerlink:focus {\n    opacity: 1;\n    transition:\n      color   250ms,\n      opacity 125ms;\n  }\n\n  // Adjust color on parent target or focus/hover\n  :target > .headerlink,\n  .headerlink:is(:focus, :hover) {\n    color: var(--md-accent-fg-color);\n  }\n\n  // Adjust scroll margin for all elements with `id` attributes\n  :target {\n    --md-scroll-margin: #{px2rem(48px + 24px)};\n    --md-scroll-offset: #{px2rem(0px)};\n    // Scroll margin is finally ready for prime time - before, we used a hack\n    // for anchor correction based on pseudo elements but those times are gone.\n    scroll-margin-top:\n      calc(\n        var(--md-scroll-margin) -\n        var(--md-scroll-offset)\n      );\n\n    // [screen +]: Sticky navigation tabs\n    @include break-from-device(screen) {\n\n      // Adjust scroll margin for sticky navigation tabs\n      .md-header--lifted ~ .md-container & {\n        --md-scroll-margin: #{px2rem(96px + 24px)};\n      }\n    }\n  }\n\n  // Adjust scroll offset for headlines of level 1-3\n  :is(h1, h2, h3):target {\n    --md-scroll-offset: #{px2rem(4px)};\n  }\n\n  // Adjust scroll offset for headlines of level 4\n  h4:target {\n    --md-scroll-offset: #{px2rem(3px)};\n  }\n}\n", "////\n/// Copyright (c) 2016-2022 Martin Donath \n///\n/// Permission is hereby granted, free of charge, to any person obtaining a\n/// copy of this software and associated documentation files (the \"Software\"),\n/// to deal in the Software without restriction, including without limitation\n/// the rights to use, copy, modify, merge, publish, distribute, sublicense,\n/// and/or sell copies of the Software, and to permit persons to whom the\n/// Software is furnished to do so, subject to the following conditions:\n///\n/// The above copyright notice and this permission notice shall be included in\n/// all copies or substantial portions of the Software.\n///\n/// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n/// FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL\n/// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n/// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n/// DEALINGS\n////\n\n// ----------------------------------------------------------------------------\n// Rules\n// ----------------------------------------------------------------------------\n\n// Scoped in typesetted content to match specificity of regular content\n.md-typeset {\n\n  // Arithmatex container\n  div.arithmatex {\n    overflow: auto;\n\n    // [mobile -]: Align with body copy\n    @include break-to-device(mobile) {\n      margin: 0 px2rem(-16px);\n    }\n\n    // Arithmatex content\n    > * {\n      width: min-content;\n      margin-inline: auto !important; // stylelint-disable-line\n      padding: 0 px2rem(16px);\n      touch-action: auto;\n\n      // MathJax container - see https://bit.ly/3HR8YJ5\n      mjx-container {\n        margin: 0 !important; // stylelint-disable-line\n      }\n    }\n  }\n}\n", "////\n/// Copyright (c) 2016-2022 Martin Donath \n///\n/// Permission is hereby granted, free of charge, to any person obtaining a\n/// copy of this software and associated documentation files (the \"Software\"),\n/// to deal in the Software without restriction, including without limitation\n/// the rights to use, copy, modify, merge, publish, distribute, sublicense,\n/// and/or sell copies of the Software, and to permit persons to whom the\n/// Software is furnished to do so, subject to the following conditions:\n///\n/// The above copyright notice and this permission notice shall be included in\n/// all copies or substantial portions of the Software.\n///\n/// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n/// FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL\n/// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n/// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n/// DEALINGS\n////\n\n// ----------------------------------------------------------------------------\n// Rules\n// ----------------------------------------------------------------------------\n\n// Scoped in typesetted content to match specificity of regular content\n.md-typeset {\n\n  // Deletion, addition or comment\n  :is(del, ins, .comment).critic {\n    box-decoration-break: clone;\n  }\n\n  // Deletion\n  del.critic {\n    background-color: var(--md-typeset-del-color);\n  }\n\n  // Addition\n  ins.critic {\n    background-color: var(--md-typeset-ins-color);\n  }\n\n  // Comment\n  .critic.comment {\n    color: var(--md-code-hl-comment-color);\n\n    // Comment opening mark\n    &::before {\n      content: \"/* \";\n    }\n\n    // Comment closing mark\n    &::after {\n      content: \" */\";\n    }\n  }\n\n  // Critic block\n  .critic.block {\n    display: block;\n    margin: 1em 0;\n    padding-inline: px2rem(16px);\n    overflow: auto;\n    box-shadow: none;\n\n    // Adjust spacing on first child\n    > :first-child {\n      margin-top: 0.5em;\n    }\n\n    // Adjust spacing on last child\n    > :last-child {\n      margin-bottom: 0.5em;\n    }\n  }\n}\n", "////\n/// Copyright (c) 2016-2022 Martin Donath \n///\n/// Permission is hereby granted, free of charge, to any person obtaining a\n/// copy of this software and associated documentation files (the \"Software\"),\n/// to deal in the Software without restriction, including without limitation\n/// the rights to use, copy, modify, merge, publish, distribute, sublicense,\n/// and/or sell copies of the Software, and to permit persons to whom the\n/// Software is furnished to do so, subject to the following conditions:\n///\n/// The above copyright notice and this permission notice shall be included in\n/// all copies or substantial portions of the Software.\n///\n/// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n/// FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL\n/// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n/// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n/// DEALINGS\n////\n\n// ----------------------------------------------------------------------------\n// Rules\n// ----------------------------------------------------------------------------\n\n// Details variables\n:root {\n  --md-details-icon: svg-load(\"material/chevron-right.svg\");\n}\n\n// ----------------------------------------------------------------------------\n\n// Scoped in typesetted content to match specificity of regular content\n.md-typeset {\n\n  // Details\n  details {\n    display: flow-root;\n    padding-top: 0;\n    overflow: visible;\n\n    // Details title icon - rotate icon on transition to open state\n    &[open] > summary::after {\n      transform: rotate(90deg);\n    }\n\n    // Adjust spacing for details in closed state\n    &:not([open]) {\n      padding-bottom: 0;\n      box-shadow: none;\n\n      // Hack: we cannot set `overflow: hidden` on the `details` element (which\n      // is why we set it to `overflow: visible`, as the outline would not be\n      // visible when focusing. Therefore, we must set the border radius on the\n      // summary explicitly.\n      > summary {\n        border-radius: px2rem(2px);\n      }\n    }\n  }\n\n  // Details title\n  summary {\n    display: block;\n    min-height: px2rem(20px);\n    padding-inline-end: px2rem(36px);\n    border-start-start-radius: px2rem(2px);\n    border-start-end-radius: px2rem(2px);\n    cursor: pointer;\n\n    // Show outline for keyboard devices\n    &.focus-visible {\n      outline-color: var(--md-accent-fg-color);\n      outline-offset: px2rem(4px);\n    }\n\n    // Hide outline for pointer devices\n    &:not(.focus-visible) {\n      outline: none;\n      -webkit-tap-highlight-color: transparent;\n    }\n\n    // Details marker\n    &::after {\n      position: absolute;\n      top: px2em(10px);\n      inset-inline-end: px2rem(8px);\n      width: px2rem(20px);\n      height: px2rem(20px);\n      background-color: currentcolor;\n      mask-image: var(--md-details-icon);\n      mask-position: center;\n      mask-repeat: no-repeat;\n      mask-size: contain;\n      transform: rotate(0deg);\n      transition: transform 250ms;\n      content: \"\";\n\n      // Adjust for right-to-left languages\n      [dir=\"rtl\"] & {\n        transform: rotate(180deg);\n      }\n    }\n\n    // Hide native details marker - modern\n    &::marker {\n      display: none;\n    }\n\n    // Hide native details marker - legacy, must be split into a seprate rule,\n    // so older browsers don't consider the selector list as invalid\n    &::-webkit-details-marker {\n      display: none;\n    }\n  }\n}\n", "////\n/// Copyright (c) 2016-2022 Martin Donath \n///\n/// Permission is hereby granted, free of charge, to any person obtaining a\n/// copy of this software and associated documentation files (the \"Software\"),\n/// to deal in the Software without restriction, including without limitation\n/// the rights to use, copy, modify, merge, publish, distribute, sublicense,\n/// and/or sell copies of the Software, and to permit persons to whom the\n/// Software is furnished to do so, subject to the following conditions:\n///\n/// The above copyright notice and this permission notice shall be included in\n/// all copies or substantial portions of the Software.\n///\n/// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n/// FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL\n/// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n/// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n/// DEALINGS\n////\n\n// ----------------------------------------------------------------------------\n// Rules\n// ----------------------------------------------------------------------------\n\n// Scoped in typesetted content to match specificity of regular content\n.md-typeset {\n\n  // Emoji and icon container\n  :is(.emojione, .twemoji, .gemoji) {\n    display: inline-flex;\n    height: px2em(18px);\n    vertical-align: text-top;\n\n    // Icon - inlined via mkdocs-material-extensions\n    svg {\n      width: px2em(18px);\n      max-height: 100%;\n      fill: currentcolor;\n    }\n  }\n}\n", "////\n/// Copyright (c) 2016-2022 Martin Donath \n///\n/// Permission is hereby granted, free of charge, to any person obtaining a\n/// copy of this software and associated documentation files (the \"Software\"),\n/// to deal in the Software without restriction, including without limitation\n/// the rights to use, copy, modify, merge, publish, distribute, sublicense,\n/// and/or sell copies of the Software, and to permit persons to whom the\n/// Software is furnished to do so, subject to the following conditions:\n///\n/// The above copyright notice and this permission notice shall be included in\n/// all copies or substantial portions of the Software.\n///\n/// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n/// FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL\n/// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n/// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n/// DEALINGS\n////\n\n// ----------------------------------------------------------------------------\n// Rules: syntax highlighting\n// ----------------------------------------------------------------------------\n\n// Code block\n.highlight {\n\n  // .o  = Operator\n  // .ow = Operator, word\n  :is(.o, .ow) {\n    color: var(--md-code-hl-operator-color);\n  }\n\n  .p {  // Punctuation\n    color: var(--md-code-hl-punctuation-color);\n  }\n\n  // .cpf = Comment, preprocessor file\n  // .l   = Literal\n  // .s   = Literal, string\n  // .sb  = Literal, string backticks\n  // .sc  = Literal, string char\n  // .s2  = Literal, string double\n  // .si  = Literal, string interpol\n  // .s1  = Literal, string single\n  // .ss  = Literal, string symbol\n  :is(.cpf, .l, .s, .sb, .sc, .s2, .si, .s1, .ss) {\n    color: var(--md-code-hl-string-color);\n  }\n\n  // .cp = Comment, pre-processor\n  // .se = Literal, string escape\n  // .sh = Literal, string heredoc\n  // .sr = Literal, string regex\n  // .sx = Literal, string other\n  :is(.cp, .se, .sh, .sr, .sx) {\n    color: var(--md-code-hl-special-color);\n  }\n\n  // .m  = Number\n  // .mb = Number, binary\n  // .mf = Number, float\n  // .mh = Number, hex\n  // .mi = Number, integer\n  // .il = Number, integer long\n  // .mo = Number, octal\n  :is(.m, .mb, .mf, .mh, .mi, .il, .mo) {\n    color: var(--md-code-hl-number-color);\n  }\n\n  // .k  = Keyword,\n  // .kd = Keyword, declaration\n  // .kn = Keyword, namespace\n  // .kp = Keyword, pseudo\n  // .kr = Keyword, reserved\n  // .kt = Keyword, type\n  :is(.k, .kd, .kn, .kp, .kr, .kt) {\n    color: var(--md-code-hl-keyword-color);\n  }\n\n  // .n  = Name\n  :is(.n) {\n    color: var(--md-code-hl-name-color);\n  }\n\n  // .kc = Keyword, constant\n  // .no = Name, constant\n  // .nb = Name, builtin\n  // .bp = Name, builtin pseudo\n  :is(.kc, .no, .nb, .bp) {\n    color: var(--md-code-hl-constant-color);\n  }\n\n  // .nc = Name, class\n  // .ne = Name, exception\n  // .nf = Name, function\n  // .nn = Name, namespace\n  :is(.nc, .ne, .nf, .nn) {\n    color: var(--md-code-hl-function-color);\n  }\n\n  // .nd = Name, decorator\n  // .ni = Name, entity\n  // .nl = Name, label\n  // .nt = Name, tag\n  :is(.nd, .ni, .nl, .nt) {\n    color: var(--md-code-hl-keyword-color);\n  }\n\n  // .c  = Comment\n  // .cm = Comment, multiline\n  // .c1 = Comment, single\n  // .ch = Comment, shebang\n  // .cs = Comment, special\n  // .sd = Literal, string doc\n  :is(.c, .cm, .c1, .ch, .cs, .sd) {\n    color: var(--md-code-hl-comment-color);\n  }\n\n  // .na = Name, attribute\n  // .nv = Variable,\n  // .vc = Variable, class\n  // .vg = Variable, global\n  // .vi = Variable, instance\n  :is(.na, .nv, .vc, .vg, .vi) {\n    color: var(--md-code-hl-variable-color);\n  }\n\n  // .ge = Generic, emph\n  // .gr = Generic, error\n  // .gh = Generic, heading\n  // .go = Generic, output\n  // .gp = Generic, prompt\n  // .gs = Generic, strong\n  // .gu = Generic, subheading\n  // .gt = Generic, traceback\n  :is(.ge, .gr, .gh, .go, .gp, .gs, .gu, .gt) {\n    color: var(--md-code-hl-generic-color);\n  }\n\n  // .gd = Diff, delete\n  // .gi = Diff, insert\n  :is(.gd, .gi) {\n    margin: 0 px2em(-2px);\n    padding: 0 px2em(2px);\n    border-radius: px2rem(2px);\n  }\n\n  .gd { // Diff, delete\n    background-color: var(--md-typeset-del-color);\n  }\n\n  .gi { // Diff, insert\n    background-color: var(--md-typeset-ins-color);\n  }\n\n  // Highlighted line\n  .hll {\n    display: block;\n    margin: 0 px2em(-16px, 13.6px);\n    padding: 0 px2em(16px, 13.6px);\n    background-color: var(--md-code-hl-color);\n  }\n\n  // Code block title\n  span.filename {\n    position: relative;\n    display: flow-root;\n    margin-top: 1em;\n    padding: px2em(9px, 13.6px) px2em(16px, 13.6px);\n    font-weight: 700;\n    font-size: px2em(13.6px);\n    background-color: var(--md-code-bg-color);\n    border-bottom: px2rem(1px) solid var(--md-default-fg-color--lightest);\n    border-top-left-radius: px2rem(2px);\n    border-top-right-radius: px2rem(2px);\n\n    // Adjust spacing for code block\n    + pre {\n      margin-top: 0;\n\n      // Remove rounded border on top side\n      > code {\n        border-top-left-radius: 0;\n        border-top-right-radius: 0;\n      }\n    }\n  }\n\n  // Code block line numbers (pymdownx-inline)\n  [data-linenos]::before {\n    position: sticky;\n    left: px2em(-16px, 13.6px);\n    // A `z-index` of 3 is necessary for ensuring that code block annotations\n    // don't overlay line numbers, as active annotations have a `z-index` of 2.\n    z-index: 3;\n    float: left;\n    margin-right: px2em(16px, 13.6px);\n    margin-left: px2em(-16px, 13.6px);\n    padding-left: px2em(16px, 13.6px);\n    color: var(--md-default-fg-color--light);\n    background-color: var(--md-code-bg-color);\n    box-shadow: px2rem(-1px) 0 var(--md-default-fg-color--lightest) inset;\n    content: attr(data-linenos);\n    user-select: none;\n  }\n\n  // Code block line anchors - Chrome and Safari seem to have a strange bug\n  // where scroll margin is not applied to anchors inside code blocks. Setting\n  // positioning to absolute seems to fix the problem. Interestingly, this does\n  // not happen in Firefox. Furthermore we must set `visibility: hidden` or\n  // the copy to clipboard functionality will include an empty line between\n  // each set of lines.\n  code a[id] {\n    position: absolute;\n    visibility: hidden;\n  }\n\n  // Copying in progress - this class is set before the content is copied and\n  // removed after copying is done to mitigate whitespace-related issues.\n  code[data-md-copying] {\n\n    // Temporarily remove highlighted lines - see https://bit.ly/32iVGWh\n    .hll {\n      display: contents;\n    }\n\n    // Temporarily remove annotations\n    .md-annotation {\n      display: none;\n    }\n  }\n}\n\n// ----------------------------------------------------------------------------\n// Rules: layout\n// ----------------------------------------------------------------------------\n\n// Code block with line numbers\n.highlighttable {\n  display: flow-root;\n\n  // Set table elements to block layout, because otherwise the whole flexbox\n  // hacking won't work correctly\n  :is(tbody, td) {\n    display: block;\n    padding: 0;\n  }\n\n  // We need to use flexbox layout, because otherwise it's not possible to\n  // make the code container scroll while keeping the line numbers static\n  tr {\n    display: flex;\n  }\n\n  // The pre tags are nested inside a table, so we need to omit the margin\n  // because it collapses below all the overflows\n  pre {\n    margin: 0;\n  }\n\n  // Code block title container\n  th.filename {\n    flex-grow: 1;\n    padding: 0;\n    text-align: left;\n\n    // Adjust spacing\n    span.filename {\n      margin-top: 0;\n    }\n  }\n\n  // Code block line numbers - disable user selection, so code can be easily\n  // copied without accidentally also copying the line numbers\n  .linenos {\n    padding: px2em(10.5px, 13.6px) px2em(16px, 13.6px);\n    padding-right: 0;\n    font-size: px2em(13.6px);\n    background-color: var(--md-code-bg-color);\n    border-top-left-radius: px2rem(2px);\n    border-bottom-left-radius: px2rem(2px);\n    user-select: none;\n  }\n\n  // Code block line numbers container\n  .linenodiv {\n    padding-right: px2em(8px, 13.6px);\n    box-shadow: px2rem(-1px) 0 var(--md-default-fg-color--lightest) inset;\n\n    // Adjust colors and alignment\n    pre {\n      color: var(--md-default-fg-color--light);\n      text-align: right;\n    }\n  }\n\n  // Code block container - stretch to remaining space\n  .code {\n    flex: 1;\n    min-width: 0;\n  }\n}\n\n// Code block line numbers container\n.linenodiv a {\n  color: inherit;\n}\n\n// ----------------------------------------------------------------------------\n\n// Scoped in typesetted content to match specificity of regular content\n.md-typeset {\n\n  // Code block with line numbers - unfortunately, these selectors need to be\n  // overly specific so they don't bleed into code blocks in annotations.\n  .highlighttable {\n    margin: 1em 0;\n    direction: ltr;\n\n    // Remove rounded borders on code blocks\n    > tbody > tr > .code > div > pre > code {\n      border-top-left-radius: 0;\n      border-bottom-left-radius: 0;\n    }\n  }\n\n  // Code block result container\n  // sphinx-immaterial: altered to support\n  // 1. docutils classes (.literal-block-wrapper, div[class^=\"highlight-\"])\n  // 2. rst-result directive's output-prefix (.results-prefix)\n  :is(.highlight, .highlighttable, .literal-block-wrapper, div[class^=\"highlight-\"], .results-prefix) + .result {\n    margin-top: calc(-1em + #{px2em(-2px)});\n    padding: 0 px2em(16px);\n    overflow: visible;\n    border: px2rem(1px) solid var(--md-code-bg-color);\n    border-top-width: px2rem(2px);\n    border-bottom-right-radius: px2rem(2px);\n    border-bottom-left-radius: px2rem(2px);\n\n    // Clearfix, because we can't use overflow: auto\n    &::after {\n      display: block;\n      clear: both;\n      content: \"\";\n    }\n  }\n\n  // sphinx-immaterial: reset margin for rst-result directive's output-prefix\n  .results .results-prefix + .result {\n    margin-top: 0;\n  }\n\n  // sphinx-immaterial: use modified style from span.filename (see above)\n  .results .results-prefix {\n    margin-top: -1em;\n    padding: px2em(9px, 13.6px) px2em(16px, 13.6px);\n    font-weight: 700;\n    font-size: px2em(13.6px);\n    background-color: var(--md-code-bg-color);\n  }\n}\n\n// ----------------------------------------------------------------------------\n// Rules: top-level\n// ----------------------------------------------------------------------------\n\n// [mobile -]: Align with body copy\n@include break-to-device(mobile) {\n\n  // Top-level code block\n  .md-content__inner > .highlight {\n    margin: 1em px2rem(-16px);\n\n    // Remove rounded borders\n    > .filename,\n    > pre > code {\n      border-radius: 0;\n    }\n\n    // Code block with line numbers - unfortunately, these selectors need to be\n    // overly specific so they don't bleed into code blocks in annotations.\n    > .highlighttable > tbody > tr > .filename span.filename,\n    > .highlighttable > tbody > tr > .linenos,\n    > .highlighttable > tbody > tr > .code > div > pre > code {\n      border-radius: 0;\n    }\n\n    // Code block result container\n    + .result {\n      margin-inline: px2rem(-16px);\n      border-inline-width: 0;\n      border-radius: 0;\n    }\n  }\n}\n", "////\n/// Copyright (c) 2016-2022 Martin Donath \n///\n/// Permission is hereby granted, free of charge, to any person obtaining a\n/// copy of this software and associated documentation files (the \"Software\"),\n/// to deal in the Software without restriction, including without limitation\n/// the rights to use, copy, modify, merge, publish, distribute, sublicense,\n/// and/or sell copies of the Software, and to permit persons to whom the\n/// Software is furnished to do so, subject to the following conditions:\n///\n/// The above copyright notice and this permission notice shall be included in\n/// all copies or substantial portions of the Software.\n///\n/// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n/// FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL\n/// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n/// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n/// DEALINGS\n////\n\n// ----------------------------------------------------------------------------\n// Rules\n// ----------------------------------------------------------------------------\n\n// Tabbed variables\n:root {\n  --md-tabbed-icon--prev: svg-load(\"material/chevron-left.svg\");\n  --md-tabbed-icon--next: svg-load(\"material/chevron-right.svg\");\n}\n\n// ----------------------------------------------------------------------------\n\n// Scoped in typesetted content to match specificity of regular content\n.md-typeset {\n\n  // Tabbed container\n  .tabbed-set {\n    position: relative;\n    display: flex;\n    flex-flow: column wrap;\n    margin: 1em 0;\n    border-radius: px2rem(2px);\n\n    // Tab radio button - the Tabbed extension will generate radio buttons with\n    // labels, so tabs can be triggered without the necessity for JavaScript.\n    // This is pretty cool, as it has great accessibility out-of-the box, so\n    // we just hide the radio button and toggle the label color for indication.\n    > input {\n      position: absolute;\n      width: 0;\n      height: 0;\n      opacity: 0;\n\n      // Adjust scroll margin\n      &:target {\n        --md-scroll-offset: #{px2em(10px, 16px)};\n      }\n\n      // Tab label states\n      @for $i from 20 through 1 {\n        &:nth-child(#{$i}) {\n\n          // Tab is active\n          &:checked {\n\n            // Tab label\n            ~ .tabbed-labels > :nth-child(#{$i}) {\n              @extend %tabbed-label;\n            }\n\n            // Tab content\n            ~ .tabbed-content > :nth-child(#{$i}) {\n              @extend %tabbed-content;\n            }\n          }\n\n          // Tab label on keyboard focus\n          &.focus-visible ~ .tabbed-labels > :nth-child(#{$i}) {\n            @extend %tabbed-label-focus-visible;\n          }\n        }\n      }\n    }\n  }\n\n  // Tabbed labels\n  .tabbed-labels {\n    display: flex;\n    max-width: 100%;\n    overflow: auto;\n    box-shadow: 0 px2rem(-1px) var(--md-default-fg-color--lightest) inset;\n    -ms-overflow-style: none;          // IE, Edge\n    scrollbar-width: none;             // Firefox\n\n    // [print]: Move one layer up for ordering\n    @media print {\n      display: contents;\n    }\n\n    // [screen and no reduced motion]: Disable animation\n    @media screen {\n\n      // [js]: Show animated tab indicator\n      .js & {\n        position: relative;\n\n        // Tab indicator\n        &::before {\n          position: absolute;\n          bottom: 0;\n          left: 0;\n          display: block;\n          width: var(--md-indicator-width);\n          height: 2px;\n          background: var(--md-accent-fg-color);\n          transform: translateX(var(--md-indicator-x));\n          transition:\n            width     225ms,\n            transform 250ms;\n          transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n          content: \"\";\n        }\n      }\n    }\n\n    // Webkit scrollbar\n    &::-webkit-scrollbar {\n      display: none;                   // Chrome, Safari\n    }\n\n    // Tab label\n    > label {\n      flex-shrink: 0;\n      width: auto;\n      padding: px2em(10px, 12.8px) 1.25em px2em(8px, 12.8px);\n      color: var(--md-default-fg-color--light);\n      font-weight: 700;\n      font-size: px2rem(12.8px);\n      white-space: nowrap;\n      border-bottom: px2rem(2px) solid transparent;\n      border-radius: px2rem(2px) px2rem(2px) 0 0;\n      cursor: pointer;\n      transition:\n        background-color 250ms,\n        color            250ms;\n      scroll-margin-inline-start: px2rem(20px);\n\n      // [print]: Intersperse labels with containers\n      @media print {\n\n        // Ensure correct order of labels\n        @for $i from 1 through 20 {\n          &:nth-child(#{$i}) {\n            order: $i;\n          }\n        }\n      }\n\n      // Tab label on hover\n      &:hover {\n        color: var(--md-accent-fg-color);\n      }\n    }\n  }\n\n  // Tabbed content\n  .tabbed-content {\n    width: 100%;\n\n    // [print]: Move one layer up for ordering\n    @media print {\n      display: contents;\n    }\n  }\n\n  // Tabbed block\n  .tabbed-block {\n    display: none;\n\n    // [print]: Intersperse labels with containers\n    @media print {\n      display: block;\n\n      // Ensure correct order of containers\n      @for $i from 1 through 20 {\n        &:nth-child(#{$i}) {\n          order: $i;\n        }\n      }\n    }\n\n    // Code block is the first child of a tab - remove margin and mirror\n    // previous (now deprecated) SuperFences code block grouping behavior\n    > pre:first-child,\n    > .highlight:first-child > pre {\n      margin: 0;\n\n      // Remove rounded borders on code block\n      > code {\n        border-top-left-radius: 0;\n        border-top-right-radius: 0;\n      }\n    }\n\n    // Code block is the first child of a tab - remove margin and mirror\n    // previous (now deprecated) SuperFences code block grouping behavior\n    > .highlight:first-child {\n\n      // Code block title - remove spacing and rounded borders\n      > .filename {\n        margin: 0;\n        border-top-left-radius: 0;\n        border-top-right-radius: 0;\n      }\n\n      // Code block with line numbers - unfortunately, these selectors need to\n      // be overly specific so they don't bleed into code blocks in annotations.\n      > .highlighttable {\n        margin: 0;\n\n        // Remove rounded borders on line numbers and titles\n        > tbody > tr > .filename span.filename,\n        > tbody > tr > .linenos {\n          margin: 0;\n          border-top-left-radius: 0;\n          border-top-right-radius: 0;\n        }\n\n        // Remove rounded borders on code blocks\n        > tbody > tr > .code > div > pre > code {\n          border-top-left-radius: 0;\n          border-top-right-radius: 0;\n        }\n      }\n\n      // Code block result container - adjust spacing\n      + .result {\n        margin-top: px2em(-2px);\n      }\n    }\n\n    // Adjust spacing for nested tabbed container\n    > .tabbed-set {\n      margin: 0;\n    }\n  }\n\n  // Tabbed button\n  .tabbed-button {\n    display: block;\n    align-self: center;\n    width: px2rem(18px);\n    height: px2rem(18px);\n    margin-top: px2rem(2px);\n    color: var(--md-default-fg-color--light);\n    border-radius: 100%;\n    cursor: pointer;\n    transition: background-color 250ms;\n    pointer-events: initial;\n\n    // Tabbed button on hover\n    &:hover {\n      color: var(--md-accent-fg-color);\n      background-color: var(--md-accent-fg-color--transparent);\n    }\n\n    // Tabbed button icon\n    &::after {\n      display: block;\n      width: 100%;\n      height: 100%;\n      background-color: currentcolor;\n      transition:\n        background-color 250ms,\n        transform        250ms;\n      mask-image: var(--md-tabbed-icon--prev);\n      mask-position: center;\n      mask-repeat: no-repeat;\n      mask-size: contain;\n      content: \"\";\n    }\n  }\n\n  // Tabbed control\n  .tabbed-control {\n    position: absolute;\n    display: flex;\n    justify-content: start;\n    width: px2rem(24px);\n    height: px2rem(38px);\n    background:\n      linear-gradient(\n        to right,\n        var(--md-default-bg-color) 60%,\n        transparent\n      );\n    transition: opacity 125ms;\n    pointer-events: none;\n\n    // Adjust for right-to-left languages\n    [dir=\"rtl\"] & {\n      transform: rotate(180deg);\n    }\n\n    // Tabbed control is hidden\n    &[hidden] {\n      opacity: 0;\n    }\n\n    // Tabbed control next\n    &--next {\n      right: 0;\n      justify-content: end;\n      background:\n        linear-gradient(\n          to left,\n          var(--md-default-bg-color) 60%,\n          transparent\n        );\n\n      // Tabbed button icon content\n      .tabbed-button::after {\n        mask-image: var(--md-tabbed-icon--next);\n      }\n    }\n  }\n}\n\n// ----------------------------------------------------------------------------\n// Rules: top-level\n// ----------------------------------------------------------------------------\n\n// [mobile -]: Align with body copy\n@include break-to-device(mobile) {\n\n  // Top-level tabbed labels\n  .md-content__inner > .tabbed-set .tabbed-labels {\n    max-width: 100vw;\n    margin: 0 px2rem(-16px);\n    padding-inline-start: px2rem(16px);\n    scroll-padding-inline-start: px2rem(16px);\n\n    // Hack: some browsers ignore the right padding on flex containers,\n    // see https://bit.ly/3lsPS3S\n    &::after {\n      padding-inline-end: px2rem(16px);\n      content: \"\";\n    }\n\n    // Tabbed control previous\n    ~ .tabbed-control--prev {\n      width: px2rem(40px);\n      margin-inline-start: px2rem(-16px);\n      padding-inline-start: px2rem(16px);\n    }\n\n    // Tabbed control next\n    ~ .tabbed-control--next {\n      width: px2rem(40px);\n      margin-inline-end: px2rem(-16px);\n      padding-inline-end: px2rem(16px);\n    }\n  }\n}\n\n// ----------------------------------------------------------------------------\n// Placeholders: improve colocation for better compression\n// ----------------------------------------------------------------------------\n\n// Tab label placeholder\n%tabbed-label {\n\n  // [screen]: Show active state\n  @media screen {\n    color: var(--md-accent-fg-color);\n\n    // [no-js]: Show border (indicator is animated with JavaScript)\n    .no-js & {\n      border-color: var(--md-accent-fg-color);\n    }\n  }\n}\n\n// Tab label on keyboard focus placeholder\n%tabbed-label-focus-visible {\n  background-color: var(--md-accent-fg-color--transparent);\n}\n\n// Tab content placeholder\n%tabbed-content {\n  display: block;\n}\n", "////\n/// Copyright (c) 2016-2022 Martin Donath \n///\n/// Permission is hereby granted, free of charge, to any person obtaining a\n/// copy of this software and associated documentation files (the \"Software\"),\n/// to deal in the Software without restriction, including without limitation\n/// the rights to use, copy, modify, merge, publish, distribute, sublicense,\n/// and/or sell copies of the Software, and to permit persons to whom the\n/// Software is furnished to do so, subject to the following conditions:\n///\n/// The above copyright notice and this permission notice shall be included in\n/// all copies or substantial portions of the Software.\n///\n/// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n/// FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL\n/// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n/// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n/// DEALINGS\n////\n\n// ----------------------------------------------------------------------------\n// Rules\n// ----------------------------------------------------------------------------\n\n// Tasklist variables\n:root {\n  --md-tasklist-icon:\n    svg-load(\"octicons/check-circle-fill-24.svg\");\n  --md-tasklist-icon--checked:\n    svg-load(\"octicons/check-circle-fill-24.svg\");\n}\n\n// ----------------------------------------------------------------------------\n\n// Scoped in typesetted content to match specificity of regular content\n.md-typeset {\n\n  // Tasklist item\n  .task-list-item {\n    position: relative;\n    list-style-type: none;\n\n    // Make checkbox items align with normal list items, but position\n    // everything in ems for correct layout at smaller font sizes\n    [type=\"checkbox\"] {\n      position: absolute;\n      top: 0.45em;\n      inset-inline-start: -2em;\n    }\n  }\n\n  // Hide native checkbox, when custom classes are enabled\n  .task-list-control [type=\"checkbox\"] {\n    z-index: -1;\n    opacity: 0;\n  }\n\n  // Tasklist indicator in unchecked state\n  .task-list-indicator::before {\n    position: absolute;\n    top: 0.15em;\n    inset-inline-start: px2em(-24px);\n    width: px2em(20px);\n    height: px2em(20px);\n    background-color: var(--md-default-fg-color--lightest);\n    mask-image: var(--md-tasklist-icon);\n    mask-position: center;\n    mask-repeat: no-repeat;\n    mask-size: contain;\n    content: \"\";\n  }\n\n  // Tasklist indicator in checked state\n  [type=\"checkbox\"]:checked + .task-list-indicator::before {\n    background-color: $clr-green-a400;\n    mask-image: var(--md-tasklist-icon--checked);\n  }\n}\n", "// css overrides for the readthedocs-sphinx-ext that\n// is automatically appended to projects built/hosted on RTD\n\n.rst-versions {\n  font-family: var(--md-text-font-family);\n\n  &.rst-badge {\n    top: 50px;\n    // stylelint-disable-next-line declaration-no-important\n    bottom: inherit !important;\n    height: auto;\n    font-size: 0.85rem;\n  }\n}\n", "////\n/// Copyright (c) 2016-2022 Martin Donath \n///\n/// Permission is hereby granted, free of charge, to any person obtaining a\n/// copy of this software and associated documentation files (the \"Software\"),\n/// to deal in the Software without restriction, including without limitation\n/// the rights to use, copy, modify, merge, publish, distribute, sublicense,\n/// and/or sell copies of the Software, and to permit persons to whom the\n/// Software is furnished to do so, subject to the following conditions:\n///\n/// The above copyright notice and this permission notice shall be included in\n/// all copies or substantial portions of the Software.\n///\n/// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n/// FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL\n/// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n/// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n/// DEALINGS\n////\n\n// ----------------------------------------------------------------------------\n// Rules\n// ----------------------------------------------------------------------------\n\n// All definitions\n:root > * {\n  --md-mermaid-font-family:            var(--md-text-font-family), sans-serif;\n\n  // Colors\n  --md-mermaid-edge-color:             var(--md-code-fg-color);\n  --md-mermaid-node-bg-color:          var(--md-accent-fg-color--transparent);\n  --md-mermaid-node-fg-color:          var(--md-accent-fg-color);\n  --md-mermaid-label-bg-color:         var(--md-default-bg-color);\n  --md-mermaid-label-fg-color:         var(--md-code-fg-color);\n}\n\n// Mermaid container\n.mermaid {\n  margin: 1em 0;\n  line-height: normal;\n}\n", "// All definitions\n:root > * {\n  // Colors\n  --md-graphviz-edge-color:             var(--md-default-fg-color);\n  --md-graphviz-node-bg-color:          var(--md-accent-fg-color--transparent);\n  --md-graphviz-node-fg-color:          var(--md-accent-fg-color);\n  --md-graphviz-label-bg-color:         var(--md-default-bg-color);\n  --md-graphviz-label-fg-color:         var(--md-code-fg-color);\n  --md-graphviz-a-hover-color:          var(--md-primary-fg-color);\n}\n\n// Mermaid container\n.graphviz {\n  margin: 1em 0;\n}\n\n.graphviz a:hover > text {\n  fill: var(--md-graphviz-hover-color) !important; // stylelint-disable-line declaration-no-important\n}\n", "////\n/// Copyright (c) 2016-2022 Martin Donath \n///\n/// Permission is hereby granted, free of charge, to any person obtaining a\n/// copy of this software and associated documentation files (the \"Software\"),\n/// to deal in the Software without restriction, including without limitation\n/// the rights to use, copy, modify, merge, publish, distribute, sublicense,\n/// and/or sell copies of the Software, and to permit persons to whom the\n/// Software is furnished to do so, subject to the following conditions:\n///\n/// The above copyright notice and this permission notice shall be included in\n/// all copies or substantial portions of the Software.\n///\n/// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n/// FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL\n/// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n/// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n/// DEALINGS\n////\n\n// ----------------------------------------------------------------------------\n// Rules\n// ----------------------------------------------------------------------------\n\n// Scoped in typesetted content to match specificity of regular content\n.md-typeset {\n\n  // [tablet +]: Allow for rendering content as sidebars\n  @include break-from-device(tablet) {\n\n    // Modifier to float block elements\n    .inline {\n      float: inline-start;\n      width: px2rem(234px);\n      margin-top: 0;\n      margin-inline-end: px2rem(16px);\n      margin-bottom: px2rem(16px);\n\n      // Modifier to move to end (ltr: right, rtl: left)\n      &.end {\n        float: inline-end;\n        margin-inline: px2rem(16px) 0;\n      }\n    }\n  }\n}\n", "// Additional styles expected by sphinx.\n\n.md-typeset {\n\n  // alignment of text and inline objects inside block objects\n  .align-left {\n    text-align: left;\n  }\n\n  .align-right {\n    text-align: right;\n  }\n\n  .align-center {\n    clear: both;\n    text-align: center;\n  }\n\n  .align-top {\n    vertical-align: top;\n  }\n\n  .align-middle {\n    vertical-align: middle;\n  }\n\n  .align-bottom {\n    vertical-align: bottom;\n  }\n\n  // Figures, Images, and Tables\n  .figure.align-left,\n  figure.align-left,\n  img.align-left,\n  object.align-left,\n  table.align-left {\n    margin-right: auto;\n  }\n\n  .figure.align-center,\n  figure.align-center,\n  img.align-center,\n  object.align-center,\n  table.align-center {\n    margin-right: auto;\n    margin-left: auto;\n  }\n\n  .figure.align-right,\n  figure.align-right,\n  img.align-right,\n  object.align-right,\n  table.align-right {\n    margin-left: auto;\n  }\n\n  .figure.align-center,\n  .figure.align-right,\n  figure.align-center,\n  figure.align-right,\n  img.align-center,\n  img.align-right,\n  object.align-center,\n  object.align-right {\n    display: block;\n  }\n\n  // reset inner alignment in figures and tables\n  .figure.align-left,\n  .figure.align-right,\n  figure.align-left,\n  figure.align-right,\n  table.align-left,\n  table.align-center,\n  table.align-right {\n    text-align: inherit;\n  }\n\n  .rubric {\n    font-weight: 700;\n  }\n\n  .viewcode-block .viewcode-back {\n    float: right;\n  }\n\n  .versionmodified {\n    font-style: italic;\n  }\n\n  // Indentation of line blocks\n  div.line-block {\n    display: block;\n  }\n\n  div.line-block div.line-block {\n    margin-left: 1.5em;\n  }\n}\n", "$api-color-header-bg: var(--md-code-bg-color);\n$api-color-keyword: var(--md-code-hl-keyword-color);\n$api-color-name: var(--md-code-hl-name-color);\n$api-color-pre-name: var(--md-code-hl-name-color);\n$api-color-type: var(--md-code-hl-special-color);\n$api-color-param-name: var(--md-default-fg-color--light);\n$objinfo-icon-size: 16px;\n\n// Wrap in .md-typeset to ensure rules below have higher selectivity\n// than those in _typeset.scss.\n.md-typeset {\n  :is(dl.objdesc, dl.api-field) > dt {\n    font-family: var(--md-code-font-family);\n    background: $api-color-header-bg;\n\n    // Eliminate the normal padding for inline code blocks\n    code {\n      padding: 0;\n      border-radius: 0;\n    }\n\n    .sig-name:not(.sig-name-nonprimary) {\n      padding: 0;\n      color: $api-color-name;\n      font-weight: 700;\n    }\n\n    .sig-param {\n      font-style: normal;\n    }\n\n    .sig-param .n:not(.desctype) {\n      color: $api-color-param-name;\n    }\n\n    .sig-param a.reference .n:not(.desctype):hover {\n      color: var(--md-accent-fg-color);\n    }\n\n    // Ensure each parameter starts on a new line and is indented.\n    &.sig-wrap {\n      .sig-param-decl {\n        &::before {\n          white-space: pre;\n          // 5 spaces below result in 4 spaces of indent.\n          // For some reason one space is lost.\n          content: \"\\A     \";\n        }\n      }\n\n      // Note: It would be nice to have something like\n      // `:last-of-class` here, but that doesn't exist.\n      .sig-paren ~ .sig-paren {\n        // Ensure the final paren starts on a new line\n        &::before {\n          white-space: pre;\n          content: \"\\A\";\n        }\n      }\n    }\n  }\n\n  // Hide the colon added in docutils 0.18\n  dl.objdesc > dd > dl.field-list > dt > .colon {\n    display: none;\n  }\n\n  // Rules for coloring cross-references in signatures.\n  :is(dl.objdesc, dl.api-field) > dt,\n  .sig-inline {\n    a.reference > .sig-name,\n    a.reference.sig-name,\n    a.reference:not(.desctype) > .n {\n      color: var(--md-typeset-a-color);\n\n      &:hover {\n        color: var(--md-accent-fg-color);\n      }\n    }\n\n    .desctype {\n      &,\n      > a.reference {\n        color: $api-color-type;\n        // Prevent pygments highlight rules from taking precedence.\n        .n {\n          color: inherit;\n        }\n      }\n\n      &:is(a.reference):hover,\n      > a.reference:hover {\n        color: var(--md-accent-fg-color);\n      }\n    }\n  }\n\n  dl.objdesc {\n    > dt {\n      padding-top: 0.5em;\n      padding-right: 0.5em;\n      padding-left: 0.5em;\n      font-family: var(--md-code-font-family);\n      background: $api-color-header-bg;\n\n      &,\n      code {\n        font-size: 0.75rem;\n      }\n\n      // Prefix like \"class\", \"staticmethod\".\n      .property {\n        color: $api-color-keyword;\n        font-weight: 700;\n        font-style: normal;\n      }\n\n      .sig-prename {\n        padding: 0;\n        color: $api-color-pre-name;\n      }\n\n      .viewcode-link,\n      .viewcode-back {\n        float: right;\n        text-align: right;\n      }\n\n      &.api-include-path {\n        &,\n        code {\n          font-size: 0.65rem;\n        }\n      }\n    }\n\n    > dt:first-child {\n      padding-top: 0.5em;\n    }\n\n    > dt:last-of-type {\n      padding-bottom: 0.5em;\n    }\n\n    > dd {\n      // Heading like \"Parameters\" or \"Returns\"\n      dl.field-list {\n        > dt {\n          margin-bottom: 1em;\n          font-weight: 700;\n          font-size: 1em;\n        }\n      }\n      // JSON domain uses noindent class to avoid an extra level of\n      // nesting.\n      dd.noindent {\n        margin-left: 0;\n      }\n    }\n  }\n\n  dl.api-field {\n    > dt {\n\n      // Display as table so that background is just the width of the\n      // content.\n      display: table;\n\n      // Prevent permalink symbol from having a background color of $api-color-header-bg.\n      a.headerlink {\n        position: relative;\n        left: 0.5em;\n        width: 0;\n        margin-left: 0;\n      }\n\n      &,\n      code {\n        font-size: 0.65rem;\n      }\n\n      &.api-parameter-kind {\n        float: right;\n        font-family: var(--md-text-font-family);\n\n        &::before {\n          content: \"[\";\n        }\n\n        &::after {\n          content: \"]\";\n        }\n      }\n    }\n  }\n\n  // Make object summaries more compact\n  dl.objdesc.summary > dd {\n    &,\n    > p:first-child {\n      margin-top: 0;\n    }\n  }\n\n  // C/C++ inline \"text\" expressions: should have regular, rather than\n  // \"code\", font face.\n  .sig-inline:is(.c-texpr, .cpp-texpr) {\n    font-family: unset;\n    background-color: unset;\n  }\n}\n\n.md-nav__link {\n  white-space: nowrap;\n}\n\n:root {\n  > * {\n    --objinfo-icon-fg-alias: #{$clr-orange-900};\n    --objinfo-icon-fg-default: #{$clr-grey-800};\n    --objinfo-icon-fg-data: #{$clr-blue-800};\n    --objinfo-icon-fg-procedure: #{$clr-purple-800};\n    --objinfo-icon-fg-sub-data: #{$clr-green-800};\n    --objinfo-icon-bg-default: var(--md-default-bg-color);\n  }\n}\n\n// Only use dark mode on screens\n@media screen {\n\n  // Slate theme, i.e. dark mode\n  [data-md-color-scheme=\"slate\"] {\n    --objinfo-icon-fg-alias: #{$clr-orange-300};\n    --objinfo-icon-fg-default: #{$clr-grey-300};\n    --objinfo-icon-fg-data: #{$clr-blue-300};\n    --objinfo-icon-fg-procedure: #{$clr-purple-200};\n    --objinfo-icon-fg-sub-data: #{$clr-green-300};\n  }\n}\n\n.objinfo-icon {\n  display: inline-table;\n  flex-shrink: 0;\n  width: $objinfo-icon-size;\n  height: $objinfo-icon-size;\n  margin-right: 8px;\n  color: var(--objinfo-icon-fg-default);\n  font-weight: 500;\n  font-family: var(--md-text-font-family);\n  line-height: $objinfo-icon-size;\n  text-align: center;\n  vertical-align: middle;\n  background-color: var(--objinfo-icon-bg-default);\n  border: 1px solid var(--objinfo-icon-fg-default);\n  border-radius: 2px;\n\n  @each $objclass in (alias, procedure, data, sub-data) {\n    &__#{$objclass} {\n      color: var(--objinfo-icon-bg-default);\n      background-color: var(--objinfo-icon-fg-#{$objclass});\n      border: 1px solid var(--objinfo-icon-fg-#{$objclass});\n    }\n  }\n}\n\n.search-result-objlabel {\n  float: right;\n  padding: 2px;\n  border: 1px solid var(--md-default-fg-color--light);\n  border-radius: 2px;\n}\n\n// a rule specifically designed for autosummary tables\n// this overrides `.md-typeset code { word-break: break-word; }`\ntable.longtable.docutils.data.align-default {\n  tbody > tr > td > p > a.reference.internal {\n    > code.xref.py.py-obj.docutils.literal.notranslate {\n      > span.pre {\n        word-break: normal;\n      }\n    }\n  }\n}\n"]}}, {"offset": {"line": 1, "column": 0}, "map": {"version": 3, "sources": ["src/assets/stylesheets/palette/_scheme.scss", "../../../src/assets/stylesheets/palette.scss", "src/assets/stylesheets/palette/_accent.scss", "src/assets/stylesheets/palette/_primary.scss", "src/assets/stylesheets/utilities/_break.scss"], "names": [], "mappings": "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", "file": "palette.css", "sourcesContent": ["////\n/// Copyright (c) 2016-2022 Martin Donath \n///\n/// Permission is hereby granted, free of charge, to any person obtaining a\n/// copy of this software and associated documentation files (the \"Software\"),\n/// to deal in the Software without restriction, including without limitation\n/// the rights to use, copy, modify, merge, publish, distribute, sublicense,\n/// and/or sell copies of the Software, and to permit persons to whom the\n/// Software is furnished to do so, subject to the following conditions:\n///\n/// The above copyright notice and this permission notice shall be included in\n/// all copies or substantial portions of the Software.\n///\n/// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n/// FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL\n/// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n/// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n/// DEALINGS\n////\n\n// ----------------------------------------------------------------------------\n// Rules\n// ----------------------------------------------------------------------------\n\n// Only use dark mode on screens\n@media screen {\n\n  // Slate theme, i.e. dark mode\n  [data-md-color-scheme=\"slate\"] {\n\n    // Slate's hue in the range [0,360] - change this variable to alter the tone\n    // of the theme, e.g. to make it more redish or greenish. This is a slate-\n    // specific variable, but the same approach may be adapted to custom themes.\n    --md-hue: 232;\n\n    // Default color shades\n    --md-default-fg-color:             hsla(var(--md-hue), 75%, 95%, 1);\n    --md-default-fg-color--light:      hsla(var(--md-hue), 75%, 90%, 0.62);\n    --md-default-fg-color--lighter:    hsla(var(--md-hue), 75%, 90%, 0.32);\n    --md-default-fg-color--lightest:   hsla(var(--md-hue), 75%, 90%, 0.12);\n    --md-default-bg-color:             hsla(var(--md-hue), 15%, 21%, 1);\n    --md-default-bg-color--light:      hsla(var(--md-hue), 15%, 21%, 0.54);\n    --md-default-bg-color--lighter:    hsla(var(--md-hue), 15%, 21%, 0.26);\n    --md-default-bg-color--lightest:   hsla(var(--md-hue), 15%, 21%, 0.07);\n\n    // Code color shades\n    --md-code-fg-color:                hsla(var(--md-hue), 18%, 86%, 1);\n    --md-code-bg-color:                hsla(var(--md-hue), 15%, 15%, 1);\n\n    // Code highlighting color shades\n    --md-code-hl-color:                hsla(#{hex2hsl($clr-blue-a200)}, 0.15);\n    --md-code-hl-number-color:         hsla(6, 74%, 63%, 1);\n    --md-code-hl-special-color:        hsla(340, 83%, 66%, 1);\n    --md-code-hl-function-color:       hsla(291, 57%, 65%, 1);\n    --md-code-hl-constant-color:       hsla(250, 62%, 70%, 1);\n    --md-code-hl-keyword-color:        hsla(219, 66%, 64%, 1);\n    --md-code-hl-string-color:         hsla(150, 58%, 44%, 1);\n    --md-code-hl-name-color:           var(--md-code-fg-color);\n    --md-code-hl-operator-color:       var(--md-default-fg-color--light);\n    --md-code-hl-punctuation-color:    var(--md-default-fg-color--light);\n    --md-code-hl-comment-color:        var(--md-default-fg-color--light);\n    --md-code-hl-generic-color:        var(--md-default-fg-color--light);\n    --md-code-hl-variable-color:       var(--md-default-fg-color--light);\n\n    // Typeset color shades\n    --md-typeset-color:                var(--md-default-fg-color);\n\n    // Typeset `a` color shades\n    --md-typeset-a-color:              var(--md-primary-fg-color);\n\n    // Typeset `mark` color shades\n    --md-typeset-mark-color:           hsla(#{hex2hsl($clr-blue-a200)}, 0.3);\n\n    // Typeset `kbd` color shades\n    --md-typeset-kbd-color:            hsla(var(--md-hue), 15%, 94%, 0.12);\n    --md-typeset-kbd-accent-color:     hsla(var(--md-hue), 15%, 94%, 0.2);\n    --md-typeset-kbd-border-color:     hsla(var(--md-hue), 15%, 14%, 1);\n\n    // Typeset `table` color shades\n    --md-typeset-table-color:          hsla(var(--md-hue), 75%, 95%, 0.12);\n\n    // Admonition color shades\n    --md-admonition-fg-color:          var(--md-default-fg-color);\n    --md-admonition-bg-color:          var(--md-default-bg-color);\n\n    // Footer color shades\n    --md-footer-bg-color:              hsla(var(--md-hue), 15%, 12%, 0.87);\n    --md-footer-bg-color--dark:        hsla(var(--md-hue), 15%, 10%, 1);\n\n    // Shadow depth 1\n    --md-shadow-z1:\n      0 #{px2rem(4px)} #{px2rem(10px)} hsla(0, 0%, 0%, 0.2),\n      0 0              #{px2rem(1px)}  hsla(0, 0%, 0%, 0.1);\n\n    // Shadow depth 2\n    --md-shadow-z2:\n      0 #{px2rem(4px)} #{px2rem(10px)} hsla(0, 0%, 0%, 0.3),\n      0 0              #{px2rem(1px)}  hsla(0, 0%, 0%, 0.25);\n\n    // Shadow depth 3\n    --md-shadow-z3:\n      0 #{px2rem(4px)} #{px2rem(10px)} hsla(0, 0%, 0%, 0.4),\n      0 0              #{px2rem(1px)}  hsla(0, 0%, 0%, 0.35);\n\n    // Hide images for light mode\n    img[src$=\"#only-light\"],\n    img[src$=\"#gh-light-mode-only\"] {\n      display: none;\n    }\n\n    // Show images for dark mode\n    img[src$=\"#only-dark\"],\n    img[src$=\"#gh-dark-mode-only\"] {\n      display: initial;\n    }\n  }\n\n  // --------------------------------------------------------------------------\n\n  // Adjust link colors for dark primary colors\n  @each $name, $color in (\n    \"pink\":                            hsl(340, 81%, 63%),\n    \"purple\":                          hsl(291, 43%, 63%),\n    \"deep-purple\":                     hsl(262, 63%, 70%),\n    \"indigo\":                          hsl(219, 56%, 63%),\n    \"teal\":                            hsl(174, 100%, 40%),\n    \"green\":                           hsl(122, 39%, 60%),\n    \"deep-orange\":                     hsl(14, 100%, 73%),\n    \"brown\":                           hsl(16, 45%, 60%),\n\n    // Set neutral colors to indigo\n    \"grey\":                            hsl(219, 56%, 63%),\n    \"blue-grey\":                       hsl(219, 56%, 63%),\n    \"white\":                           hsl(219, 56%, 63%),\n    \"black\":                           hsl(219, 56%, 63%)\n  ) {\n    [data-md-color-scheme=\"slate\"][data-md-color-primary=\"#{$name}\"] {\n      --md-typeset-a-color: #{$color};\n    }\n  }\n\n  // --------------------------------------------------------------------------\n\n  // Switching in progress - disable all transitions temporarily\n  [data-md-color-switching] *,\n  [data-md-color-switching] *::before,\n  [data-md-color-switching] *::after {\n    transition-duration: 0ms !important; // stylelint-disable-line\n  }\n}\n", "@media screen {\n  [data-md-color-scheme=slate] {\n    --md-hue: 232;\n    --md-default-fg-color: hsla(var(--md-hue), 75%, 95%, 1);\n    --md-default-fg-color--light: hsla(var(--md-hue), 75%, 90%, 0.62);\n    --md-default-fg-color--lighter: hsla(var(--md-hue), 75%, 90%, 0.32);\n    --md-default-fg-color--lightest: hsla(var(--md-hue), 75%, 90%, 0.12);\n    --md-default-bg-color: hsla(var(--md-hue), 15%, 21%, 1);\n    --md-default-bg-color--light: hsla(var(--md-hue), 15%, 21%, 0.54);\n    --md-default-bg-color--lighter: hsla(var(--md-hue), 15%, 21%, 0.26);\n    --md-default-bg-color--lightest: hsla(var(--md-hue), 15%, 21%, 0.07);\n    --md-code-fg-color: hsla(var(--md-hue), 18%, 86%, 1);\n    --md-code-bg-color: hsla(var(--md-hue), 15%, 15%, 1);\n    --md-code-hl-color: hsla(218, 100%, 63%, 0.15);\n    --md-code-hl-number-color: hsla(6, 74%, 63%, 1);\n    --md-code-hl-special-color: hsla(340, 83%, 66%, 1);\n    --md-code-hl-function-color: hsla(291, 57%, 65%, 1);\n    --md-code-hl-constant-color: hsla(250, 62%, 70%, 1);\n    --md-code-hl-keyword-color: hsla(219, 66%, 64%, 1);\n    --md-code-hl-string-color: hsla(150, 58%, 44%, 1);\n    --md-code-hl-name-color: var(--md-code-fg-color);\n    --md-code-hl-operator-color: var(--md-default-fg-color--light);\n    --md-code-hl-punctuation-color: var(--md-default-fg-color--light);\n    --md-code-hl-comment-color: var(--md-default-fg-color--light);\n    --md-code-hl-generic-color: var(--md-default-fg-color--light);\n    --md-code-hl-variable-color: var(--md-default-fg-color--light);\n    --md-typeset-color: var(--md-default-fg-color);\n    --md-typeset-a-color: var(--md-primary-fg-color);\n    --md-typeset-mark-color: hsla(218, 100%, 63%, 0.3);\n    --md-typeset-kbd-color: hsla(var(--md-hue), 15%, 94%, 0.12);\n    --md-typeset-kbd-accent-color: hsla(var(--md-hue), 15%, 94%, 0.2);\n    --md-typeset-kbd-border-color: hsla(var(--md-hue), 15%, 14%, 1);\n    --md-typeset-table-color: hsla(var(--md-hue), 75%, 95%, 0.12);\n    --md-admonition-fg-color: var(--md-default-fg-color);\n    --md-admonition-bg-color: var(--md-default-bg-color);\n    --md-footer-bg-color: hsla(var(--md-hue), 15%, 12%, 0.87);\n    --md-footer-bg-color--dark: hsla(var(--md-hue), 15%, 10%, 1);\n    --md-shadow-z1:\n      0 0.2rem 0.5rem hsla(0, 0%, 0%, 0.2),\n      0 0 0.05rem hsla(0, 0%, 0%, 0.1);\n    --md-shadow-z2:\n      0 0.2rem 0.5rem hsla(0, 0%, 0%, 0.3),\n      0 0 0.05rem hsla(0, 0%, 0%, 0.25);\n    --md-shadow-z3:\n      0 0.2rem 0.5rem hsla(0, 0%, 0%, 0.4),\n      0 0 0.05rem hsla(0, 0%, 0%, 0.35);\n  }\n  [data-md-color-scheme=slate] img[src$=\"#only-light\"],\n[data-md-color-scheme=slate] img[src$=\"#gh-light-mode-only\"] {\n    display: none;\n  }\n  [data-md-color-scheme=slate] img[src$=\"#only-dark\"],\n[data-md-color-scheme=slate] img[src$=\"#gh-dark-mode-only\"] {\n    display: initial;\n  }\n  [data-md-color-scheme=slate][data-md-color-primary=pink] {\n    --md-typeset-a-color: hsl(340deg, 81%, 63%);\n  }\n  [data-md-color-scheme=slate][data-md-color-primary=purple] {\n    --md-typeset-a-color: hsl(291deg, 43%, 63%);\n  }\n  [data-md-color-scheme=slate][data-md-color-primary=deep-purple] {\n    --md-typeset-a-color: hsl(262deg, 63%, 70%);\n  }\n  [data-md-color-scheme=slate][data-md-color-primary=indigo] {\n    --md-typeset-a-color: hsl(219deg, 56%, 63%);\n  }\n  [data-md-color-scheme=slate][data-md-color-primary=teal] {\n    --md-typeset-a-color: hsl(174deg, 100%, 40%);\n  }\n  [data-md-color-scheme=slate][data-md-color-primary=green] {\n    --md-typeset-a-color: hsl(122deg, 39%, 60%);\n  }\n  [data-md-color-scheme=slate][data-md-color-primary=deep-orange] {\n    --md-typeset-a-color: hsl(14deg, 100%, 73%);\n  }\n  [data-md-color-scheme=slate][data-md-color-primary=brown] {\n    --md-typeset-a-color: hsl(16deg, 45%, 60%);\n  }\n  [data-md-color-scheme=slate][data-md-color-primary=grey] {\n    --md-typeset-a-color: hsl(219deg, 56%, 63%);\n  }\n  [data-md-color-scheme=slate][data-md-color-primary=blue-grey] {\n    --md-typeset-a-color: hsl(219deg, 56%, 63%);\n  }\n  [data-md-color-scheme=slate][data-md-color-primary=white] {\n    --md-typeset-a-color: hsl(219deg, 56%, 63%);\n  }\n  [data-md-color-scheme=slate][data-md-color-primary=black] {\n    --md-typeset-a-color: hsl(219deg, 56%, 63%);\n  }\n  [data-md-color-switching] *,\n[data-md-color-switching] *::before,\n[data-md-color-switching] *::after {\n    transition-duration: 0ms !important;\n  }\n}\n[data-md-color-accent=red] {\n  --md-accent-fg-color: hsla(348, 100%, 55%, 1);\n  --md-accent-fg-color--transparent: hsla(348, 100%, 55%, 0.1);\n  --md-accent-bg-color: hsla(0, 0%, 100%, 1);\n  --md-accent-bg-color--light: hsla(0, 0%, 100%, 0.7);\n}\n\n[data-md-color-accent=pink] {\n  --md-accent-fg-color: hsla(339, 100%, 48%, 1);\n  --md-accent-fg-color--transparent: hsla(339, 100%, 48%, 0.1);\n  --md-accent-bg-color: hsla(0, 0%, 100%, 1);\n  --md-accent-bg-color--light: hsla(0, 0%, 100%, 0.7);\n}\n\n[data-md-color-accent=purple] {\n  --md-accent-fg-color: hsla(291, 96%, 62%, 1);\n  --md-accent-fg-color--transparent: hsla(291, 96%, 62%, 0.1);\n  --md-accent-bg-color: hsla(0, 0%, 100%, 1);\n  --md-accent-bg-color--light: hsla(0, 0%, 100%, 0.7);\n}\n\n[data-md-color-accent=deep-purple] {\n  --md-accent-fg-color: hsla(256, 100%, 65%, 1);\n  --md-accent-fg-color--transparent: hsla(256, 100%, 65%, 0.1);\n  --md-accent-bg-color: hsla(0, 0%, 100%, 1);\n  --md-accent-bg-color--light: hsla(0, 0%, 100%, 0.7);\n}\n\n[data-md-color-accent=indigo] {\n  --md-accent-fg-color: hsla(231, 99%, 66%, 1);\n  --md-accent-fg-color--transparent: hsla(231, 99%, 66%, 0.1);\n  --md-accent-bg-color: hsla(0, 0%, 100%, 1);\n  --md-accent-bg-color--light: hsla(0, 0%, 100%, 0.7);\n}\n\n[data-md-color-accent=blue] {\n  --md-accent-fg-color: hsla(218, 100%, 63%, 1);\n  --md-accent-fg-color--transparent: hsla(218, 100%, 63%, 0.1);\n  --md-accent-bg-color: hsla(0, 0%, 100%, 1);\n  --md-accent-bg-color--light: hsla(0, 0%, 100%, 0.7);\n}\n\n[data-md-color-accent=light-blue] {\n  --md-accent-fg-color: hsla(203, 100%, 46%, 1);\n  --md-accent-fg-color--transparent: hsla(203, 100%, 46%, 0.1);\n  --md-accent-bg-color: hsla(0, 0%, 100%, 1);\n  --md-accent-bg-color--light: hsla(0, 0%, 100%, 0.7);\n}\n\n[data-md-color-accent=cyan] {\n  --md-accent-fg-color: hsla(188, 100%, 42%, 1);\n  --md-accent-fg-color--transparent: hsla(188, 100%, 42%, 0.1);\n  --md-accent-bg-color: hsla(0, 0%, 100%, 1);\n  --md-accent-bg-color--light: hsla(0, 0%, 100%, 0.7);\n}\n\n[data-md-color-accent=teal] {\n  --md-accent-fg-color: hsla(172, 100%, 37%, 1);\n  --md-accent-fg-color--transparent: hsla(172, 100%, 37%, 0.1);\n  --md-accent-bg-color: hsla(0, 0%, 100%, 1);\n  --md-accent-bg-color--light: hsla(0, 0%, 100%, 0.7);\n}\n\n[data-md-color-accent=green] {\n  --md-accent-fg-color: hsla(145, 100%, 39%, 1);\n  --md-accent-fg-color--transparent: hsla(145, 100%, 39%, 0.1);\n  --md-accent-bg-color: hsla(0, 0%, 100%, 1);\n  --md-accent-bg-color--light: hsla(0, 0%, 100%, 0.7);\n}\n\n[data-md-color-accent=light-green] {\n  --md-accent-fg-color: hsla(97, 81%, 48%, 1);\n  --md-accent-fg-color--transparent: hsla(97, 81%, 48%, 0.1);\n  --md-accent-bg-color: hsla(0, 0%, 100%, 1);\n  --md-accent-bg-color--light: hsla(0, 0%, 100%, 0.7);\n}\n\n[data-md-color-accent=lime] {\n  --md-accent-fg-color: hsla(75, 100%, 46%, 1);\n  --md-accent-fg-color--transparent: hsla(75, 100%, 46%, 0.1);\n  --md-accent-bg-color: hsla(0, 0%, 0%, 0.87);\n  --md-accent-bg-color--light: hsla(0, 0%, 0%, 0.54);\n}\n\n[data-md-color-accent=yellow] {\n  --md-accent-fg-color: hsla(50, 100%, 50%, 1);\n  --md-accent-fg-color--transparent: hsla(50, 100%, 50%, 0.1);\n  --md-accent-bg-color: hsla(0, 0%, 0%, 0.87);\n  --md-accent-bg-color--light: hsla(0, 0%, 0%, 0.54);\n}\n\n[data-md-color-accent=amber] {\n  --md-accent-fg-color: hsla(40, 100%, 50%, 1);\n  --md-accent-fg-color--transparent: hsla(40, 100%, 50%, 0.1);\n  --md-accent-bg-color: hsla(0, 0%, 0%, 0.87);\n  --md-accent-bg-color--light: hsla(0, 0%, 0%, 0.54);\n}\n\n[data-md-color-accent=orange] {\n  --md-accent-fg-color: hsla(34, 100%, 50%, 1);\n  --md-accent-fg-color--transparent: hsla(34, 100%, 50%, 0.1);\n  --md-accent-bg-color: hsla(0, 0%, 0%, 0.87);\n  --md-accent-bg-color--light: hsla(0, 0%, 0%, 0.54);\n}\n\n[data-md-color-accent=deep-orange] {\n  --md-accent-fg-color: hsla(14, 100%, 63%, 1);\n  --md-accent-fg-color--transparent: hsla(14, 100%, 63%, 0.1);\n  --md-accent-bg-color: hsla(0, 0%, 100%, 1);\n  --md-accent-bg-color--light: hsla(0, 0%, 100%, 0.7);\n}\n\n[data-md-color-primary=red] {\n  --md-primary-fg-color: hsl(1, 83%, 63%);\n  --md-primary-fg-color--light: hsl(0, 69%, 67%);\n  --md-primary-fg-color--dark: hsl(1, 77%, 55%);\n  --md-primary-bg-color: hsla(0, 0%, 100%, 1);\n  --md-primary-bg-color--light: hsla(0, 0%, 100%, 0.7);\n}\n\n[data-md-color-primary=pink] {\n  --md-primary-fg-color: hsl(340, 82%, 52%);\n  --md-primary-fg-color--light: hsl(340, 82%, 59%);\n  --md-primary-fg-color--dark: hsl(336, 78%, 43%);\n  --md-primary-bg-color: hsla(0, 0%, 100%, 1);\n  --md-primary-bg-color--light: hsla(0, 0%, 100%, 0.7);\n}\n\n[data-md-color-primary=purple] {\n  --md-primary-fg-color: hsl(291, 47%, 51%);\n  --md-primary-fg-color--light: hsl(291, 47%, 60%);\n  --md-primary-fg-color--dark: hsl(287, 65%, 40%);\n  --md-primary-bg-color: hsla(0, 0%, 100%, 1);\n  --md-primary-bg-color--light: hsla(0, 0%, 100%, 0.7);\n}\n\n[data-md-color-primary=deep-purple] {\n  --md-primary-fg-color: hsl(262, 47%, 55%);\n  --md-primary-fg-color--light: hsl(262, 47%, 63%);\n  --md-primary-fg-color--dark: hsl(262, 52%, 47%);\n  --md-primary-bg-color: hsla(0, 0%, 100%, 1);\n  --md-primary-bg-color--light: hsla(0, 0%, 100%, 0.7);\n}\n\n[data-md-color-primary=indigo] {\n  --md-primary-fg-color: hsl(231, 48%, 48%);\n  --md-primary-fg-color--light: hsl(231, 44%, 56%);\n  --md-primary-fg-color--dark: hsl(232, 54%, 41%);\n  --md-primary-bg-color: hsla(0, 0%, 100%, 1);\n  --md-primary-bg-color--light: hsla(0, 0%, 100%, 0.7);\n}\n\n[data-md-color-primary=blue] {\n  --md-primary-fg-color: hsl(207, 90%, 54%);\n  --md-primary-fg-color--light: hsl(207, 90%, 61%);\n  --md-primary-fg-color--dark: hsl(210, 79%, 46%);\n  --md-primary-bg-color: hsla(0, 0%, 100%, 1);\n  --md-primary-bg-color--light: hsla(0, 0%, 100%, 0.7);\n}\n\n[data-md-color-primary=light-blue] {\n  --md-primary-fg-color: hsl(199, 98%, 48%);\n  --md-primary-fg-color--light: hsl(199, 92%, 56%);\n  --md-primary-fg-color--dark: hsl(201, 98%, 41%);\n  --md-primary-bg-color: hsla(0, 0%, 100%, 1);\n  --md-primary-bg-color--light: hsla(0, 0%, 100%, 0.7);\n}\n\n[data-md-color-primary=cyan] {\n  --md-primary-fg-color: hsl(187, 100%, 42%);\n  --md-primary-fg-color--light: hsl(187, 71%, 50%);\n  --md-primary-fg-color--dark: hsl(186, 100%, 33%);\n  --md-primary-bg-color: hsla(0, 0%, 100%, 1);\n  --md-primary-bg-color--light: hsla(0, 0%, 100%, 0.7);\n}\n\n[data-md-color-primary=teal] {\n  --md-primary-fg-color: hsl(174, 100%, 29%);\n  --md-primary-fg-color--light: hsl(174, 63%, 40%);\n  --md-primary-fg-color--dark: hsl(173, 100%, 24%);\n  --md-primary-bg-color: hsla(0, 0%, 100%, 1);\n  --md-primary-bg-color--light: hsla(0, 0%, 100%, 0.7);\n}\n\n[data-md-color-primary=green] {\n  --md-primary-fg-color: hsl(122, 39%, 49%);\n  --md-primary-fg-color--light: hsl(123, 38%, 57%);\n  --md-primary-fg-color--dark: hsl(123, 43%, 39%);\n  --md-primary-bg-color: hsla(0, 0%, 100%, 1);\n  --md-primary-bg-color--light: hsla(0, 0%, 100%, 0.7);\n}\n\n[data-md-color-primary=light-green] {\n  --md-primary-fg-color: hsl(88, 50%, 53%);\n  --md-primary-fg-color--light: hsl(88, 50%, 60%);\n  --md-primary-fg-color--dark: hsl(92, 48%, 42%);\n  --md-primary-bg-color: hsla(0, 0%, 100%, 1);\n  --md-primary-bg-color--light: hsla(0, 0%, 100%, 0.7);\n}\n\n[data-md-color-primary=lime] {\n  --md-primary-fg-color: hsl(66, 70%, 54%);\n  --md-primary-fg-color--light: hsl(66, 70%, 61%);\n  --md-primary-fg-color--dark: hsl(62, 61%, 44%);\n  --md-primary-bg-color: hsla(0, 0%, 0%, 0.87);\n  --md-primary-bg-color--light: hsla(0, 0%, 0%, 0.54);\n}\n\n[data-md-color-primary=yellow] {\n  --md-primary-fg-color: hsl(54, 100%, 62%);\n  --md-primary-fg-color--light: hsl(54, 100%, 67%);\n  --md-primary-fg-color--dark: hsl(43, 96%, 58%);\n  --md-primary-bg-color: hsla(0, 0%, 0%, 0.87);\n  --md-primary-bg-color--light: hsla(0, 0%, 0%, 0.54);\n}\n\n[data-md-color-primary=amber] {\n  --md-primary-fg-color: hsl(45, 100%, 51%);\n  --md-primary-fg-color--light: hsl(45, 100%, 58%);\n  --md-primary-fg-color--dark: hsl(38, 100%, 50%);\n  --md-primary-bg-color: hsla(0, 0%, 0%, 0.87);\n  --md-primary-bg-color--light: hsla(0, 0%, 0%, 0.54);\n}\n\n[data-md-color-primary=orange] {\n  --md-primary-fg-color: hsl(36, 100%, 57%);\n  --md-primary-fg-color--light: hsl(36, 100%, 57%);\n  --md-primary-fg-color--dark: hsl(33, 100%, 49%);\n  --md-primary-bg-color: hsla(0, 0%, 0%, 0.87);\n  --md-primary-bg-color--light: hsla(0, 0%, 0%, 0.54);\n}\n\n[data-md-color-primary=deep-orange] {\n  --md-primary-fg-color: hsl(14, 100%, 63%);\n  --md-primary-fg-color--light: hsl(14, 100%, 70%);\n  --md-primary-fg-color--dark: hsl(14, 91%, 54%);\n  --md-primary-bg-color: hsla(0, 0%, 100%, 1);\n  --md-primary-bg-color--light: hsla(0, 0%, 100%, 0.7);\n}\n\n[data-md-color-primary=brown] {\n  --md-primary-fg-color: hsl(16, 25%, 38%);\n  --md-primary-fg-color--light: hsl(16, 18%, 47%);\n  --md-primary-fg-color--dark: hsl(14, 26%, 29%);\n  --md-primary-bg-color: hsla(0, 0%, 100%, 1);\n  --md-primary-bg-color--light: hsla(0, 0%, 100%, 0.7);\n}\n\n[data-md-color-primary=grey] {\n  --md-primary-fg-color: hsl(0, 0%, 46%);\n  --md-primary-fg-color--light: hsl(0, 0%, 62%);\n  --md-primary-fg-color--dark: hsl(0, 0%, 38%);\n  --md-primary-bg-color: hsla(0, 0%, 100%, 1);\n  --md-primary-bg-color--light: hsla(0, 0%, 100%, 0.7);\n  --md-typeset-a-color: hsl(231, 48%, 48%);\n}\n\n[data-md-color-primary=blue-grey] {\n  --md-primary-fg-color: hsl(199, 18%, 40%);\n  --md-primary-fg-color--light: hsl(200, 18%, 46%);\n  --md-primary-fg-color--dark: hsl(199, 18%, 33%);\n  --md-primary-bg-color: hsla(0, 0%, 100%, 1);\n  --md-primary-bg-color--light: hsla(0, 0%, 100%, 0.7);\n  --md-typeset-a-color: hsl(231, 48%, 48%);\n}\n\n[data-md-color-primary=light-green]:not([data-md-color-scheme=slate]) {\n  --md-typeset-a-color: hsl(88deg, 58%, 43%);\n}\n\n[data-md-color-primary=lime]:not([data-md-color-scheme=slate]) {\n  --md-typeset-a-color: hsl(66deg, 88%, 32%);\n}\n\n[data-md-color-primary=yellow]:not([data-md-color-scheme=slate]) {\n  --md-typeset-a-color: hsl(54deg, 100%, 36%);\n}\n\n[data-md-color-primary=amber]:not([data-md-color-scheme=slate]) {\n  --md-typeset-a-color: hsl(45deg, 100%, 41%);\n}\n\n[data-md-color-primary=orange]:not([data-md-color-scheme=slate]) {\n  --md-typeset-a-color: hsl(36deg, 100%, 45%);\n}\n\n[data-md-color-primary=white] {\n  --md-primary-fg-color: hsla(0, 0%, 100%, 1);\n  --md-primary-fg-color--light: hsla(0, 0%, 100%, 0.7);\n  --md-primary-fg-color--dark: hsla(0, 0%, 0%, 0.07);\n  --md-primary-bg-color: hsla(0, 0%, 0%, 0.87);\n  --md-primary-bg-color--light: hsla(0, 0%, 0%, 0.54);\n  --md-typeset-a-color: hsl(231, 48%, 48%);\n}\n[data-md-color-primary=white] .md-hero--expand {\n  border-bottom: 0.05rem solid hsla(0deg, 0%, 0%, 0.07);\n}\n@media screen and (max-width: 76.1875em) {\n  [data-md-color-primary=white] .md-hero {\n    border-bottom: 0.05rem solid hsla(0deg, 0%, 0%, 0.07);\n  }\n}\n@media screen and (min-width: 60em) {\n  [data-md-color-primary=white] .md-search__form {\n    background-color: hsla(0deg, 0%, 0%, 0.07);\n  }\n  [data-md-color-primary=white] .md-search__form:hover {\n    background-color: hsla(0deg, 0%, 0%, 0.32);\n  }\n  [data-md-color-primary=white] .md-search__input + .md-search__icon {\n    color: hsla(0deg, 0%, 0%, 0.87);\n  }\n}\n@media screen and (min-width: 76.25em) {\n  [data-md-color-primary=white] .md-tabs {\n    border-bottom: 0.05rem solid hsla(0deg, 0%, 0%, 0.07);\n  }\n}\n\n[data-md-color-primary=black] {\n  --md-primary-fg-color: hsla(0, 0%, 0%, 1);\n  --md-primary-fg-color--light: hsla(0, 0%, 0%, 0.54);\n  --md-primary-fg-color--dark: hsla(0, 0%, 0%, 1);\n  --md-primary-bg-color: hsla(0, 0%, 100%, 1);\n  --md-primary-bg-color--light: hsla(0, 0%, 100%, 0.7);\n  --md-typeset-a-color: hsl(231, 48%, 48%);\n}\n[data-md-color-primary=black] .md-header {\n  background-color: hsl(0deg, 0%, 0%);\n}\n[data-md-color-primary=black] .md-hero {\n  background-color: hsl(0deg, 0%, 0%);\n}\n@media screen and (max-width: 59.9375em) {\n  [data-md-color-primary=black] .md-nav__source {\n    background-color: hsla(0deg, 0%, 0%, 0.87);\n  }\n}\n@media screen and (min-width: 60em) {\n  [data-md-color-primary=black] .md-search__form {\n    background-color: hsla(0deg, 0%, 100%, 0.12);\n  }\n  [data-md-color-primary=black] .md-search__form:hover {\n    background-color: hsla(0deg, 0%, 100%, 0.3);\n  }\n}\n@media screen and (max-width: 76.1875em) {\n  html [data-md-color-primary=black] .md-nav--primary .md-nav__title[for=__drawer] {\n    background-color: hsl(0deg, 0%, 0%);\n  }\n}\n@media screen and (min-width: 76.25em) {\n  [data-md-color-primary=black] .md-tabs {\n    background-color: hsl(0deg, 0%, 0%);\n  }\n}", "////\n/// Copyright (c) 2016-2022 Martin Donath \n///\n/// Permission is hereby granted, free of charge, to any person obtaining a\n/// copy of this software and associated documentation files (the \"Software\"),\n/// to deal in the Software without restriction, including without limitation\n/// the rights to use, copy, modify, merge, publish, distribute, sublicense,\n/// and/or sell copies of the Software, and to permit persons to whom the\n/// Software is furnished to do so, subject to the following conditions:\n///\n/// The above copyright notice and this permission notice shall be included in\n/// all copies or substantial portions of the Software.\n///\n/// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n/// FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL\n/// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n/// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n/// DEALINGS\n////\n\n// ----------------------------------------------------------------------------\n// Rules\n// ----------------------------------------------------------------------------\n\n// Define accent colors\n@each $name, $color in (\n  \"red\":         $clr-red-a400,\n  \"pink\":        $clr-pink-a400,\n  \"purple\":      $clr-purple-a200,\n  \"deep-purple\": $clr-deep-purple-a200,\n  \"indigo\":      $clr-indigo-a200,\n  \"blue\":        $clr-blue-a200,\n  \"light-blue\":  $clr-light-blue-a700,\n  \"cyan\":        $clr-cyan-a700,\n  \"teal\":        $clr-teal-a700,\n  \"green\":       $clr-green-a700,\n  \"light-green\": $clr-light-green-a700,\n  \"lime\":        $clr-lime-a700,\n  \"yellow\":      $clr-yellow-a700,\n  \"amber\":       $clr-amber-a700,\n  \"orange\":      $clr-orange-a400,\n  \"deep-orange\": $clr-deep-orange-a200\n) {\n\n  // Color palette\n  [data-md-color-accent=\"#{$name}\"] {\n    --md-accent-fg-color:              hsla(#{hex2hsl($color)}, 1);\n    --md-accent-fg-color--transparent: hsla(#{hex2hsl($color)}, 0.1);\n\n    // Inverted text for lighter shades\n    @if index(\"lime\" \"yellow\" \"amber\" \"orange\", $name) {\n      --md-accent-bg-color:           hsla(0, 0%, 0%, 0.87);\n      --md-accent-bg-color--light:    hsla(0, 0%, 0%, 0.54);\n    } @else {\n      --md-accent-bg-color:           hsla(0, 0%, 100%, 1);\n      --md-accent-bg-color--light:    hsla(0, 0%, 100%, 0.7);\n    }\n  }\n}\n", "////\n/// Copyright (c) 2016-2022 Martin Donath \n///\n/// Permission is hereby granted, free of charge, to any person obtaining a\n/// copy of this software and associated documentation files (the \"Software\"),\n/// to deal in the Software without restriction, including without limitation\n/// the rights to use, copy, modify, merge, publish, distribute, sublicense,\n/// and/or sell copies of the Software, and to permit persons to whom the\n/// Software is furnished to do so, subject to the following conditions:\n///\n/// The above copyright notice and this permission notice shall be included in\n/// all copies or substantial portions of the Software.\n///\n/// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n/// FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL\n/// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n/// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n/// DEALINGS\n////\n\n@use \"sass:list\";\n\n// ----------------------------------------------------------------------------\n// Rules\n// ----------------------------------------------------------------------------\n\n// Define primary colors\n@each $name, $colors in (\n  \"red\":         $clr-red-400         $clr-red-300         $clr-red-600,\n  \"pink\":        $clr-pink-500        $clr-pink-400        $clr-pink-700,\n  \"purple\":      $clr-purple-400      $clr-purple-300      $clr-purple-600,\n  \"deep-purple\": $clr-deep-purple-400 $clr-deep-purple-300 $clr-deep-purple-500,\n  \"indigo\":      $clr-indigo-500      $clr-indigo-400      $clr-indigo-700,\n  \"blue\":        $clr-blue-500        $clr-blue-400        $clr-blue-700,\n  \"light-blue\":  $clr-light-blue-500  $clr-light-blue-400  $clr-light-blue-700,\n  \"cyan\":        $clr-cyan-500        $clr-cyan-400        $clr-cyan-700,\n  \"teal\":        $clr-teal-500        $clr-teal-400        $clr-teal-700,\n  \"green\":       $clr-green-500       $clr-green-400       $clr-green-700,\n  \"light-green\": $clr-light-green-500 $clr-light-green-400 $clr-light-green-700,\n  \"lime\":        $clr-lime-500        $clr-lime-400        $clr-lime-700,\n  \"yellow\":      $clr-yellow-500      $clr-yellow-400      $clr-yellow-700,\n  \"amber\":       $clr-amber-500       $clr-amber-400       $clr-amber-700,\n  \"orange\":      $clr-orange-400      $clr-orange-400      $clr-orange-600,\n  \"deep-orange\": $clr-deep-orange-400 $clr-deep-orange-300 $clr-deep-orange-600,\n  \"brown\":       $clr-brown-500       $clr-brown-400       $clr-brown-700,\n  \"grey\":        $clr-grey-600        $clr-grey-500        $clr-grey-700,\n  \"blue-grey\":   $clr-blue-grey-600   $clr-blue-grey-500   $clr-blue-grey-700\n) {\n\n  // Color palette\n  [data-md-color-primary=\"#{$name}\"] {\n    --md-primary-fg-color:             hsl(#{hex2hsl(list.nth($colors, 1))});\n    --md-primary-fg-color--light:      hsl(#{hex2hsl(list.nth($colors, 2))});\n    --md-primary-fg-color--dark:       hsl(#{hex2hsl(list.nth($colors, 3))});\n\n    // Inverted text for lighter shades\n    @if index(\"lime\" \"yellow\" \"amber\" \"orange\", $name) {\n      --md-primary-bg-color:           hsla(0, 0%, 0%, 0.87);\n      --md-primary-bg-color--light:    hsla(0, 0%, 0%, 0.54);\n    } @else {\n      --md-primary-bg-color:           hsla(0, 0%, 100%, 1);\n      --md-primary-bg-color--light:    hsla(0, 0%, 100%, 0.7);\n    }\n\n    // Typeset color shades\n    @if index(\"grey\" \"blue-grey\", $name) {\n      --md-typeset-a-color:            hsl(#{hex2hsl($clr-indigo-500)});\n    }\n  }\n}\n\n// ----------------------------------------------------------------------------\n\n// Adjust link colors for light primary colors\n@each $name, $color in (\n  \"light-green\":                       hsl(88, 58%, 43%),\n  \"lime\":                              hsl(66, 88%, 32%),\n  \"yellow\":                            hsl(54, 100%, 36%),\n  \"amber\":                             hsl(45, 100%, 41%),\n  \"orange\":                            hsl(36, 100%, 45%)\n) {\n  [data-md-color-primary=\"#{$name}\"]:not([data-md-color-scheme=\"slate\"]) {\n    --md-typeset-a-color: #{$color};\n  }\n}\n\n// ----------------------------------------------------------------------------\n// Rules: white\n// ----------------------------------------------------------------------------\n\n// Define primary colors for white\n[data-md-color-primary=\"white\"] {\n  --md-primary-fg-color:               hsla(0, 0%, 100%, 1);\n  --md-primary-fg-color--light:        hsla(0, 0%, 100%, 0.7);\n  --md-primary-fg-color--dark:         hsla(0, 0%, 0%, 0.07);\n  --md-primary-bg-color:               hsla(0, 0%, 0%, 0.87);\n  --md-primary-bg-color--light:        hsla(0, 0%, 0%, 0.54);\n\n  // Typeset `a` color shades\n  --md-typeset-a-color:                hsl(#{hex2hsl($clr-indigo-500)});\n\n  // Add a border if there are no tabs\n  .md-hero--expand {\n    border-bottom: px2rem(1px) solid hsla(0, 0%, 0%, 0.07);\n  }\n\n  // [tablet -]: Set bottom border for hero\n  @include break-to-device(tablet) {\n\n    // Hero teaser\n    .md-hero {\n      border-bottom: px2rem(1px) solid hsla(0, 0%, 0%, 0.07);\n    }\n  }\n\n  // [tablet portrait +]: Header-embedded search\n  @include break-from-device(tablet landscape) {\n\n    // Search form\n    .md-search__form {\n      background-color: hsla(0, 0%, 0%, 0.07);\n\n      // Search form on hover\n      &:hover {\n        background-color: hsla(0, 0%, 0%, 0.32);\n      }\n    }\n\n    // Search icon\n    .md-search__input + .md-search__icon {\n      color: hsla(0, 0%, 0%, 0.87);\n    }\n  }\n\n  // [screen +]: Add bottom border for tabs\n  @include break-from-device(screen) {\n\n    // Navigation tabs\n    .md-tabs {\n      border-bottom: px2rem(1px) solid hsla(0, 0%, 0%, 0.07);\n    }\n  }\n}\n\n// ----------------------------------------------------------------------------\n// Rules: black\n// ----------------------------------------------------------------------------\n\n// Define primary colors for black\n[data-md-color-primary=\"black\"] {\n  --md-primary-fg-color:               hsla(0, 0%, 0%, 1);\n  --md-primary-fg-color--light:        hsla(0, 0%, 0%, 0.54);\n  --md-primary-fg-color--dark:         hsla(0, 0%, 0%, 1);\n  --md-primary-bg-color:               hsla(0, 0%, 100%, 1);\n  --md-primary-bg-color--light:        hsla(0, 0%, 100%, 0.7);\n\n  // Typeset `a` color shades\n  --md-typeset-a-color:                hsl(#{hex2hsl($clr-indigo-500)});\n\n  // Header\n  .md-header {\n    background-color: hsla(0, 0%, 0%, 1);\n  }\n\n  // Hero teaser\n  .md-hero {\n    background-color: hsla(0, 0%, 0%, 1);\n  }\n\n  // [tablet portrait -]: Layered navigation\n  @include break-to-device(tablet portrait) {\n\n    // Repository information container\n    .md-nav__source {\n      background-color: hsla(0, 0%, 0%, 0.87);\n    }\n  }\n\n  // [tablet landscape +]: Header-embedded search\n  @include break-from-device(tablet landscape) {\n\n    // Search form\n    .md-search__form {\n      background-color: hsla(0, 0%, 100%, 0.12);\n\n      // Search form on hover\n      &:hover {\n        background-color: hsla(0, 0%, 100%, 0.3);\n      }\n    }\n  }\n\n  // [tablet -]: Layered navigation\n  @include break-to-device(tablet) {\n\n    // Site title in main navigation\n    html & .md-nav--primary .md-nav__title[for=\"__drawer\"] {\n      background-color: hsla(0, 0%, 0%, 1);\n    }\n  }\n\n  // [screen +]: Set background color for tabs\n  @include break-from-device(screen) {\n\n    // Navigation tabs\n    .md-tabs {\n      background-color: hsla(0, 0%, 0%, 1);\n    }\n  }\n}\n", "////\n/// Copyright (c) 2016-2022 Martin Donath \n///\n/// Permission is hereby granted, free of charge, to any person obtaining a\n/// copy of this software and associated documentation files (the \"Software\"),\n/// to deal in the Software without restriction, including without limitation\n/// the rights to use, copy, modify, merge, publish, distribute, sublicense,\n/// and/or sell copies of the Software, and to permit persons to whom the\n/// Software is furnished to do so, subject to the following conditions:\n///\n/// The above copyright notice and this permission notice shall be included in\n/// all copies or substantial portions of the Software.\n///\n/// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n/// FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL\n/// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n/// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n/// DEALINGS\n////\n\n@use \"sass:list\";\n@use \"sass:map\";\n@use \"sass:math\";\n\n// ----------------------------------------------------------------------------\n// Variables\n// ----------------------------------------------------------------------------\n\n///\n/// Device-specific breakpoints\n///\n/// @example\n///   $break-devices: (\n///     mobile: (\n///       portrait:  220px  479px,\n///       landscape: 480px  719px\n///     ),\n///     tablet: (\n///       portrait:  720px  959px,\n///       landscape: 960px  1219px\n///     ),\n///     screen: (\n///       small:     1220px 1599px,\n///       medium:    1600px 1999px,\n///       large:     2000px\n///     )\n///   );\n///\n$break-devices: () !default;\n\n// ----------------------------------------------------------------------------\n// Helpers\n// ----------------------------------------------------------------------------\n\n///\n/// Choose minimum and maximum device widths\n///\n@function break-select-min-max($devices) {\n  $min: 1000000;\n  $max: 0;\n  @each $key, $value in $devices {\n    @while type-of($value) == map {\n      $value: break-select-min-max($value);\n    }\n    @if type-of($value) == list {\n      @each $number in $value {\n        @if type-of($number) == number {\n          $min: math.min($number, $min);\n          @if $max {\n            $max: math.max($number, $max);\n          }\n        } @else {\n          @error \"Invalid number: #{$number}\";\n        }\n      }\n    } @else if type-of($value) == number {\n      $min: math.min($value, $min);\n      $max: null;\n    } @else {\n      @error \"Invalid value: #{$value}\";\n    }\n  }\n  @return $min, $max;\n}\n\n///\n/// Select minimum and maximum widths for a device breakpoint\n///\n@function break-select-device($device) {\n  $current: $break-devices;\n  @for $n from 1 through length($device) {\n    @if type-of($current) == map {\n      $current: map.get($current, list.nth($device, $n));\n    } @else {\n      @error \"Invalid device map: #{$devices}\";\n    }\n  }\n  @if type-of($current) == list or type-of($current) == number {\n    $current: (default: $current);\n  }\n  @return break-select-min-max($current);\n}\n\n// ----------------------------------------------------------------------------\n// Mixins\n// ----------------------------------------------------------------------------\n\n///\n/// A minimum-maximum media query breakpoint\n///\n@mixin break-at($breakpoint) {\n  @if type-of($breakpoint) == number {\n    @media screen and (min-width: $breakpoint) {\n      @content;\n    }\n  } @else if type-of($breakpoint) == list {\n    $min: list.nth($breakpoint, 1);\n    $max: list.nth($breakpoint, 2);\n    @if type-of($min) == number and type-of($max) == number {\n      @media screen and (min-width: $min) and (max-width: $max) {\n        @content;\n      }\n    } @else {\n      @error \"Invalid breakpoint: #{$breakpoint}\";\n    }\n  } @else {\n    @error \"Invalid breakpoint: #{$breakpoint}\";\n  }\n}\n\n///\n/// An orientation media query breakpoint\n///\n@mixin break-at-orientation($breakpoint) {\n  @if type-of($breakpoint) == string {\n    @media screen and (orientation: $breakpoint) {\n      @content;\n    }\n  } @else {\n    @error \"Invalid breakpoint: #{$breakpoint}\";\n  }\n}\n\n///\n/// A maximum-aspect-ratio media query breakpoint\n///\n@mixin break-at-ratio($breakpoint) {\n  @if type-of($breakpoint) == number {\n    @media screen and (max-aspect-ratio: $breakpoint) {\n      @content;\n    }\n  } @else {\n    @error \"Invalid breakpoint: #{$breakpoint}\";\n  }\n}\n\n///\n/// A minimum-maximum media query device breakpoint\n///\n@mixin break-at-device($device) {\n  @if type-of($device) == string {\n    $device: $device,;\n  }\n  @if type-of($device) == list {\n    $breakpoint: break-select-device($device);\n    @if list.nth($breakpoint, 2) {\n      $min: list.nth($breakpoint, 1);\n      $max: list.nth($breakpoint, 2);\n\n      @media screen and (min-width: $min) and (max-width: $max) {\n        @content;\n      }\n    } @else {\n      @error \"Invalid device: #{$device}\";\n    }\n  } @else {\n    @error \"Invalid device: #{$device}\";\n  }\n}\n\n///\n/// A minimum media query device breakpoint\n///\n@mixin break-from-device($device) {\n  @if type-of($device) == string {\n    $device: $device,;\n  }\n  @if type-of($device) == list {\n    $breakpoint: break-select-device($device);\n    $min: list.nth($breakpoint, 1);\n\n    @media screen and (min-width: $min) {\n      @content;\n    }\n  } @else {\n    @error \"Invalid device: #{$device}\";\n  }\n}\n\n///\n/// A maximum media query device breakpoint\n///\n@mixin break-to-device($device) {\n  @if type-of($device) == string {\n    $device: $device,;\n  }\n  @if type-of($device) == list {\n    $breakpoint: break-select-device($device);\n    $max: list.nth($breakpoint, 2);\n\n    @media screen and (max-width: $max) {\n      @content;\n    }\n  } @else {\n    @error \"Invalid device: #{$device}\";\n  }\n}\n"]}}]}
\ No newline at end of file
diff --git a/_static/sphinx_immaterial_theme.1b5b7a2d5891aec19.min.js b/_static/sphinx_immaterial_theme.f9d9eeeb247ace16c.min.js
similarity index 72%
rename from _static/sphinx_immaterial_theme.1b5b7a2d5891aec19.min.js
rename to _static/sphinx_immaterial_theme.f9d9eeeb247ace16c.min.js
index 4af5b1c..825079e 100644
--- a/_static/sphinx_immaterial_theme.1b5b7a2d5891aec19.min.js
+++ b/_static/sphinx_immaterial_theme.f9d9eeeb247ace16c.min.js
@@ -1,4 +1,4 @@
-"use strict";(()=>{var aa=Object.create;var wr=Object.defineProperty;var sa=Object.getOwnPropertyDescriptor;var ca=Object.getOwnPropertyNames,Rt=Object.getOwnPropertySymbols,fa=Object.getPrototypeOf,Er=Object.prototype.hasOwnProperty,dn=Object.prototype.propertyIsEnumerable;var mn=(e,t,r)=>t in e?wr(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,V=(e,t)=>{for(var r in t||(t={}))Er.call(t,r)&&mn(e,r,t[r]);if(Rt)for(var r of Rt(t))dn.call(t,r)&&mn(e,r,t[r]);return e};var hn=(e,t)=>{var r={};for(var n in e)Er.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(e!=null&&Rt)for(var n of Rt(e))t.indexOf(n)<0&&dn.call(e,n)&&(r[n]=e[n]);return r};var vt=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var la=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of ca(t))!Er.call(e,o)&&o!==r&&wr(e,o,{get:()=>t[o],enumerable:!(n=sa(t,o))||n.enumerable});return e};var Je=(e,t,r)=>(r=e!=null?aa(fa(e)):{},la(t||!e||!e.__esModule?wr(r,"default",{value:e,enumerable:!0}):r,e));var ze=(e,t,r)=>new Promise((n,o)=>{var i=s=>{try{c(r.next(s))}catch(f){o(f)}},a=s=>{try{c(r.throw(s))}catch(f){o(f)}},c=s=>s.done?n(s.value):Promise.resolve(s.value).then(i,a);c((r=r.apply(e,t)).next())});var vn=vt((Sr,bn)=>{(function(e,t){typeof Sr=="object"&&typeof bn!="undefined"?t():typeof define=="function"&&define.amd?define(t):t()})(Sr,function(){"use strict";function e(r){var n=!0,o=!1,i=null,a={text:!0,search:!0,url:!0,tel:!0,email:!0,password:!0,number:!0,date:!0,month:!0,week:!0,time:!0,datetime:!0,"datetime-local":!0};function c(y){return!!(y&&y!==document&&y.nodeName!=="HTML"&&y.nodeName!=="BODY"&&"classList"in y&&"contains"in y.classList)}function s(y){var Te=y.type,Le=y.tagName;return!!(Le==="INPUT"&&a[Te]&&!y.readOnly||Le==="TEXTAREA"&&!y.readOnly||y.isContentEditable)}function f(y){y.classList.contains("focus-visible")||(y.classList.add("focus-visible"),y.setAttribute("data-focus-visible-added",""))}function u(y){!y.hasAttribute("data-focus-visible-added")||(y.classList.remove("focus-visible"),y.removeAttribute("data-focus-visible-added"))}function l(y){y.metaKey||y.altKey||y.ctrlKey||(c(r.activeElement)&&f(r.activeElement),n=!0)}function p(y){n=!1}function m(y){!c(y.target)||(n||s(y.target))&&f(y.target)}function h(y){!c(y.target)||(y.target.classList.contains("focus-visible")||y.target.hasAttribute("data-focus-visible-added"))&&(o=!0,window.clearTimeout(i),i=window.setTimeout(function(){o=!1},100),u(y.target))}function b(y){document.visibilityState==="hidden"&&(o&&(n=!0),w())}function w(){document.addEventListener("mousemove",$),document.addEventListener("mousedown",$),document.addEventListener("mouseup",$),document.addEventListener("pointermove",$),document.addEventListener("pointerdown",$),document.addEventListener("pointerup",$),document.addEventListener("touchmove",$),document.addEventListener("touchstart",$),document.addEventListener("touchend",$)}function q(){document.removeEventListener("mousemove",$),document.removeEventListener("mousedown",$),document.removeEventListener("mouseup",$),document.removeEventListener("pointermove",$),document.removeEventListener("pointerdown",$),document.removeEventListener("pointerup",$),document.removeEventListener("touchmove",$),document.removeEventListener("touchstart",$),document.removeEventListener("touchend",$)}function $(y){y.target.nodeName&&y.target.nodeName.toLowerCase()==="html"||(n=!1,q())}document.addEventListener("keydown",l,!0),document.addEventListener("mousedown",p,!0),document.addEventListener("pointerdown",p,!0),document.addEventListener("touchstart",p,!0),document.addEventListener("visibilitychange",b,!0),w(),r.addEventListener("focus",m,!0),r.addEventListener("blur",h,!0),r.nodeType===Node.DOCUMENT_FRAGMENT_NODE&&r.host?r.host.setAttribute("data-js-focus-visible",""):r.nodeType===Node.DOCUMENT_NODE&&(document.documentElement.classList.add("js-focus-visible"),document.documentElement.setAttribute("data-js-focus-visible",""))}if(typeof window!="undefined"&&typeof document!="undefined"){window.applyFocusVisiblePolyfill=e;var t;try{t=new CustomEvent("focus-visible-polyfill-ready")}catch(r){t=document.createEvent("CustomEvent"),t.initCustomEvent("focus-visible-polyfill-ready",!1,!1,{})}window.dispatchEvent(t)}typeof document!="undefined"&&e(document)})});var gn=vt(Or=>{(function(e){var t=function(){try{return!!Symbol.iterator}catch(f){return!1}},r=t(),n=function(f){var u={next:function(){var l=f.shift();return{done:l===void 0,value:l}}};return r&&(u[Symbol.iterator]=function(){return u}),u},o=function(f){return encodeURIComponent(f).replace(/%20/g,"+")},i=function(f){return decodeURIComponent(String(f).replace(/\+/g," "))},a=function(){var f=function(l){Object.defineProperty(this,"_entries",{writable:!0,value:{}});var p=typeof l;if(p!=="undefined")if(p==="string")l!==""&&this._fromString(l);else if(l instanceof f){var m=this;l.forEach(function(q,$){m.append($,q)})}else if(l!==null&&p==="object")if(Object.prototype.toString.call(l)==="[object Array]")for(var h=0;hm[0]?1:0}),f._entries&&(f._entries={});for(var l=0;l1?i(m[1]):"")}})})(typeof global!="undefined"?global:typeof window!="undefined"?window:typeof self!="undefined"?self:Or);(function(e){var t=function(){try{var o=new e.URL("b","http://a");return o.pathname="c d",o.href==="http://a/c%20d"&&o.searchParams}catch(i){return!1}},r=function(){var o=e.URL,i=function(s,f){typeof s!="string"&&(s=String(s)),f&&typeof f!="string"&&(f=String(f));var u=document,l;if(f&&(e.location===void 0||f!==e.location.href)){f=f.toLowerCase(),u=document.implementation.createHTMLDocument(""),l=u.createElement("base"),l.href=f,u.head.appendChild(l);try{if(l.href.indexOf(f)!==0)throw new Error(l.href)}catch(y){throw new Error("URL unable to set base "+f+" due to "+y)}}var p=u.createElement("a");p.href=s,l&&(u.body.appendChild(p),p.href=p.href);var m=u.createElement("input");if(m.type="url",m.value=s,p.protocol===":"||!/:/.test(p.href)||!m.checkValidity()&&!f)throw new TypeError("Invalid URL");Object.defineProperty(this,"_anchorElement",{value:p});var h=new e.URLSearchParams(this.search),b=!0,w=!0,q=this;["append","delete","set"].forEach(function(y){var Te=h[y];h[y]=function(){Te.apply(h,arguments),b&&(w=!1,q.search=h.toString(),w=!0)}}),Object.defineProperty(this,"searchParams",{value:h,enumerable:!0});var $=void 0;Object.defineProperty(this,"_updateSearchParams",{enumerable:!1,configurable:!1,writable:!1,value:function(){this.search!==$&&($=this.search,w&&(b=!1,this.searchParams._fromString(this.search),b=!0))}})},a=i.prototype,c=function(s){Object.defineProperty(a,s,{get:function(){return this._anchorElement[s]},set:function(f){this._anchorElement[s]=f},enumerable:!0})};["hash","host","hostname","port","protocol"].forEach(function(s){c(s)}),Object.defineProperty(a,"search",{get:function(){return this._anchorElement.search},set:function(s){this._anchorElement.search=s,this._updateSearchParams()},enumerable:!0}),Object.defineProperties(a,{toString:{get:function(){var s=this;return function(){return s.href}}},href:{get:function(){return this._anchorElement.href.replace(/\?$/,"")},set:function(s){this._anchorElement.href=s,this._updateSearchParams()},enumerable:!0},pathname:{get:function(){return this._anchorElement.pathname.replace(/(^\/?)/,"/")},set:function(s){this._anchorElement.pathname=s},enumerable:!0},origin:{get:function(){var s={"http:":80,"https:":443,"ftp:":21}[this._anchorElement.protocol],f=this._anchorElement.port!=s&&this._anchorElement.port!=="";return this._anchorElement.protocol+"//"+this._anchorElement.hostname+(f?":"+this._anchorElement.port:"")},enumerable:!0},password:{get:function(){return""},set:function(s){},enumerable:!0},username:{get:function(){return""},set:function(s){},enumerable:!0}}),i.createObjectURL=function(s){return o.createObjectURL.apply(o,arguments)},i.revokeObjectURL=function(s){return o.revokeObjectURL.apply(o,arguments)},e.URL=i};if(t()||r(),e.location!==void 0&&!("origin"in e.location)){var n=function(){return e.location.protocol+"//"+e.location.hostname+(e.location.port?":"+e.location.port:"")};try{Object.defineProperty(e.location,"origin",{get:n,enumerable:!0})}catch(o){setInterval(function(){e.location.origin=n()},100)}}})(typeof global!="undefined"?global:typeof window!="undefined"?window:typeof self!="undefined"?self:Or)});var Un=vt((tc,Pt)=>{/*! *****************************************************************************
+"use strict";(()=>{var aa=Object.create;var wr=Object.defineProperty;var sa=Object.getOwnPropertyDescriptor;var ca=Object.getOwnPropertyNames,Rt=Object.getOwnPropertySymbols,fa=Object.getPrototypeOf,Er=Object.prototype.hasOwnProperty,dn=Object.prototype.propertyIsEnumerable;var mn=(e,t,r)=>t in e?wr(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,N=(e,t)=>{for(var r in t||(t={}))Er.call(t,r)&&mn(e,r,t[r]);if(Rt)for(var r of Rt(t))dn.call(t,r)&&mn(e,r,t[r]);return e};var hn=(e,t)=>{var r={};for(var n in e)Er.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(e!=null&&Rt)for(var n of Rt(e))t.indexOf(n)<0&&dn.call(e,n)&&(r[n]=e[n]);return r};var vt=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var la=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of ca(t))!Er.call(e,o)&&o!==r&&wr(e,o,{get:()=>t[o],enumerable:!(n=sa(t,o))||n.enumerable});return e};var Je=(e,t,r)=>(r=e!=null?aa(fa(e)):{},la(t||!e||!e.__esModule?wr(r,"default",{value:e,enumerable:!0}):r,e));var ze=(e,t,r)=>new Promise((n,o)=>{var i=s=>{try{c(r.next(s))}catch(f){o(f)}},a=s=>{try{c(r.throw(s))}catch(f){o(f)}},c=s=>s.done?n(s.value):Promise.resolve(s.value).then(i,a);c((r=r.apply(e,t)).next())});var vn=vt((Sr,bn)=>{(function(e,t){typeof Sr=="object"&&typeof bn!="undefined"?t():typeof define=="function"&&define.amd?define(t):t()})(Sr,function(){"use strict";function e(r){var n=!0,o=!1,i=null,a={text:!0,search:!0,url:!0,tel:!0,email:!0,password:!0,number:!0,date:!0,month:!0,week:!0,time:!0,datetime:!0,"datetime-local":!0};function c(x){return!!(x&&x!==document&&x.nodeName!=="HTML"&&x.nodeName!=="BODY"&&"classList"in x&&"contains"in x.classList)}function s(x){var Te=x.type,Le=x.tagName;return!!(Le==="INPUT"&&a[Te]&&!x.readOnly||Le==="TEXTAREA"&&!x.readOnly||x.isContentEditable)}function f(x){x.classList.contains("focus-visible")||(x.classList.add("focus-visible"),x.setAttribute("data-focus-visible-added",""))}function u(x){!x.hasAttribute("data-focus-visible-added")||(x.classList.remove("focus-visible"),x.removeAttribute("data-focus-visible-added"))}function l(x){x.metaKey||x.altKey||x.ctrlKey||(c(r.activeElement)&&f(r.activeElement),n=!0)}function p(x){n=!1}function m(x){!c(x.target)||(n||s(x.target))&&f(x.target)}function h(x){!c(x.target)||(x.target.classList.contains("focus-visible")||x.target.hasAttribute("data-focus-visible-added"))&&(o=!0,window.clearTimeout(i),i=window.setTimeout(function(){o=!1},100),u(x.target))}function b(x){document.visibilityState==="hidden"&&(o&&(n=!0),v())}function v(){document.addEventListener("mousemove",$),document.addEventListener("mousedown",$),document.addEventListener("mouseup",$),document.addEventListener("pointermove",$),document.addEventListener("pointerdown",$),document.addEventListener("pointerup",$),document.addEventListener("touchmove",$),document.addEventListener("touchstart",$),document.addEventListener("touchend",$)}function V(){document.removeEventListener("mousemove",$),document.removeEventListener("mousedown",$),document.removeEventListener("mouseup",$),document.removeEventListener("pointermove",$),document.removeEventListener("pointerdown",$),document.removeEventListener("pointerup",$),document.removeEventListener("touchmove",$),document.removeEventListener("touchstart",$),document.removeEventListener("touchend",$)}function $(x){x.target.nodeName&&x.target.nodeName.toLowerCase()==="html"||(n=!1,V())}document.addEventListener("keydown",l,!0),document.addEventListener("mousedown",p,!0),document.addEventListener("pointerdown",p,!0),document.addEventListener("touchstart",p,!0),document.addEventListener("visibilitychange",b,!0),v(),r.addEventListener("focus",m,!0),r.addEventListener("blur",h,!0),r.nodeType===Node.DOCUMENT_FRAGMENT_NODE&&r.host?r.host.setAttribute("data-js-focus-visible",""):r.nodeType===Node.DOCUMENT_NODE&&(document.documentElement.classList.add("js-focus-visible"),document.documentElement.setAttribute("data-js-focus-visible",""))}if(typeof window!="undefined"&&typeof document!="undefined"){window.applyFocusVisiblePolyfill=e;var t;try{t=new CustomEvent("focus-visible-polyfill-ready")}catch(r){t=document.createEvent("CustomEvent"),t.initCustomEvent("focus-visible-polyfill-ready",!1,!1,{})}window.dispatchEvent(t)}typeof document!="undefined"&&e(document)})});var gn=vt(Or=>{(function(e){var t=function(){try{return!!Symbol.iterator}catch(f){return!1}},r=t(),n=function(f){var u={next:function(){var l=f.shift();return{done:l===void 0,value:l}}};return r&&(u[Symbol.iterator]=function(){return u}),u},o=function(f){return encodeURIComponent(f).replace(/%20/g,"+")},i=function(f){return decodeURIComponent(String(f).replace(/\+/g," "))},a=function(){var f=function(l){Object.defineProperty(this,"_entries",{writable:!0,value:{}});var p=typeof l;if(p!=="undefined")if(p==="string")l!==""&&this._fromString(l);else if(l instanceof f){var m=this;l.forEach(function(V,$){m.append($,V)})}else if(l!==null&&p==="object")if(Object.prototype.toString.call(l)==="[object Array]")for(var h=0;hm[0]?1:0}),f._entries&&(f._entries={});for(var l=0;l1?i(m[1]):"")}})})(typeof global!="undefined"?global:typeof window!="undefined"?window:typeof self!="undefined"?self:Or);(function(e){var t=function(){try{var o=new e.URL("b","http://a");return o.pathname="c d",o.href==="http://a/c%20d"&&o.searchParams}catch(i){return!1}},r=function(){var o=e.URL,i=function(s,f){typeof s!="string"&&(s=String(s)),f&&typeof f!="string"&&(f=String(f));var u=document,l;if(f&&(e.location===void 0||f!==e.location.href)){f=f.toLowerCase(),u=document.implementation.createHTMLDocument(""),l=u.createElement("base"),l.href=f,u.head.appendChild(l);try{if(l.href.indexOf(f)!==0)throw new Error(l.href)}catch(x){throw new Error("URL unable to set base "+f+" due to "+x)}}var p=u.createElement("a");p.href=s,l&&(u.body.appendChild(p),p.href=p.href);var m=u.createElement("input");if(m.type="url",m.value=s,p.protocol===":"||!/:/.test(p.href)||!m.checkValidity()&&!f)throw new TypeError("Invalid URL");Object.defineProperty(this,"_anchorElement",{value:p});var h=new e.URLSearchParams(this.search),b=!0,v=!0,V=this;["append","delete","set"].forEach(function(x){var Te=h[x];h[x]=function(){Te.apply(h,arguments),b&&(v=!1,V.search=h.toString(),v=!0)}}),Object.defineProperty(this,"searchParams",{value:h,enumerable:!0});var $=void 0;Object.defineProperty(this,"_updateSearchParams",{enumerable:!1,configurable:!1,writable:!1,value:function(){this.search!==$&&($=this.search,v&&(b=!1,this.searchParams._fromString(this.search),b=!0))}})},a=i.prototype,c=function(s){Object.defineProperty(a,s,{get:function(){return this._anchorElement[s]},set:function(f){this._anchorElement[s]=f},enumerable:!0})};["hash","host","hostname","port","protocol"].forEach(function(s){c(s)}),Object.defineProperty(a,"search",{get:function(){return this._anchorElement.search},set:function(s){this._anchorElement.search=s,this._updateSearchParams()},enumerable:!0}),Object.defineProperties(a,{toString:{get:function(){var s=this;return function(){return s.href}}},href:{get:function(){return this._anchorElement.href.replace(/\?$/,"")},set:function(s){this._anchorElement.href=s,this._updateSearchParams()},enumerable:!0},pathname:{get:function(){return this._anchorElement.pathname.replace(/(^\/?)/,"/")},set:function(s){this._anchorElement.pathname=s},enumerable:!0},origin:{get:function(){var s={"http:":80,"https:":443,"ftp:":21}[this._anchorElement.protocol],f=this._anchorElement.port!=s&&this._anchorElement.port!=="";return this._anchorElement.protocol+"//"+this._anchorElement.hostname+(f?":"+this._anchorElement.port:"")},enumerable:!0},password:{get:function(){return""},set:function(s){},enumerable:!0},username:{get:function(){return""},set:function(s){},enumerable:!0}}),i.createObjectURL=function(s){return o.createObjectURL.apply(o,arguments)},i.revokeObjectURL=function(s){return o.revokeObjectURL.apply(o,arguments)},e.URL=i};if(t()||r(),e.location!==void 0&&!("origin"in e.location)){var n=function(){return e.location.protocol+"//"+e.location.hostname+(e.location.port?":"+e.location.port:"")};try{Object.defineProperty(e.location,"origin",{get:n,enumerable:!0})}catch(o){setInterval(function(){e.location.origin=n()},100)}}})(typeof global!="undefined"?global:typeof window!="undefined"?window:typeof self!="undefined"?self:Or)});var Un=vt((tc,Pt)=>{/*! *****************************************************************************
 Copyright (c) Microsoft Corporation.
 
 Permission to use, copy, modify, and/or distribute this software for any
@@ -11,18 +11,18 @@ INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
 LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
 OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
 PERFORMANCE OF THIS SOFTWARE.
-***************************************************************************** */var yn,xn,wn,En,Sn,On,_n,Tn,Ln,Ht,_r,Mn,An,Cn,it,Rn,Hn,kn,Pn,$n,In,jn,Fn,kt;(function(e){var t=typeof global=="object"?global:typeof self=="object"?self:typeof this=="object"?this:{};typeof define=="function"&&define.amd?define("tslib",["exports"],function(n){e(r(t,r(n)))}):typeof Pt=="object"&&typeof Pt.exports=="object"?e(r(t,r(Pt.exports))):e(r(t));function r(n,o){return n!==t&&(typeof Object.create=="function"?Object.defineProperty(n,"__esModule",{value:!0}):n.__esModule=!0),function(i,a){return n[i]=o?o(i,a):a}}})(function(e){var t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,o){n.__proto__=o}||function(n,o){for(var i in o)Object.prototype.hasOwnProperty.call(o,i)&&(n[i]=o[i])};yn=function(n,o){if(typeof o!="function"&&o!==null)throw new TypeError("Class extends value "+String(o)+" is not a constructor or null");t(n,o);function i(){this.constructor=n}n.prototype=o===null?Object.create(o):(i.prototype=o.prototype,new i)},xn=Object.assign||function(n){for(var o,i=1,a=arguments.length;i=0;u--)(f=n[u])&&(s=(c<3?f(s):c>3?f(o,i,s):f(o,i))||s);return c>3&&s&&Object.defineProperty(o,i,s),s},Sn=function(n,o){return function(i,a){o(i,a,n)}},On=function(n,o){if(typeof Reflect=="object"&&typeof Reflect.metadata=="function")return Reflect.metadata(n,o)},_n=function(n,o,i,a){function c(s){return s instanceof i?s:new i(function(f){f(s)})}return new(i||(i=Promise))(function(s,f){function u(m){try{p(a.next(m))}catch(h){f(h)}}function l(m){try{p(a.throw(m))}catch(h){f(h)}}function p(m){m.done?s(m.value):c(m.value).then(u,l)}p((a=a.apply(n,o||[])).next())})},Tn=function(n,o){var i={label:0,sent:function(){if(s[0]&1)throw s[1];return s[1]},trys:[],ops:[]},a,c,s,f;return f={next:u(0),throw:u(1),return:u(2)},typeof Symbol=="function"&&(f[Symbol.iterator]=function(){return this}),f;function u(p){return function(m){return l([p,m])}}function l(p){if(a)throw new TypeError("Generator is already executing.");for(;i;)try{if(a=1,c&&(s=p[0]&2?c.return:p[0]?c.throw||((s=c.return)&&s.call(c),0):c.next)&&!(s=s.call(c,p[1])).done)return s;switch(c=0,s&&(p=[p[0]&2,s.value]),p[0]){case 0:case 1:s=p;break;case 4:return i.label++,{value:p[1],done:!1};case 5:i.label++,c=p[1],p=[0];continue;case 7:p=i.ops.pop(),i.trys.pop();continue;default:if(s=i.trys,!(s=s.length>0&&s[s.length-1])&&(p[0]===6||p[0]===2)){i=0;continue}if(p[0]===3&&(!s||p[1]>s[0]&&p[1]=n.length&&(n=void 0),{value:n&&n[a++],done:!n}}};throw new TypeError(o?"Object is not iterable.":"Symbol.iterator is not defined.")},_r=function(n,o){var i=typeof Symbol=="function"&&n[Symbol.iterator];if(!i)return n;var a=i.call(n),c,s=[],f;try{for(;(o===void 0||o-- >0)&&!(c=a.next()).done;)s.push(c.value)}catch(u){f={error:u}}finally{try{c&&!c.done&&(i=a.return)&&i.call(a)}finally{if(f)throw f.error}}return s},Mn=function(){for(var n=[],o=0;o1||u(b,w)})})}function u(b,w){try{l(a[b](w))}catch(q){h(s[0][3],q)}}function l(b){b.value instanceof it?Promise.resolve(b.value.v).then(p,m):h(s[0][2],b)}function p(b){u("next",b)}function m(b){u("throw",b)}function h(b,w){b(w),s.shift(),s.length&&u(s[0][0],s[0][1])}},Hn=function(n){var o,i;return o={},a("next"),a("throw",function(c){throw c}),a("return"),o[Symbol.iterator]=function(){return this},o;function a(c,s){o[c]=n[c]?function(f){return(i=!i)?{value:it(n[c](f)),done:c==="return"}:s?s(f):f}:s}},kn=function(n){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var o=n[Symbol.asyncIterator],i;return o?o.call(n):(n=typeof Ht=="function"?Ht(n):n[Symbol.iterator](),i={},a("next"),a("throw"),a("return"),i[Symbol.asyncIterator]=function(){return this},i);function a(s){i[s]=n[s]&&function(f){return new Promise(function(u,l){f=n[s](f),c(u,l,f.done,f.value)})}}function c(s,f,u,l){Promise.resolve(l).then(function(p){s({value:p,done:u})},f)}},Pn=function(n,o){return Object.defineProperty?Object.defineProperty(n,"raw",{value:o}):n.raw=o,n};var r=Object.create?function(n,o){Object.defineProperty(n,"default",{enumerable:!0,value:o})}:function(n,o){n.default=o};$n=function(n){if(n&&n.__esModule)return n;var o={};if(n!=null)for(var i in n)i!=="default"&&Object.prototype.hasOwnProperty.call(n,i)&&kt(o,n,i);return r(o,n),o},In=function(n){return n&&n.__esModule?n:{default:n}},jn=function(n,o){if(!o.has(n))throw new TypeError("attempted to get private field on non-instance");return o.get(n)},Fn=function(n,o,i){if(!o.has(n))throw new TypeError("attempted to set private field on non-instance");return o.set(n,i),i},e("__extends",yn),e("__assign",xn),e("__rest",wn),e("__decorate",En),e("__param",Sn),e("__metadata",On),e("__awaiter",_n),e("__generator",Tn),e("__exportStar",Ln),e("__createBinding",kt),e("__values",Ht),e("__read",_r),e("__spread",Mn),e("__spreadArrays",An),e("__spreadArray",Cn),e("__await",it),e("__asyncGenerator",Rn),e("__asyncDelegator",Hn),e("__asyncValues",kn),e("__makeTemplateObject",Pn),e("__importStar",$n),e("__importDefault",In),e("__classPrivateFieldGet",jn),e("__classPrivateFieldSet",Fn)})});var Qr=vt((Lt,Jr)=>{/*!
+***************************************************************************** */var yn,xn,wn,En,Sn,On,_n,Tn,Ln,Ht,_r,Mn,An,Cn,it,Rn,Hn,kn,Pn,$n,In,jn,Fn,kt;(function(e){var t=typeof global=="object"?global:typeof self=="object"?self:typeof this=="object"?this:{};typeof define=="function"&&define.amd?define("tslib",["exports"],function(n){e(r(t,r(n)))}):typeof Pt=="object"&&typeof Pt.exports=="object"?e(r(t,r(Pt.exports))):e(r(t));function r(n,o){return n!==t&&(typeof Object.create=="function"?Object.defineProperty(n,"__esModule",{value:!0}):n.__esModule=!0),function(i,a){return n[i]=o?o(i,a):a}}})(function(e){var t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,o){n.__proto__=o}||function(n,o){for(var i in o)Object.prototype.hasOwnProperty.call(o,i)&&(n[i]=o[i])};yn=function(n,o){if(typeof o!="function"&&o!==null)throw new TypeError("Class extends value "+String(o)+" is not a constructor or null");t(n,o);function i(){this.constructor=n}n.prototype=o===null?Object.create(o):(i.prototype=o.prototype,new i)},xn=Object.assign||function(n){for(var o,i=1,a=arguments.length;i=0;u--)(f=n[u])&&(s=(c<3?f(s):c>3?f(o,i,s):f(o,i))||s);return c>3&&s&&Object.defineProperty(o,i,s),s},Sn=function(n,o){return function(i,a){o(i,a,n)}},On=function(n,o){if(typeof Reflect=="object"&&typeof Reflect.metadata=="function")return Reflect.metadata(n,o)},_n=function(n,o,i,a){function c(s){return s instanceof i?s:new i(function(f){f(s)})}return new(i||(i=Promise))(function(s,f){function u(m){try{p(a.next(m))}catch(h){f(h)}}function l(m){try{p(a.throw(m))}catch(h){f(h)}}function p(m){m.done?s(m.value):c(m.value).then(u,l)}p((a=a.apply(n,o||[])).next())})},Tn=function(n,o){var i={label:0,sent:function(){if(s[0]&1)throw s[1];return s[1]},trys:[],ops:[]},a,c,s,f;return f={next:u(0),throw:u(1),return:u(2)},typeof Symbol=="function"&&(f[Symbol.iterator]=function(){return this}),f;function u(p){return function(m){return l([p,m])}}function l(p){if(a)throw new TypeError("Generator is already executing.");for(;i;)try{if(a=1,c&&(s=p[0]&2?c.return:p[0]?c.throw||((s=c.return)&&s.call(c),0):c.next)&&!(s=s.call(c,p[1])).done)return s;switch(c=0,s&&(p=[p[0]&2,s.value]),p[0]){case 0:case 1:s=p;break;case 4:return i.label++,{value:p[1],done:!1};case 5:i.label++,c=p[1],p=[0];continue;case 7:p=i.ops.pop(),i.trys.pop();continue;default:if(s=i.trys,!(s=s.length>0&&s[s.length-1])&&(p[0]===6||p[0]===2)){i=0;continue}if(p[0]===3&&(!s||p[1]>s[0]&&p[1]=n.length&&(n=void 0),{value:n&&n[a++],done:!n}}};throw new TypeError(o?"Object is not iterable.":"Symbol.iterator is not defined.")},_r=function(n,o){var i=typeof Symbol=="function"&&n[Symbol.iterator];if(!i)return n;var a=i.call(n),c,s=[],f;try{for(;(o===void 0||o-- >0)&&!(c=a.next()).done;)s.push(c.value)}catch(u){f={error:u}}finally{try{c&&!c.done&&(i=a.return)&&i.call(a)}finally{if(f)throw f.error}}return s},Mn=function(){for(var n=[],o=0;o1||u(b,v)})})}function u(b,v){try{l(a[b](v))}catch(V){h(s[0][3],V)}}function l(b){b.value instanceof it?Promise.resolve(b.value.v).then(p,m):h(s[0][2],b)}function p(b){u("next",b)}function m(b){u("throw",b)}function h(b,v){b(v),s.shift(),s.length&&u(s[0][0],s[0][1])}},Hn=function(n){var o,i;return o={},a("next"),a("throw",function(c){throw c}),a("return"),o[Symbol.iterator]=function(){return this},o;function a(c,s){o[c]=n[c]?function(f){return(i=!i)?{value:it(n[c](f)),done:c==="return"}:s?s(f):f}:s}},kn=function(n){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var o=n[Symbol.asyncIterator],i;return o?o.call(n):(n=typeof Ht=="function"?Ht(n):n[Symbol.iterator](),i={},a("next"),a("throw"),a("return"),i[Symbol.asyncIterator]=function(){return this},i);function a(s){i[s]=n[s]&&function(f){return new Promise(function(u,l){f=n[s](f),c(u,l,f.done,f.value)})}}function c(s,f,u,l){Promise.resolve(l).then(function(p){s({value:p,done:u})},f)}},Pn=function(n,o){return Object.defineProperty?Object.defineProperty(n,"raw",{value:o}):n.raw=o,n};var r=Object.create?function(n,o){Object.defineProperty(n,"default",{enumerable:!0,value:o})}:function(n,o){n.default=o};$n=function(n){if(n&&n.__esModule)return n;var o={};if(n!=null)for(var i in n)i!=="default"&&Object.prototype.hasOwnProperty.call(n,i)&&kt(o,n,i);return r(o,n),o},In=function(n){return n&&n.__esModule?n:{default:n}},jn=function(n,o){if(!o.has(n))throw new TypeError("attempted to get private field on non-instance");return o.get(n)},Fn=function(n,o,i){if(!o.has(n))throw new TypeError("attempted to set private field on non-instance");return o.set(n,i),i},e("__extends",yn),e("__assign",xn),e("__rest",wn),e("__decorate",En),e("__param",Sn),e("__metadata",On),e("__awaiter",_n),e("__generator",Tn),e("__exportStar",Ln),e("__createBinding",kt),e("__values",Ht),e("__read",_r),e("__spread",Mn),e("__spreadArrays",An),e("__spreadArray",Cn),e("__await",it),e("__asyncGenerator",Rn),e("__asyncDelegator",Hn),e("__asyncValues",kn),e("__makeTemplateObject",Pn),e("__importStar",$n),e("__importDefault",In),e("__classPrivateFieldGet",jn),e("__classPrivateFieldSet",Fn)})});var Qr=vt((Lt,Jr)=>{/*!
  * clipboard.js v2.0.11
  * https://clipboardjs.com/
  *
  * Licensed MIT © Zeno Rocha
- */(function(t,r){typeof Lt=="object"&&typeof Jr=="object"?Jr.exports=r():typeof define=="function"&&define.amd?define([],r):typeof Lt=="object"?Lt.ClipboardJS=r():t.ClipboardJS=r()})(Lt,function(){return function(){var e={686:function(n,o,i){"use strict";i.d(o,{default:function(){return ia}});var a=i(279),c=i.n(a),s=i(370),f=i.n(s),u=i(817),l=i.n(u);function p(F){try{return document.execCommand(F)}catch(S){return!1}}var m=function(S){var E=l()(S);return p("cut"),E},h=m;function b(F){var S=document.documentElement.getAttribute("dir")==="rtl",E=document.createElement("textarea");E.style.fontSize="12pt",E.style.border="0",E.style.padding="0",E.style.margin="0",E.style.position="absolute",E.style[S?"right":"left"]="-9999px";var H=window.pageYOffset||document.documentElement.scrollTop;return E.style.top="".concat(H,"px"),E.setAttribute("readonly",""),E.value=F,E}var w=function(S,E){var H=b(S);E.container.appendChild(H);var j=l()(H);return p("copy"),H.remove(),j},q=function(S){var E=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{container:document.body},H="";return typeof S=="string"?H=w(S,E):S instanceof HTMLInputElement&&!["text","search","url","tel","password"].includes(S==null?void 0:S.type)?H=w(S.value,E):(H=l()(S),p("copy")),H},$=q;function y(F){return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?y=function(E){return typeof E}:y=function(E){return E&&typeof Symbol=="function"&&E.constructor===Symbol&&E!==Symbol.prototype?"symbol":typeof E},y(F)}var Te=function(){var S=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},E=S.action,H=E===void 0?"copy":E,j=S.container,K=S.target,Me=S.text;if(H!=="copy"&&H!=="cut")throw new Error('Invalid "action" value, use either "copy" or "cut"');if(K!==void 0)if(K&&y(K)==="object"&&K.nodeType===1){if(H==="copy"&&K.hasAttribute("disabled"))throw new Error('Invalid "target" attribute. Please use "readonly" instead of "disabled" attribute');if(H==="cut"&&(K.hasAttribute("readonly")||K.hasAttribute("disabled")))throw new Error(`Invalid "target" attribute. You can't cut text from elements with "readonly" or "disabled" attributes`)}else throw new Error('Invalid "target" value, use a valid Element');if(Me)return $(Me,{container:j});if(K)return H==="cut"?h(K):$(K,{container:j})},Le=Te;function we(F){return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?we=function(E){return typeof E}:we=function(E){return E&&typeof Symbol=="function"&&E.constructor===Symbol&&E!==Symbol.prototype?"symbol":typeof E},we(F)}function Mt(F,S){if(!(F instanceof S))throw new TypeError("Cannot call a class as a function")}function ot(F,S){for(var E=0;E0&&arguments[0]!==void 0?arguments[0]:{};this.action=typeof j.action=="function"?j.action:this.defaultAction,this.target=typeof j.target=="function"?j.target:this.defaultTarget,this.text=typeof j.text=="function"?j.text:this.defaultText,this.container=we(j.container)==="object"?j.container:document.body}},{key:"listenClick",value:function(j){var K=this;this.listener=f()(j,"click",function(Me){return K.onClick(Me)})}},{key:"onClick",value:function(j){var K=j.delegateTarget||j.currentTarget,Me=this.action(K)||"copy",Ct=Le({action:Me,container:this.container,target:this.target(K),text:this.text(K)});this.emit(Ct?"success":"error",{action:Me,text:Ct,trigger:K,clearSelection:function(){K&&K.focus(),window.getSelection().removeAllRanges()}})}},{key:"defaultAction",value:function(j){return xr("action",j)}},{key:"defaultTarget",value:function(j){var K=xr("target",j);if(K)return document.querySelector(K)}},{key:"defaultText",value:function(j){return xr("text",j)}},{key:"destroy",value:function(){this.listener.destroy()}}],[{key:"copy",value:function(j){var K=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{container:document.body};return $(j,K)}},{key:"cut",value:function(j){return h(j)}},{key:"isSupported",value:function(){var j=arguments.length>0&&arguments[0]!==void 0?arguments[0]:["copy","cut"],K=typeof j=="string"?[j]:j,Me=!!document.queryCommandSupported;return K.forEach(function(Ct){Me=Me&&!!document.queryCommandSupported(Ct)}),Me}}]),E}(c()),ia=oa},828:function(n){var o=9;if(typeof Element!="undefined"&&!Element.prototype.matches){var i=Element.prototype;i.matches=i.matchesSelector||i.mozMatchesSelector||i.msMatchesSelector||i.oMatchesSelector||i.webkitMatchesSelector}function a(c,s){for(;c&&c.nodeType!==o;){if(typeof c.matches=="function"&&c.matches(s))return c;c=c.parentNode}}n.exports=a},438:function(n,o,i){var a=i(828);function c(u,l,p,m,h){var b=f.apply(this,arguments);return u.addEventListener(p,b,h),{destroy:function(){u.removeEventListener(p,b,h)}}}function s(u,l,p,m,h){return typeof u.addEventListener=="function"?c.apply(null,arguments):typeof p=="function"?c.bind(null,document).apply(null,arguments):(typeof u=="string"&&(u=document.querySelectorAll(u)),Array.prototype.map.call(u,function(b){return c(b,l,p,m,h)}))}function f(u,l,p,m){return function(h){h.delegateTarget=a(h.target,l),h.delegateTarget&&m.call(u,h)}}n.exports=s},879:function(n,o){o.node=function(i){return i!==void 0&&i instanceof HTMLElement&&i.nodeType===1},o.nodeList=function(i){var a=Object.prototype.toString.call(i);return i!==void 0&&(a==="[object NodeList]"||a==="[object HTMLCollection]")&&"length"in i&&(i.length===0||o.node(i[0]))},o.string=function(i){return typeof i=="string"||i instanceof String},o.fn=function(i){var a=Object.prototype.toString.call(i);return a==="[object Function]"}},370:function(n,o,i){var a=i(879),c=i(438);function s(p,m,h){if(!p&&!m&&!h)throw new Error("Missing required arguments");if(!a.string(m))throw new TypeError("Second argument must be a String");if(!a.fn(h))throw new TypeError("Third argument must be a Function");if(a.node(p))return f(p,m,h);if(a.nodeList(p))return u(p,m,h);if(a.string(p))return l(p,m,h);throw new TypeError("First argument must be a String, HTMLElement, HTMLCollection, or NodeList")}function f(p,m,h){return p.addEventListener(m,h),{destroy:function(){p.removeEventListener(m,h)}}}function u(p,m,h){return Array.prototype.forEach.call(p,function(b){b.addEventListener(m,h)}),{destroy:function(){Array.prototype.forEach.call(p,function(b){b.removeEventListener(m,h)})}}}function l(p,m,h){return c(document.body,p,m,h)}n.exports=s},817:function(n){function o(i){var a;if(i.nodeName==="SELECT")i.focus(),a=i.value;else if(i.nodeName==="INPUT"||i.nodeName==="TEXTAREA"){var c=i.hasAttribute("readonly");c||i.setAttribute("readonly",""),i.select(),i.setSelectionRange(0,i.value.length),c||i.removeAttribute("readonly"),a=i.value}else{i.hasAttribute("contenteditable")&&i.focus();var s=window.getSelection(),f=document.createRange();f.selectNodeContents(i),s.removeAllRanges(),s.addRange(f),a=s.toString()}return a}n.exports=o},279:function(n){function o(){}o.prototype={on:function(i,a,c){var s=this.e||(this.e={});return(s[i]||(s[i]=[])).push({fn:a,ctx:c}),this},once:function(i,a,c){var s=this;function f(){s.off(i,f),a.apply(c,arguments)}return f._=a,this.on(i,f,c)},emit:function(i){var a=[].slice.call(arguments,1),c=((this.e||(this.e={}))[i]||[]).slice(),s=0,f=c.length;for(s;s{"use strict";/*!
+ */(function(t,r){typeof Lt=="object"&&typeof Jr=="object"?Jr.exports=r():typeof define=="function"&&define.amd?define([],r):typeof Lt=="object"?Lt.ClipboardJS=r():t.ClipboardJS=r()})(Lt,function(){return function(){var e={686:function(n,o,i){"use strict";i.d(o,{default:function(){return ia}});var a=i(279),c=i.n(a),s=i(370),f=i.n(s),u=i(817),l=i.n(u);function p(F){try{return document.execCommand(F)}catch(S){return!1}}var m=function(S){var E=l()(S);return p("cut"),E},h=m;function b(F){var S=document.documentElement.getAttribute("dir")==="rtl",E=document.createElement("textarea");E.style.fontSize="12pt",E.style.border="0",E.style.padding="0",E.style.margin="0",E.style.position="absolute",E.style[S?"right":"left"]="-9999px";var H=window.pageYOffset||document.documentElement.scrollTop;return E.style.top="".concat(H,"px"),E.setAttribute("readonly",""),E.value=F,E}var v=function(S,E){var H=b(S);E.container.appendChild(H);var j=l()(H);return p("copy"),H.remove(),j},V=function(S){var E=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{container:document.body},H="";return typeof S=="string"?H=v(S,E):S instanceof HTMLInputElement&&!["text","search","url","tel","password"].includes(S==null?void 0:S.type)?H=v(S.value,E):(H=l()(S),p("copy")),H},$=V;function x(F){return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?x=function(E){return typeof E}:x=function(E){return E&&typeof Symbol=="function"&&E.constructor===Symbol&&E!==Symbol.prototype?"symbol":typeof E},x(F)}var Te=function(){var S=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},E=S.action,H=E===void 0?"copy":E,j=S.container,K=S.target,Me=S.text;if(H!=="copy"&&H!=="cut")throw new Error('Invalid "action" value, use either "copy" or "cut"');if(K!==void 0)if(K&&x(K)==="object"&&K.nodeType===1){if(H==="copy"&&K.hasAttribute("disabled"))throw new Error('Invalid "target" attribute. Please use "readonly" instead of "disabled" attribute');if(H==="cut"&&(K.hasAttribute("readonly")||K.hasAttribute("disabled")))throw new Error(`Invalid "target" attribute. You can't cut text from elements with "readonly" or "disabled" attributes`)}else throw new Error('Invalid "target" value, use a valid Element');if(Me)return $(Me,{container:j});if(K)return H==="cut"?h(K):$(K,{container:j})},Le=Te;function we(F){return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?we=function(E){return typeof E}:we=function(E){return E&&typeof Symbol=="function"&&E.constructor===Symbol&&E!==Symbol.prototype?"symbol":typeof E},we(F)}function Mt(F,S){if(!(F instanceof S))throw new TypeError("Cannot call a class as a function")}function ot(F,S){for(var E=0;E0&&arguments[0]!==void 0?arguments[0]:{};this.action=typeof j.action=="function"?j.action:this.defaultAction,this.target=typeof j.target=="function"?j.target:this.defaultTarget,this.text=typeof j.text=="function"?j.text:this.defaultText,this.container=we(j.container)==="object"?j.container:document.body}},{key:"listenClick",value:function(j){var K=this;this.listener=f()(j,"click",function(Me){return K.onClick(Me)})}},{key:"onClick",value:function(j){var K=j.delegateTarget||j.currentTarget,Me=this.action(K)||"copy",Ct=Le({action:Me,container:this.container,target:this.target(K),text:this.text(K)});this.emit(Ct?"success":"error",{action:Me,text:Ct,trigger:K,clearSelection:function(){K&&K.focus(),window.getSelection().removeAllRanges()}})}},{key:"defaultAction",value:function(j){return xr("action",j)}},{key:"defaultTarget",value:function(j){var K=xr("target",j);if(K)return document.querySelector(K)}},{key:"defaultText",value:function(j){return xr("text",j)}},{key:"destroy",value:function(){this.listener.destroy()}}],[{key:"copy",value:function(j){var K=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{container:document.body};return $(j,K)}},{key:"cut",value:function(j){return h(j)}},{key:"isSupported",value:function(){var j=arguments.length>0&&arguments[0]!==void 0?arguments[0]:["copy","cut"],K=typeof j=="string"?[j]:j,Me=!!document.queryCommandSupported;return K.forEach(function(Ct){Me=Me&&!!document.queryCommandSupported(Ct)}),Me}}]),E}(c()),ia=oa},828:function(n){var o=9;if(typeof Element!="undefined"&&!Element.prototype.matches){var i=Element.prototype;i.matches=i.matchesSelector||i.mozMatchesSelector||i.msMatchesSelector||i.oMatchesSelector||i.webkitMatchesSelector}function a(c,s){for(;c&&c.nodeType!==o;){if(typeof c.matches=="function"&&c.matches(s))return c;c=c.parentNode}}n.exports=a},438:function(n,o,i){var a=i(828);function c(u,l,p,m,h){var b=f.apply(this,arguments);return u.addEventListener(p,b,h),{destroy:function(){u.removeEventListener(p,b,h)}}}function s(u,l,p,m,h){return typeof u.addEventListener=="function"?c.apply(null,arguments):typeof p=="function"?c.bind(null,document).apply(null,arguments):(typeof u=="string"&&(u=document.querySelectorAll(u)),Array.prototype.map.call(u,function(b){return c(b,l,p,m,h)}))}function f(u,l,p,m){return function(h){h.delegateTarget=a(h.target,l),h.delegateTarget&&m.call(u,h)}}n.exports=s},879:function(n,o){o.node=function(i){return i!==void 0&&i instanceof HTMLElement&&i.nodeType===1},o.nodeList=function(i){var a=Object.prototype.toString.call(i);return i!==void 0&&(a==="[object NodeList]"||a==="[object HTMLCollection]")&&"length"in i&&(i.length===0||o.node(i[0]))},o.string=function(i){return typeof i=="string"||i instanceof String},o.fn=function(i){var a=Object.prototype.toString.call(i);return a==="[object Function]"}},370:function(n,o,i){var a=i(879),c=i(438);function s(p,m,h){if(!p&&!m&&!h)throw new Error("Missing required arguments");if(!a.string(m))throw new TypeError("Second argument must be a String");if(!a.fn(h))throw new TypeError("Third argument must be a Function");if(a.node(p))return f(p,m,h);if(a.nodeList(p))return u(p,m,h);if(a.string(p))return l(p,m,h);throw new TypeError("First argument must be a String, HTMLElement, HTMLCollection, or NodeList")}function f(p,m,h){return p.addEventListener(m,h),{destroy:function(){p.removeEventListener(m,h)}}}function u(p,m,h){return Array.prototype.forEach.call(p,function(b){b.addEventListener(m,h)}),{destroy:function(){Array.prototype.forEach.call(p,function(b){b.removeEventListener(m,h)})}}}function l(p,m,h){return c(document.body,p,m,h)}n.exports=s},817:function(n){function o(i){var a;if(i.nodeName==="SELECT")i.focus(),a=i.value;else if(i.nodeName==="INPUT"||i.nodeName==="TEXTAREA"){var c=i.hasAttribute("readonly");c||i.setAttribute("readonly",""),i.select(),i.setSelectionRange(0,i.value.length),c||i.removeAttribute("readonly"),a=i.value}else{i.hasAttribute("contenteditable")&&i.focus();var s=window.getSelection(),f=document.createRange();f.selectNodeContents(i),s.removeAllRanges(),s.addRange(f),a=s.toString()}return a}n.exports=o},279:function(n){function o(){}o.prototype={on:function(i,a,c){var s=this.e||(this.e={});return(s[i]||(s[i]=[])).push({fn:a,ctx:c}),this},once:function(i,a,c){var s=this;function f(){s.off(i,f),a.apply(c,arguments)}return f._=a,this.on(i,f,c)},emit:function(i){var a=[].slice.call(arguments,1),c=((this.e||(this.e={}))[i]||[]).slice(),s=0,f=c.length;for(s;s{"use strict";/*!
  * escape-html
  * Copyright(c) 2012-2013 TJ Holowaychuk
  * Copyright(c) 2015 Andreas Lubbe
  * Copyright(c) 2015 Tiancheng "Timothy" Gu
  * MIT Licensed
- */var Ls=/["'&<>]/;Ti.exports=Ms;function Ms(e){var t=""+e,r=Ls.exec(t);if(!r)return t;var n,o="",i=0,a=0;for(i=r.index;i]/;Ti.exports=Ms;function Ms(e){var t=""+e,r=Ls.exec(t);if(!r)return t;var n,o="",i=0,a=0;for(i=r.index;i0},enumerable:!1,configurable:!0}),t.prototype._trySubscribe=function(r){return this._throwIfClosed(),e.prototype._trySubscribe.call(this,r)},t.prototype._subscribe=function(r){return this._throwIfClosed(),this._checkFinalizedStatuses(r),this._innerSubscribe(r)},t.prototype._innerSubscribe=function(r){var n=this,o=this,i=o.hasError,a=o.isStopped,c=o.observers;return i||a?Tr:(this.currentObservers=null,c.push(r),new $e(function(){n.currentObservers=null,Ve(c,r)}))},t.prototype._checkFinalizedStatuses=function(r){var n=this,o=n.hasError,i=n.thrownError,a=n.isStopped;o?r.error(i):a&&r.complete()},t.prototype.asObservable=function(){var r=new U;return r.source=this,r},t.create=function(r,n){return new Xn(r,n)},t}(U);var Xn=function(e){re(t,e);function t(r,n){var o=e.call(this)||this;return o.destination=r,o.source=n,o}return t.prototype.next=function(r){var n,o;(o=(n=this.destination)===null||n===void 0?void 0:n.next)===null||o===void 0||o.call(n,r)},t.prototype.error=function(r){var n,o;(o=(n=this.destination)===null||n===void 0?void 0:n.error)===null||o===void 0||o.call(n,r)},t.prototype.complete=function(){var r,n;(n=(r=this.destination)===null||r===void 0?void 0:r.complete)===null||n===void 0||n.call(r)},t.prototype._subscribe=function(r){var n,o;return(o=(n=this.source)===null||n===void 0?void 0:n.subscribe(r))!==null&&o!==void 0?o:Tr},t}(L);var yt={now:function(){return(yt.delegate||Date).now()},delegate:void 0};var xt=function(e){re(t,e);function t(r,n,o){r===void 0&&(r=1/0),n===void 0&&(n=1/0),o===void 0&&(o=yt);var i=e.call(this)||this;return i._bufferSize=r,i._windowTime=n,i._timestampProvider=o,i._buffer=[],i._infiniteTimeWindow=!0,i._infiniteTimeWindow=n===1/0,i._bufferSize=Math.max(1,r),i._windowTime=Math.max(1,n),i}return t.prototype.next=function(r){var n=this,o=n.isStopped,i=n._buffer,a=n._infiniteTimeWindow,c=n._timestampProvider,s=n._windowTime;o||(i.push(r),!a&&i.push(c.now()+s)),this._trimBuffer(),e.prototype.next.call(this,r)},t.prototype._subscribe=function(r){this._throwIfClosed(),this._trimBuffer();for(var n=this._innerSubscribe(r),o=this,i=o._infiniteTimeWindow,a=o._buffer,c=a.slice(),s=0;s0?e.prototype.requestAsyncId.call(this,r,n,o):(r.actions.push(this),r._scheduled||(r._scheduled=ft.requestAnimationFrame(function(){return r.flush(void 0)})))},t.prototype.recycleAsyncId=function(r,n,o){var i;if(o===void 0&&(o=0),o!=null?o>0:this.delay>0)return e.prototype.recycleAsyncId.call(this,r,n,o);var a=r.actions;n!=null&&((i=a[a.length-1])===null||i===void 0?void 0:i.id)!==n&&(ft.cancelAnimationFrame(n),r._scheduled=void 0)},t}(Dt);var to=function(e){re(t,e);function t(){return e!==null&&e.apply(this,arguments)||this}return t.prototype.flush=function(r){this._active=!0;var n=this._scheduled;this._scheduled=void 0;var o=this.actions,i;r=r||o.shift();do if(i=r.execute(r.state,r.delay))break;while((r=o[0])&&r.id===n&&o.shift());if(this._active=!1,i){for(;(r=o[0])&&r.id===n&&o.shift();)r.unsubscribe();throw i}},t}(Wt);var fe=new to(eo);var k=new U(function(e){return e.complete()});function zt(e){return e&&T(e.schedule)}function kr(e){return e[e.length-1]}function qe(e){return T(kr(e))?e.pop():void 0}function Ee(e){return zt(kr(e))?e.pop():void 0}function qt(e,t){return typeof kr(e)=="number"?e.pop():t}var lt=function(e){return e&&typeof e.length=="number"&&typeof e!="function"};function Kt(e){return T(e==null?void 0:e.then)}function Bt(e){return T(e[ct])}function Yt(e){return Symbol.asyncIterator&&T(e==null?void 0:e[Symbol.asyncIterator])}function Gt(e){return new TypeError("You provided "+(e!==null&&typeof e=="object"?"an invalid object":"'"+e+"'")+" where a stream was expected. You can provide an Observable, Promise, ReadableStream, Array, AsyncIterable, or Iterable.")}function ya(){return typeof Symbol!="function"||!Symbol.iterator?"@@iterator":Symbol.iterator}var Jt=ya();function Qt(e){return T(e==null?void 0:e[Jt])}function Xt(e){return Dn(this,arguments,function(){var r,n,o,i;return $t(this,function(a){switch(a.label){case 0:r=e.getReader(),a.label=1;case 1:a.trys.push([1,,9,10]),a.label=2;case 2:return[4,It(r.read())];case 3:return n=a.sent(),o=n.value,i=n.done,i?[4,It(void 0)]:[3,5];case 4:return[2,a.sent()];case 5:return[4,It(o)];case 6:return[4,a.sent()];case 7:return a.sent(),[3,2];case 8:return[3,10];case 9:return r.releaseLock(),[7];case 10:return[2]}})})}function Zt(e){return T(e==null?void 0:e.getReader)}function N(e){if(e instanceof U)return e;if(e!=null){if(Bt(e))return xa(e);if(lt(e))return wa(e);if(Kt(e))return Ea(e);if(Yt(e))return ro(e);if(Qt(e))return Sa(e);if(Zt(e))return Oa(e)}throw Gt(e)}function xa(e){return new U(function(t){var r=e[ct]();if(T(r.subscribe))return r.subscribe(t);throw new TypeError("Provided object does not correctly implement Symbol.observable")})}function wa(e){return new U(function(t){for(var r=0;r=2,!0))}function pe(e){e===void 0&&(e={});var t=e.connector,r=t===void 0?function(){return new L}:t,n=e.resetOnError,o=n===void 0?!0:n,i=e.resetOnComplete,a=i===void 0?!0:i,c=e.resetOnRefCountZero,s=c===void 0?!0:c;return function(f){var u,l,p,m=0,h=!1,b=!1,w=function(){l==null||l.unsubscribe(),l=void 0},q=function(){w(),u=p=void 0,h=b=!1},$=function(){var y=u;q(),y==null||y.unsubscribe()};return g(function(y,Te){m++,!b&&!h&&w();var Le=p=p!=null?p:r();Te.add(function(){m--,m===0&&!b&&!h&&(l=Dr($,s))}),Le.subscribe(Te),!u&&m>0&&(u=new Xe({next:function(we){return Le.next(we)},error:function(we){b=!0,w(),l=Dr(q,o,we),Le.error(we)},complete:function(){h=!0,w(),l=Dr(q,a),Le.complete()}}),N(y).subscribe(u))})(f)}}function Dr(e,t){for(var r=[],n=2;ne.next(document)),e}function D(e,t=document){return Array.from(t.querySelectorAll(e))}function B(e,t=document){let r=ie(e,t);if(typeof r=="undefined")throw new ReferenceError(`Missing element: expected "${e}" to be present`);return r}function ie(e,t=document){return t.querySelector(e)||void 0}function Fe(){return document.activeElement instanceof HTMLElement&&document.activeElement||void 0}function nr(e){return P(x(document.body,"focusin"),x(document.body,"focusout")).pipe(He(1),d(()=>{let t=Fe();return typeof t!="undefined"?e.contains(t):!1}),z(e===Fe()),Q())}function Be(e){return{x:e.offsetLeft,y:e.offsetTop}}function Oo(e){return P(x(window,"load"),x(window,"resize")).pipe(Re(0,fe),d(()=>Be(e)),z(Be(e)))}function or(e){return{x:e.scrollLeft,y:e.scrollTop}}function _t(e){return P(x(e,"scroll"),x(window,"resize")).pipe(Re(0,fe),d(()=>or(e)),z(or(e)))}var To=function(){if(typeof Map!="undefined")return Map;function e(t,r){var n=-1;return t.some(function(o,i){return o[0]===r?(n=i,!0):!1}),n}return function(){function t(){this.__entries__=[]}return Object.defineProperty(t.prototype,"size",{get:function(){return this.__entries__.length},enumerable:!0,configurable:!0}),t.prototype.get=function(r){var n=e(this.__entries__,r),o=this.__entries__[n];return o&&o[1]},t.prototype.set=function(r,n){var o=e(this.__entries__,r);~o?this.__entries__[o][1]=n:this.__entries__.push([r,n])},t.prototype.delete=function(r){var n=this.__entries__,o=e(n,r);~o&&n.splice(o,1)},t.prototype.has=function(r){return!!~e(this.__entries__,r)},t.prototype.clear=function(){this.__entries__.splice(0)},t.prototype.forEach=function(r,n){n===void 0&&(n=null);for(var o=0,i=this.__entries__;o0},e.prototype.connect_=function(){!Br||this.connected_||(document.addEventListener("transitionend",this.onTransitionEnd_),window.addEventListener("resize",this.refresh),Ka?(this.mutationsObserver_=new MutationObserver(this.refresh),this.mutationsObserver_.observe(document,{attributes:!0,childList:!0,characterData:!0,subtree:!0})):(document.addEventListener("DOMSubtreeModified",this.refresh),this.mutationEventsAdded_=!0),this.connected_=!0)},e.prototype.disconnect_=function(){!Br||!this.connected_||(document.removeEventListener("transitionend",this.onTransitionEnd_),window.removeEventListener("resize",this.refresh),this.mutationsObserver_&&this.mutationsObserver_.disconnect(),this.mutationEventsAdded_&&document.removeEventListener("DOMSubtreeModified",this.refresh),this.mutationsObserver_=null,this.mutationEventsAdded_=!1,this.connected_=!1)},e.prototype.onTransitionEnd_=function(t){var r=t.propertyName,n=r===void 0?"":r,o=qa.some(function(i){return!!~n.indexOf(i)});o&&this.refresh()},e.getInstance=function(){return this.instance_||(this.instance_=new e),this.instance_},e.instance_=null,e}(),Lo=function(e,t){for(var r=0,n=Object.keys(t);r0},e}(),Ao=typeof WeakMap!="undefined"?new WeakMap:new To,Co=function(){function e(t){if(!(this instanceof e))throw new TypeError("Cannot call a class as a function.");if(!arguments.length)throw new TypeError("1 argument required, but only 0 present.");var r=Ba.getInstance(),n=new ns(t,r,this);Ao.set(this,n)}return e}();["observe","unobserve","disconnect"].forEach(function(e){Co.prototype[e]=function(){var t;return(t=Ao.get(this))[e].apply(t,arguments)}});var os=function(){return typeof ir.ResizeObserver!="undefined"?ir.ResizeObserver:Co}(),Ro=os;var Ho=new L,is=I(()=>C(new Ro(e=>{for(let t of e)Ho.next(t)}))).pipe(_(e=>P(je,C(e)).pipe(R(()=>e.disconnect()))),X(1));function Se(e){return{width:e.offsetWidth,height:e.offsetHeight}}function de(e){return is.pipe(M(t=>t.observe(e)),_(t=>Ho.pipe(A(({target:r})=>r===e),R(()=>t.unobserve(e)),d(()=>Se(e)))),z(Se(e)))}function Tt(e){return{width:e.scrollWidth,height:e.scrollHeight}}function ko(e){let t=e.parentElement;for(;t&&(e.scrollWidth<=t.scrollWidth&&e.scrollHeight<=t.scrollHeight);)t=(e=t).parentElement;return t?e:void 0}var Po=new L,as=I(()=>C(new IntersectionObserver(e=>{for(let t of e)Po.next(t)},{threshold:0}))).pipe(_(e=>P(je,C(e)).pipe(R(()=>e.disconnect()))),X(1));function cr(e){return as.pipe(M(t=>t.observe(e)),_(t=>Po.pipe(A(({target:r})=>r===e),R(()=>t.unobserve(e)),d(({isIntersecting:r})=>r))))}var fr={drawer:B("[data-md-toggle=drawer]"),search:B("[data-md-toggle=search]")};function $o(e){return fr[e].checked}function Ye(e,t){fr[e].checked!==t&&fr[e].click()}function ht(e){let t=fr[e];return x(t,"change").pipe(d(()=>t.checked),z(t.checked))}function ss(e,t){switch(e.constructor){case HTMLInputElement:return e.type==="radio"?/^Arrow/.test(t):!0;case HTMLSelectElement:case HTMLTextAreaElement:return!0;default:return e.isContentEditable}}function Io(){return x(window,"keydown").pipe(A(e=>!(e.metaKey||e.ctrlKey)),d(e=>({mode:$o("search")?"search":"global",type:e.key,claim(){e.preventDefault(),e.stopPropagation()}})),A(({mode:e,type:t})=>{if(e==="global"){let r=Fe();if(typeof r!="undefined")return!ss(r,t)}return!0}),pe())}function Oe(){return new URL(location.href)}function lr(e){location.href=e.href}function jo(){return new L}function Fo(e,t){if(typeof t=="string"||typeof t=="number")e.innerHTML+=t.toString();else if(t instanceof Node)e.appendChild(t);else if(Array.isArray(t))for(let r of t)Fo(e,r)}function O(e,t,...r){let n=document.createElement(e);if(t)for(let o of Object.keys(t))typeof t[o]!="undefined"&&(typeof t[o]!="boolean"?n.setAttribute(o,t[o]):n.setAttribute(o,""));for(let o of r)Fo(n,o);return n}function Uo(e,t){let r=t;if(e.length>r){for(;e[r]!==" "&&--r>0;);return`${e.substring(0,r)}...`}return e}function ur(e){if(e>999){let t=+((e-950)%1e3>99);return`${((e+1e-6)/1e3).toFixed(t)}k`}else return e.toString()}function Vo(){return location.hash.substring(1)}function No(e){let t=O("a",{href:e});t.addEventListener("click",r=>r.stopPropagation()),t.click()}function cs(){return x(window,"hashchange").pipe(d(Vo),z(Vo()),A(e=>e.length>0),X(1))}function Do(){return cs().pipe(d(e=>ie(`[id="${e}"]`)),A(e=>typeof e!="undefined"))}function Yr(e){let t=matchMedia(e);return tr(r=>t.addListener(()=>r(t.matches))).pipe(z(t.matches))}function Wo(){let e=matchMedia("print");return P(x(window,"beforeprint").pipe(d(()=>!0)),x(window,"afterprint").pipe(d(()=>!1))).pipe(z(e.matches))}function Gr(e,t){return e.pipe(_(r=>r?t():k))}function pr(e,t={credentials:"same-origin"}){return be(fetch(`${e}`,t)).pipe(le(()=>k),_(r=>r.status!==200?Et(()=>new Error(r.statusText)):C(r)))}function Ge(e,t){return pr(e,t).pipe(_(r=>r.json()),X(1))}function zo(e,t){let r=new DOMParser;return pr(e,t).pipe(_(n=>n.text()),d(n=>r.parseFromString(n,"text/xml")),X(1))}function qo(e){let t=O("script",{src:e});return I(()=>(document.head.appendChild(t),P(x(t,"load"),x(t,"error").pipe(_(()=>Et(()=>new ReferenceError(`Invalid script: ${e}`))))).pipe(d(()=>{}),R(()=>document.head.removeChild(t)),ve(1))))}function Ko(){return{x:Math.max(0,scrollX),y:Math.max(0,scrollY)}}function Bo(){return P(x(window,"scroll",{passive:!0}),x(window,"resize",{passive:!0})).pipe(d(Ko),z(Ko()))}function Yo(){return{width:innerWidth,height:innerHeight}}function Go(){return x(window,"resize",{passive:!0}).pipe(d(Yo),z(Yo()))}function Jo(){return G([Bo(),Go()]).pipe(d(([e,t])=>({offset:e,size:t})),X(1))}function mr(e,{viewport$:t,header$:r}){let n=t.pipe(J("size")),o=G([n,r]).pipe(d(()=>Be(e)));return G([r,t,o]).pipe(d(([{height:i},{offset:a,size:c},{x:s,y:f}])=>({offset:{x:a.x-s,y:a.y-f+i},size:c})))}var fs=B("#__config"),bt=JSON.parse(fs.textContent);bt.base=`${new URL(bt.base,Oe())}`;function ce(){return bt}function Z(e){return bt.features.includes(e)}function ae(e,t){return typeof t!="undefined"?bt.translations[e].replace("#",t.toString()):bt.translations[e]}function _e(e,t=document){return B(`[data-md-component=${e}]`,t)}function ee(e,t=document){return D(`[data-md-component=${e}]`,t)}function ls(e){let t=B(".md-typeset > :first-child",e);return x(t,"click",{once:!0}).pipe(d(()=>B(".md-typeset",e)),d(r=>({hash:__md_hash(r.innerHTML)})))}function Qo(e){return!Z("announce.dismiss")||!e.childElementCount?k:I(()=>{let t=new L;return t.pipe(z({hash:__md_get("__announce")})).subscribe(({hash:r})=>{var n;r&&r===((n=__md_get("__announce"))!=null?n:r)&&(e.hidden=!0,__md_set("__announce",r))}),ls(e).pipe(M(r=>t.next(r)),R(()=>t.complete()),d(r=>V({ref:e},r)))})}function us(e,{target$:t}){return t.pipe(d(r=>({hidden:r!==e})))}function Xo(e,t){let r=new L;return r.subscribe(({hidden:n})=>{e.hidden=n}),us(e,t).pipe(M(n=>r.next(n)),R(()=>r.complete()),d(n=>V({ref:e},n)))}var fi=Je(Qr());function Xr(e){return O("div",{class:"md-tooltip",id:e},O("div",{class:"md-tooltip__inner md-typeset"}))}function Zo(e,t){if(t=t?`${t}_annotation_${e}`:void 0,t){let r=t?`#${t}`:void 0;return O("aside",{class:"md-annotation",tabIndex:0},Xr(t),O("a",{href:r,class:"md-annotation__index",tabIndex:-1},O("span",{"data-md-annotation-id":e})))}else return O("aside",{class:"md-annotation",tabIndex:0},Xr(t),O("span",{class:"md-annotation__index",tabIndex:-1},O("span",{"data-md-annotation-id":e})))}function ei(e){return O("button",{class:"md-clipboard md-icon",title:ae("clipboard.copy"),"data-clipboard-target":`#${e} > code`})}function Zr(e,t){let r=t&2,n=t&1,o=Object.keys(e.terms).filter(c=>!e.terms[c]).reduce((c,s)=>[...c,O("del",null,s)," "],[]).slice(0,-1),i=new URL(e.location);Z("search.highlight")&&i.searchParams.set("h",Object.entries(e.terms).filter(([,c])=>c).reduce((c,[s])=>`${c} ${s}`.trim(),""));let{tags:a}=ce();return O("a",{href:`${i}`,class:"md-search-result__link",tabIndex:-1},O("article",{class:["md-search-result__article",...r?["md-search-result__article--document"]:[]].join(" "),"data-md-score":e.score.toFixed(2)},r>0&&O("div",{class:"md-search-result__icon md-icon"}),O("h1",{class:"md-search-result__title"},e.title),n>0&&e.text.length>0&&O("p",{class:"md-search-result__teaser"},Uo(e.text,320)),e.tags&&O("div",{class:"md-typeset"},e.tags.map(c=>{let s=c.replace(/<[^>]+>/g,""),f=a?s in a?`md-tag-icon md-tag-icon--${a[s]}`:"md-tag-icon":"";return O("span",{class:`md-tag ${f}`},c)})),n>0&&o.length>0&&O("p",{class:"md-search-result__terms"},ae("search.result.term.missing"),": ",...o)))}function ti(e){let t=e[0].score,r=[...e],n=r.findIndex(f=>!f.location.includes("#")),[o]=r.splice(n===-1?0:n,1),i=r.findIndex(f=>f.scoreZr(f,1)),...c.length?[O("details",{class:"md-search-result__more"},O("summary",{tabIndex:-1},c.length>0&&c.length===1?ae("search.result.more.one"):ae("search.result.more.other",c.length)),...c.map(f=>Zr(f,1)))]:[]];return O("li",{class:"md-search-result__item"},s)}function ri(e){return O("ul",{class:"md-source__facts"},Object.entries(e).map(([t,r])=>O("li",{class:`md-source__fact md-source__fact--${t}`},typeof r=="number"?ur(r):r)))}function en(e){let t=`tabbed-control tabbed-control--${e}`;return O("div",{class:t,hidden:!0},O("button",{class:"tabbed-button",tabIndex:-1}))}function ni(e){return O("div",{class:"md-typeset__scrollwrap"},O("div",{class:"md-typeset__table"},e))}function ps(e){let t=ce(),r=new URL(`${e.version}/`,new URL("../",t.base));return O("li",{class:"md-version__item"},O("a",{href:`${r}`,class:"md-version__link"},e.title))}function oi(e,t){return O("div",{class:"md-version"},O("button",{class:"md-version__current","aria-label":ae("select.version.title")},t.title),O("ul",{class:"md-version__list"},e.map(ps)))}function ms(e,t){let r=I(()=>G([Oo(e),_t(t)])).pipe(d(([{x:n,y:o},i])=>{let{width:a,height:c}=Se(e);return{x:n-i.x+a/2,y:o-i.y+c/2}}));return nr(e).pipe(_(n=>r.pipe(d(o=>({active:n,offset:o})),ve(+!n||1/0))))}function ii(e,t,{target$:r}){let[n,o]=Array.from(e.children);return I(()=>{let i=new L,a=i.pipe(ue(1));return i.subscribe({next({offset:c}){e.style.setProperty("--md-tooltip-x",`${c.x}px`),e.style.setProperty("--md-tooltip-y",`${c.y}px`)},complete(){e.style.removeProperty("--md-tooltip-x"),e.style.removeProperty("--md-tooltip-y")}}),cr(e).pipe(te(a)).subscribe(c=>{e.toggleAttribute("data-md-visible",c)}),P(i.pipe(A(({active:c})=>c)),i.pipe(He(250),A(({active:c})=>!c))).subscribe({next({active:c}){c?e.prepend(n):n.remove()},complete(){e.prepend(n)}}),i.pipe(Re(16,fe)).subscribe(({active:c})=>{n.classList.toggle("md-tooltip--active",c)}),i.pipe(Kr(125,fe),A(()=>!!e.offsetParent),d(()=>e.offsetParent.getBoundingClientRect()),d(({x:c})=>c)).subscribe({next(c){c?e.style.setProperty("--md-tooltip-0",`${-c}px`):e.style.removeProperty("--md-tooltip-0")},complete(){e.style.removeProperty("--md-tooltip-0")}}),x(o,"click").pipe(te(a),A(c=>!(c.metaKey||c.ctrlKey))).subscribe(c=>c.preventDefault()),x(o,"mousedown").pipe(te(a),me(i)).subscribe(([c,{active:s}])=>{var f;if(c.button!==0||c.metaKey||c.ctrlKey)c.preventDefault();else if(s){c.preventDefault();let u=e.parentElement.closest(".md-annotation");u instanceof HTMLElement?u.focus():(f=Fe())==null||f.blur()}}),r.pipe(te(a),A(c=>c===n),ke(125)).subscribe(()=>e.focus()),ms(e,t).pipe(M(c=>i.next(c)),R(()=>i.complete()),d(c=>V({ref:e},c)))})}function ds(e){let t=[];for(let r of D(".c, .c1, .cm",e)){let n=[],o=document.createNodeIterator(r,NodeFilter.SHOW_TEXT);for(let i=o.nextNode();i;i=o.nextNode())n.push(i);for(let i of n){let a;for(;a=/(\(\d+\))(!)?/.exec(i.textContent);){let[,c,s]=a;if(typeof s=="undefined"){let f=i.splitText(a.index);i=f.splitText(c.length),t.push(f)}else{i.textContent=c,t.push(i);break}}}}return t}function ai(e,t){t.append(...Array.from(e.childNodes))}function si(e,t,{target$:r,print$:n}){let o=t.closest("[id]"),i=o==null?void 0:o.id,a=new Map;for(let c of ds(t)){let[,s]=c.textContent.match(/\((\d+)\)/);ie(`li:nth-child(${s})`,e)&&(a.set(s,Zo(s,i)),c.replaceWith(a.get(s)))}return a.size===0?k:I(()=>{let c=new L,s=[];for(let[f,u]of a)s.push([B(".md-typeset",u),B(`li:nth-child(${f})`,e)]);return n.pipe(te(c.pipe(ue(1)))).subscribe(f=>{e.hidden=!f;for(let[u,l]of s)f?ai(u,l):ai(l,u)}),P(...[...a].map(([,f])=>ii(f,t,{target$:r}))).pipe(R(()=>c.complete()),pe())})}var hs=0;function li(e){if(e.nextElementSibling){let t=e.nextElementSibling;if(t.tagName==="OL")return t;if(t.tagName==="P"&&!t.children.length)return li(t)}}function ci(e){return de(e).pipe(d(({width:t})=>({scrollable:Tt(e).width>t})),J("scrollable"))}function ui(e,t){let{matches:r}=matchMedia("(hover)"),n=I(()=>{let o=new L;if(o.subscribe(({scrollable:a})=>{a&&r?e.setAttribute("tabindex","0"):e.removeAttribute("tabindex")}),fi.default.isSupported()){let a=e.closest("pre");a.id=`__code_${++hs}`,a.insertBefore(ei(a.id),e)}let i=e.closest(".highlight");if(i instanceof HTMLElement){let a=li(i);if(typeof a!="undefined"&&(i.classList.contains("annotate")||Z("content.code.annotate"))){let c=si(a,e,t);return ci(e).pipe(M(s=>o.next(s)),R(()=>o.complete()),d(s=>V({ref:e},s)),tt(de(i).pipe(d(({width:s,height:f})=>s&&f),Q(),_(s=>s?c:k))))}}return ci(e).pipe(M(a=>o.next(a)),R(()=>o.complete()),d(a=>V({ref:e},a)))});return Z("content.lazy")?cr(e).pipe(A(o=>o),ve(1),_(()=>n)):n}var pi=".node circle,.node ellipse,.node path,.node polygon,.node rect{fill:var(--md-mermaid-node-bg-color);stroke:var(--md-mermaid-node-fg-color)}marker{fill:var(--md-mermaid-edge-color)!important}.edgeLabel .label rect{fill:transparent}.label{color:var(--md-mermaid-label-fg-color);font-family:var(--md-mermaid-font-family)}.label foreignObject{line-height:normal;overflow:visible}.label div .edgeLabel{color:var(--md-mermaid-label-fg-color)}.edgeLabel,.edgeLabel rect,.label div .edgeLabel{background-color:var(--md-mermaid-label-bg-color)}.edgeLabel,.edgeLabel rect{fill:var(--md-mermaid-label-bg-color);color:var(--md-mermaid-edge-color)}.edgePath .path,.flowchart-link{stroke:var(--md-mermaid-edge-color)}.edgePath .arrowheadPath{fill:var(--md-mermaid-edge-color);stroke:none}.cluster rect{fill:var(--md-default-fg-color--lightest);stroke:var(--md-default-fg-color--lighter)}.cluster span{color:var(--md-mermaid-label-fg-color);font-family:var(--md-mermaid-font-family)}defs #flowchart-circleEnd,defs #flowchart-circleStart,defs #flowchart-crossEnd,defs #flowchart-crossStart,defs #flowchart-pointEnd,defs #flowchart-pointStart{stroke:none}g.classGroup line,g.classGroup rect{fill:var(--md-mermaid-node-bg-color);stroke:var(--md-mermaid-node-fg-color)}g.classGroup text{fill:var(--md-mermaid-label-fg-color);font-family:var(--md-mermaid-font-family)}.classLabel .box{fill:var(--md-mermaid-label-bg-color);background-color:var(--md-mermaid-label-bg-color);opacity:1}.classLabel .label{fill:var(--md-mermaid-label-fg-color);font-family:var(--md-mermaid-font-family)}.node .divider{stroke:var(--md-mermaid-node-fg-color)}.relation{stroke:var(--md-mermaid-edge-color)}.cardinality{fill:var(--md-mermaid-label-fg-color);font-family:var(--md-mermaid-font-family)}.cardinality text{fill:inherit!important}defs #classDiagram-compositionEnd,defs #classDiagram-compositionStart,defs #classDiagram-dependencyEnd,defs #classDiagram-dependencyStart,defs #classDiagram-extensionEnd,defs #classDiagram-extensionStart{fill:var(--md-mermaid-edge-color)!important;stroke:var(--md-mermaid-edge-color)!important}defs #classDiagram-aggregationEnd,defs #classDiagram-aggregationStart{fill:var(--md-mermaid-label-bg-color)!important;stroke:var(--md-mermaid-edge-color)!important}g.stateGroup rect{fill:var(--md-mermaid-node-bg-color);stroke:var(--md-mermaid-node-fg-color)}g.stateGroup .state-title{fill:var(--md-mermaid-label-fg-color)!important;font-family:var(--md-mermaid-font-family)}g.stateGroup .composit{fill:var(--md-mermaid-label-bg-color)}.nodeLabel{color:var(--md-mermaid-label-fg-color);font-family:var(--md-mermaid-font-family)}.node circle.state-end,.node circle.state-start,.start-state{fill:var(--md-mermaid-edge-color);stroke:none}.end-state-inner,.end-state-outer{fill:var(--md-mermaid-edge-color)}.end-state-inner,.node circle.state-end{stroke:var(--md-mermaid-label-bg-color)}.transition{stroke:var(--md-mermaid-edge-color)}[id^=state-fork] rect,[id^=state-join] rect{fill:var(--md-mermaid-edge-color)!important;stroke:none!important}.statediagram-cluster.statediagram-cluster .inner{fill:var(--md-default-bg-color)}.statediagram-cluster rect{fill:var(--md-mermaid-node-bg-color);stroke:var(--md-mermaid-node-fg-color)}.statediagram-state rect.divider{fill:var(--md-default-fg-color--lightest);stroke:var(--md-default-fg-color--lighter)}defs #statediagram-barbEnd{stroke:var(--md-mermaid-edge-color)}.entityBox{fill:var(--md-mermaid-label-bg-color);stroke:var(--md-mermaid-node-fg-color)}.entityLabel{fill:var(--md-mermaid-label-fg-color);font-family:var(--md-mermaid-font-family)}.relationshipLabelBox{fill:var(--md-mermaid-label-bg-color);fill-opacity:1;background-color:var(--md-mermaid-label-bg-color);opacity:1}.relationshipLabel{fill:var(--md-mermaid-label-fg-color)}.relationshipLine{stroke:var(--md-mermaid-edge-color)}defs #ONE_OR_MORE_END *,defs #ONE_OR_MORE_START *,defs #ONLY_ONE_END *,defs #ONLY_ONE_START *,defs #ZERO_OR_MORE_END *,defs #ZERO_OR_MORE_START *,defs #ZERO_OR_ONE_END *,defs #ZERO_OR_ONE_START *{stroke:var(--md-mermaid-edge-color)!important}.actor,defs #ZERO_OR_MORE_END circle,defs #ZERO_OR_MORE_START circle{fill:var(--md-mermaid-label-bg-color)}.actor{stroke:var(--md-mermaid-node-fg-color)}text.actor>tspan{fill:var(--md-mermaid-label-fg-color);font-family:var(--md-mermaid-font-family)}line{stroke:var(--md-default-fg-color--lighter)}.messageLine0,.messageLine1{stroke:var(--md-mermaid-edge-color)}.loopText>tspan,.messageText,.noteText>tspan{font-family:var(--md-mermaid-font-family)!important}#arrowhead path,.loopText>tspan,.messageText,.noteText>tspan{fill:var(--md-mermaid-edge-color);stroke:none}.loopLine{stroke:var(--md-mermaid-node-fg-color)}.labelBox,.loopLine{fill:var(--md-mermaid-node-bg-color)}.labelBox{stroke:none}.labelText,.labelText>span{fill:var(--md-mermaid-node-fg-color);font-family:var(--md-mermaid-font-family)}";var tn,vs=0,gs=ce();function ys(){return typeof mermaid=="undefined"||mermaid instanceof Element?qo(`${gs.base}_static/mermaid/mermaid.min.js`):C(void 0)}function mi(e){return e.classList.remove("mermaid"),tn||(tn=ys().pipe(M(()=>mermaid.initialize({startOnLoad:!1,themeCSS:pi,sequence:{actorFontSize:"16px",messageFontSize:"16px",noteFontSize:"16px"}})),d(()=>{}),X(1))),tn.subscribe(()=>{e.classList.add("mermaid");let t=`__mermaid_${vs++}`,r=O("div",{class:"mermaid"});mermaid.mermaidAPI.render(t,e.textContent,n=>{let o=r.attachShadow({mode:"closed"});o.innerHTML=n,e.replaceWith(r)})}),tn.pipe(d(()=>({ref:e})))}function xs(e,{target$:t,print$:r}){let n=!0;return P(t.pipe(d(o=>o.closest("details:not([open])")),A(o=>e===o),d(()=>({action:"open",reveal:!0}))),r.pipe(A(o=>o||!n),M(()=>n=e.open),d(o=>({action:o?"open":"close"}))))}function di(e,t){return I(()=>{let r=new L;return r.subscribe(({action:n,reveal:o})=>{e.toggleAttribute("open",n==="open"),o&&e.scrollIntoView()}),xs(e,t).pipe(M(n=>r.next(n)),R(()=>r.complete()),d(n=>V({ref:e},n)))})}var hi=O("table");function bi(e){return e.replaceWith(hi),hi.replaceWith(ni(e)),C({ref:e})}function ws(e){let t=D(":scope > input",e),r=t.find(n=>n.checked)||t[0];return P(...t.map(n=>x(n,"change").pipe(d(()=>B(`label[for="${n.id}"]`))))).pipe(z(B(`label[for="${r.id}"]`)),d(n=>({active:n})))}function vi(e,{viewport$:t}){let r=en("prev");e.append(r);let n=en("next");e.append(n);let o=B(".tabbed-labels",e);return I(()=>{let i=new L,a=i.pipe(ue(1));return G([i,de(e)]).pipe(Re(1,fe),te(a)).subscribe({next([{active:c},s]){let f=Be(c),{width:u}=Se(c);e.style.setProperty("--md-indicator-x",`${f.x}px`),e.style.setProperty("--md-indicator-width",`${u}px`);let l=or(o);(f.xl.x+s.width)&&o.scrollTo({left:Math.max(0,f.x-16),behavior:"smooth"})},complete(){e.style.removeProperty("--md-indicator-x"),e.style.removeProperty("--md-indicator-width")}}),G([_t(o),de(o)]).pipe(te(a)).subscribe(([c,s])=>{let f=Tt(o);r.hidden=c.x<16,n.hidden=c.x>f.width-s.width-16}),P(x(r,"click").pipe(d(()=>-1)),x(n,"click").pipe(d(()=>1))).pipe(te(a)).subscribe(c=>{let{width:s}=Se(o);o.scrollBy({left:s*c,behavior:"smooth"})}),Z("content.tabs.link")&&i.pipe(Pe(1),me(t)).subscribe(([{active:c},{offset:s}])=>{let f=c.innerText.trim();if(c.hasAttribute("data-md-switching"))c.removeAttribute("data-md-switching");else{let u=e.offsetTop-s.y;for(let p of D("[data-tabs]"))for(let m of D(":scope > input",p)){let h=B(`label[for="${m.id}"]`);if(h!==c&&h.innerText.trim()===f){h.setAttribute("data-md-switching",""),m.click();break}}window.scrollTo({top:e.offsetTop-u});let l=__md_get("__tabs")||[];__md_set("__tabs",[...new Set([f,...l])])}}),ws(e).pipe(M(c=>i.next(c)),R(()=>i.complete()),d(c=>V({ref:e},c)))}).pipe(Ze(se))}function gi(e,{viewport$:t,target$:r,print$:n}){return P(...D("pre:not(.mermaid) > code",e).map(o=>ui(o,{target$:r,print$:n})),...D("pre.mermaid",e).map(o=>mi(o)),...D("table:not([class])",e).map(o=>bi(o)),...D("details",e).map(o=>di(o,{target$:r,print$:n})),...D("[data-tabs]",e).map(o=>vi(o,{viewport$:t})))}function Es(e,{alert$:t}){return t.pipe(_(r=>P(C(!0),C(!1).pipe(ke(2e3))).pipe(d(n=>({message:r,active:n})))))}function yi(e,t){let r=B(".md-typeset",e);return I(()=>{let n=new L;return n.subscribe(({message:o,active:i})=>{e.classList.toggle("md-dialog--active",i),r.textContent=o}),Es(e,t).pipe(M(o=>n.next(o)),R(()=>n.complete()),d(o=>V({ref:e},o)))})}function Ss({viewport$:e}){if(!Z("header.autohide"))return C(!1);let t=e.pipe(d(({offset:{y:o}})=>o),Ne(2,1),d(([o,i])=>[oMath.abs(i-o.y)>100),d(([,[o]])=>o),Q()),n=ht("search");return G([e,n]).pipe(d(([{offset:o},i])=>o.y>400&&!i),Q(),_(o=>o?r:C(!1)),z(!1))}function xi(e,t){return I(()=>G([de(e),Ss(t)])).pipe(d(([{height:r},n])=>({height:r,hidden:n})),Q((r,n)=>r.height===n.height&&r.hidden===n.hidden),X(1))}function wi(e,{header$:t,main$:r}){return I(()=>{let n=new L,o=n.pipe(ue(1));return n.pipe(J("active"),St(t)).subscribe(([{active:i},{hidden:a}])=>{e.classList.toggle("md-header--shadow",i&&!a),e.hidden=a}),r.subscribe(n),t.pipe(te(o),d(i=>V({ref:e},i)))})}function Os(e,{viewport$:t,header$:r}){return mr(e,{viewport$:t,header$:r}).pipe(d(({offset:{y:n}})=>{let{height:o}=Se(e);return{active:n>=o}}),J("active"))}function Ei(e,t){return I(()=>{let r=new L;r.subscribe(({active:o})=>{e.classList.toggle("md-header__title--active",o)});let n=ie("article h1, .objdesc > dt .descname");return typeof n=="undefined"?k:Os(n,t).pipe(M(o=>r.next(o)),R(()=>r.complete()),d(o=>V({ref:e},o)))})}function Si(e,{viewport$:t,header$:r}){let n=r.pipe(d(({height:i})=>i),Q()),o=n.pipe(_(()=>de(e).pipe(d(({height:i})=>({top:e.offsetTop,bottom:e.offsetTop+i})),J("bottom"))));return G([n,o,t]).pipe(d(([i,{top:a,bottom:c},{offset:{y:s},size:{height:f}}])=>(f=Math.max(0,f-Math.max(0,a-s,i)-Math.max(0,f+s-c)),{offset:a-i,height:f,active:a-i<=s})),Q((i,a)=>i.offset===a.offset&&i.height===a.height&&i.active===a.active))}function _s(e){let t=__md_get("__palette")||{index:e.findIndex(r=>matchMedia(r.getAttribute("data-md-color-media")).matches)};return C(...e).pipe(oe(r=>x(r,"change").pipe(d(()=>r))),z(e[Math.max(0,t.index)]),d(r=>({index:e.indexOf(r),color:{scheme:r.getAttribute("data-md-color-scheme"),primary:r.getAttribute("data-md-color-primary"),accent:r.getAttribute("data-md-color-accent")}})),X(1))}function Oi(e){return I(()=>{let t=new L;t.subscribe(n=>{document.body.setAttribute("data-md-color-switching","");for(let[o,i]of Object.entries(n.color))document.body.setAttribute(`data-md-color-${o}`,i);for(let o=0;o{document.body.removeAttribute("data-md-color-switching")});let r=D("input",e);return _s(r).pipe(M(n=>t.next(n)),R(()=>t.complete()),d(n=>V({ref:e},n)))})}function Ts(e){let t=a=>a.trim(),{searchParams:r}=Oe(),n;if(r.has("q")){Ye("search",!0);let a=r.get("q");n=C(a)}else n=C();ht("search").pipe(A(a=>!a),ve(1)).subscribe(()=>{let a=new URL(location.href);a.searchParams.delete("q"),history.replaceState({},"",`${a}`)}),n.subscribe(a=>{a&&(e.value=a,e.focus())});let o=nr(e),i=P(x(e,"keyup"),x(e,"focus").pipe(ke(1)),n).pipe(d(()=>t(e.value)),z(""),Q());return G([i,o]).pipe(d(([a,c])=>({value:a,focus:c})),X(1))}function _i(e){let t=new L,r=t.pipe(ue(1));return t.pipe(J("focus")).subscribe(({focus:n})=>{n?(Ye("search",n),e.placeholder=""):e.placeholder=ae("search.placeholder")}),x(e.form,"reset").pipe(te(r)).subscribe(()=>e.focus()),Ts(e).pipe(M(n=>t.next(n)),R(()=>t.complete()),d(n=>V({ref:e},n)),pe())}var on=Je(rn());var As=ce();function nn(e){return`${As.base}${e}`}var dr;function Li(e){return new Promise((t,r)=>{let n=document.createElement("script"),o=nn(e);n.src=o,n.addEventListener("load",()=>t()),n.addEventListener("error",()=>{console.error(`Failed to load search data: ${o}`),r()}),document.body.appendChild(n)})}function Cs(){return dr!==void 0||(dr=Promise.all([Li("_static/language_data.js"),Li("searchindex.js")]).then(()=>{})),dr}var Ue={objNameMatch:11,objPartialMatch:6,objPrio:{0:15,1:5,2:-5},objPrioDefault:0,title:15,partialTitle:7,term:5,partialTerm:2},an;window.Search={setIndex:e=>{an=e}};var Rs=!1;function Hs(e,t){let{docurls:r,objects:n,objnames:o,titles:i}=an,a=[];function c(s,f,u,l,p,m,h){var q;let b=(s?`${s}.`:"")+m,w=b.toLowerCase();if(w.indexOf(e)>-1){let $=0,y=w.split(".");w===e||y[y.length-1]===e?$+=Ue.objNameMatch:y[y.length-1].indexOf(e)>-1&&($+=Ue.objPartialMatch);let Te=o[u][2],Le=i[f];if(t.length>0){let we=`${s} ${m} ${Te} ${Le} ${h!=null?h:""}`.toLowerCase(),Mt=!0;for(let ot=0;ot2){let m=sn(u);if(!o[u])for(let h in o)h.match(m)&&p.push({files:o[h],score:Ue.partialTerm});if(!i[u])for(let h in i)h.match(m)&&p.push({files:i[h],score:Ue.partialTitle})}if(p.every(m=>m.files===void 0))break;p.forEach(m=>{let h=m.files;if(h!==void 0){Array.isArray(h)||(h=[h]),l.push(...h);for(let b=0;bm.length>2).length;if(!(a[u].length!==e.length&&a[u].length!==p)){for(let m=0;mc[f][h]));s.push({docurl:r[f],title:n[f],anchor:"",objectLabel:null,synopsis:null,score:m})}}}return s}function $s(e){let t=new DOMParser().parseFromString(e,"text/html");t.querySelectorAll(".headerlink").forEach(s=>{var f;(f=s.parentNode)==null||f.removeChild(s)});let r=t.querySelector("[role=main]");if(r===null)return console.warn("Content block not found. Sphinx search tries to obtain it via '[role=main]'. Could you check your theme or template."),[];let n=r.querySelectorAll("h1, h2, h3, h4, h5, h6"),o,i=[],a=t.createRange(),c=(s,f)=>{var m;s!==void 0?a.setStartAfter(s):a.setStartBefore(r),f!==void 0?a.setEndBefore(f):a.setEndAfter(r);let u=a.toString().trim(),l=(m=s==null?void 0:s.textContent)==null?void 0:m.trim();if(!l&&!u)return;let p=s!==void 0?`#${s.id}`:"";i.push({title:l!=null?l:"",anchor:p,text:u})};return n.forEach(s=>{if(!s.id)return;let u=o;o=s,c(u,s)}),c(o,void 0),i}function Is(e,t){let r=$s(e),n=t.map(i=>new RegExp(sn(i),"im")),o=[];for(let i=0;ii.score!==a.score?a.score-i.score:i.sectionIndex-a.sectionIndex),o.length!==0)return o.map(i=>{let c=r[i.sectionIndex],s=Math.max(i.snippetIndex-240/2,0);return{snippet:(s>0?"\u2026":"")+c.text.substr(s,240).trim()+(s+240${(0,on.default)(e.objectLabel)}`,text:r(e.synopsis)}];let a=nn(e.docurl),c;if(window.location.protocol!=="file:")try{let l=yield(yield fetch(a)).text();c=Is(l,t)}catch(u){console.warn("Failed to retrieve search result document: ",u)}c===void 0&&(c=[{score:-1,title:"",anchor:"",snippet:"",terms:i}]);let s=[];c[0].score!==-1&&s.push({location:n,score:e.score,terms:i,title:r(o),text:""});let f;for(let u of c)f===void 0&&(f=u.score),s.push({location:n+u.anchor,score:u.score===f?e.score:0,terms:u.terms,title:r(u.title||o),text:r(u.snippet)});return s})}function Fs(e){return new DOMParser().parseFromString(e,"text/html").body.textContent||""}function Mi(e){return ze(this,null,function*(){yield Cs();let t=new Stemmer,r=[],n=[],o=[],i=[];for(let u of ks(e)){let l=u.toLowerCase();if(l.length===0||(i.push(l),stopwords.indexOf(l)!==-1))continue;let p=t.stemWord(l);p.length<3&&l.length>=3&&(p=l);let m;p[0]==="-"?(m=n,p=p.substr(1)):(m=r,o.push(l)),m.indexOf(p)===-1&&m.push(p)}let a=[];for(let u=0;u{let p=u.score,m=l.score;if(p!==m)return m-p;let h=u.title.toLowerCase(),b=l.title.toLowerCase();return h>b?1:h`${u}`,f=u=>(0,on.default)(u).replace(c,s).replace(/<\/mark>(\s+)]*>/gim,"$1");return{count:a.length,get:u=>js(a[u],o,f)}})}function Ai(e,{query$:t}){let r=B(":scope > :first-child",e),n=B(":scope > :last-child",e),o,i,a=e.parentElement,c=16,s=()=>a.scrollTop+a.clientHeight+c>a.scrollHeight,f=()=>{i!==void 0&&s()&&(i(),i=void 0)};a.addEventListener("scroll",f,{passive:!0}),window.addEventListener("resize",f,{passive:!0});let u=l=>ze(this,null,function*(){o=l;let p=4,m=p;for(let h=0;h{i=()=>w(void 0)})),m+=p),o!==l)return;let b=yield l.get(h);if(o!==l)return;n.appendChild(ti(b))}});return t.pipe(J("value"),Fr(()=>$r(250)),mt(l=>ze(this,null,function*(){if(!!l.value)return Mi(l.value)})),Ce(fe)).subscribe(l=>{if(n.innerHTML="",l){switch(l.count){case 0:r.textContent=ae("search.result.none");break;case 1:r.textContent=ae("search.result.one");break;default:r.textContent=ae("search.result.other",ur(l.count))}u(l)}else r.textContent=ae("search.result.placeholder")}),C()}function Us(e,{query$:t}){return t.pipe(d(({value:r})=>{let n=Oe();return n.hash="",n.searchParams.delete("h"),n.searchParams.set("q",r),{url:n}}))}function Ci(e,t){let r=new L;return r.subscribe(({url:n})=>{e.setAttribute("data-clipboard-text",e.href),e.href=`${n}`}),x(e,"click").subscribe(n=>n.preventDefault()),Us(e,t).pipe(M(n=>r.next(n)),R(()=>r.complete()),d(n=>V({ref:e},n)))}function Ri(e,{keyboard$:t}){let r=_e("search-query");return t.pipe(A(({mode:n})=>n==="search")).subscribe(n=>{switch(n.type){case"ArrowRight":e.innerText.length&&r.selectionStart===r.value.length&&(r.value=e.innerText);break}}),C()}function Hi(e,{keyboard$:t}){try{let r=_e("search-query",e),n=_e("search-result",e);t.pipe(A(({mode:a})=>a==="search")).subscribe(a=>{let c=Fe();switch(a.type){case"Enter":if(c===r){let s=new Map;for(let f of D(":first-child [href]",n)){let u=f.firstElementChild;s.set(f,parseFloat(u.getAttribute("data-md-score")))}if(s.size){let[[f]]=[...s].sort(([,u],[,l])=>l-u);f.click()}a.claim()}break;case"Escape":case"Tab":Ye("search",!1),r.blur();break;case"ArrowUp":case"ArrowDown":if(typeof c=="undefined")r.focus();else{let s=[r,...D(":not(details) > [href], summary, details[open] [href]",n)],f=Math.max(0,(Math.max(0,s.indexOf(c))+s.length+(a.type==="ArrowUp"?-1:1))%s.length);s[f].focus()}a.claim();break;default:r!==Fe()&&r.focus()}}),t.pipe(A(({mode:a})=>a==="global")).subscribe(a=>{switch(a.type){case"f":case"s":case"/":r.focus(),r.select(),a.claim();break}});let o=_i(r),i=Ai(n,{query$:o});return P(o,i).pipe(tt(...ee("search-share",e).map(a=>Ci(a,{query$:o})),...ee("search-suggest",e).map(a=>Ri(a,{keyboard$:t}))))}catch(r){return e.hidden=!0,je}}var cn=Je(Qr());function Vs(e){e.setAttribute("data-md-copying","");let t=e.innerText;return e.removeAttribute("data-md-copying"),t}function ki({alert$:e}){cn.default.isSupported()&&new U(t=>{new cn.default("[data-clipboard-target], [data-clipboard-text]",{text:r=>r.getAttribute("data-clipboard-text")||Vs(B(r.getAttribute("data-clipboard-target")))}).on("success",r=>t.next(r))}).pipe(M(t=>{t.trigger.focus()}),d(()=>ae("clipboard.copied"))).subscribe(e)}function Ns(e){if(e.length<2)return[""];let[t,r]=[...e].sort((o,i)=>o.length-i.length).map(o=>o.replace(/[^/]+$/,"")),n=0;if(t===r)n=t.length;else for(;t.charCodeAt(n)===r.charCodeAt(n);)n++;return e.map(o=>o.replace(t.slice(0,n),""))}function hr(e){let t=__md_get("__sitemap",sessionStorage,e);if(t)return C(t);{let r=ce();return zo(new URL("sitemap.xml",e||r.base)).pipe(d(n=>Ns(D("loc",n).map(o=>o.textContent))),le(()=>k),De([]),M(n=>__md_set("__sitemap",n,sessionStorage,e)))}}function Pi({document$:e,location$:t,viewport$:r}){let n=ce();if(location.protocol==="file:")return;"scrollRestoration"in history&&(history.scrollRestoration="manual",x(window,"beforeunload").subscribe(()=>{history.scrollRestoration="auto"}));let o=ie("link[rel=icon]");typeof o!="undefined"&&(o.href=o.href);let i=hr().pipe(d(l=>l.map(p=>`${new URL(p,n.base)}`)),_(l=>x(document.body,"click").pipe(A(p=>!p.metaKey&&!p.ctrlKey),_(p=>{if(p.target instanceof Element){let m=p.target.closest("a");if(m&&!m.target){let h=new URL(m.href);if(h.search="",h.hash="",h.pathname!==location.pathname&&l.includes(h.toString()))return p.preventDefault(),C({url:new URL(m.href)})}}return je}))),pe()),a=x(window,"popstate").pipe(A(l=>l.state!==null),d(l=>({url:new URL(location.href),offset:l.state})),pe());P(i,a).pipe(Q((l,p)=>l.url.href===p.url.href),d(({url:l})=>l)).subscribe(t);let c=t.pipe(J("pathname"),_(l=>pr(l.href).pipe(le(()=>(lr(l),je)))),pe());i.pipe(rr(c)).subscribe(({url:l})=>{history.pushState({},"",`${l}`)});let s=new DOMParser;c.pipe(_(l=>l.text()),d(l=>s.parseFromString(l,"text/html"))).subscribe(e);let f=new Set,u=new Set;for(let l of D("script",document))l.src?f.add(new URL(l.src,document.baseURI).toString()):u.add(l.outerHTML);e.pipe(Pe(1),mt(l=>ze(this,null,function*(){var p;for(let m of["title","link[rel=canonical]","meta[name=author]","meta[name=description]","[data-md-component=announce]","[data-md-component=container]","[data-md-component=header-topic]","[data-md-component=outdated]","[data-md-component=logo]","[data-md-component=skip]",...Z("navigation.tabs.sticky")?["[data-md-component=tabs]"]:[]]){let h=ie(m),b=ie(m,l);typeof h!="undefined"&&typeof b!="undefined"&&h.replaceWith(b)}((p=window.MathJax)==null?void 0:p.typesetPromise)!==void 0&&(yield window.MathJax.typesetPromise());for(let m of D("script",l))if(m.src){let h=new URL(m.src,document.baseURI).toString();if(!f.has(h)){let b=document.createElement("script");for(let q of m.getAttributeNames())b.setAttribute(q,m.getAttribute(q));let w;b.src=h,b.async||(w=new Promise(q=>b.addEventListener("load",()=>q()))),document.body.appendChild(b),f.add(h),w!==void 0&&(yield w)}}else{let h=m.outerHTML;if(!u.has(h)){let b=document.createElement("script");for(let w of m.getAttributeNames())b.setAttribute(w,m.getAttribute(w));b.textContent=m.textContent,document.body.appendChild(b),u.add(h)}}}))).subscribe(),e.pipe(Pe(1),d(()=>_e("container")),_(l=>D("script",l)),mt(l=>{let p=O("script");if(l.src){for(let m of l.getAttributeNames())p.setAttribute(m,l.getAttribute(m));return l.replaceWith(p),new U(m=>{p.onload=()=>m.complete()})}else return p.textContent=l.textContent,l.replaceWith(p),k})).subscribe(),P(i,a).pipe(rr(e)).subscribe(({url:l,offset:p})=>{l.hash&&!p?No(l.hash):window.scrollTo(0,(p==null?void 0:p.y)||0)}),r.pipe(Wr(i),He(250),J("offset")).subscribe(({offset:l})=>{history.replaceState(l,"")}),P(i,a).pipe(Ne(2,1),A(([l,p])=>l.url.pathname===p.url.pathname),d(([,l])=>l)).subscribe(({offset:l})=>{window.scrollTo(0,(l==null?void 0:l.y)||0)})}var $i=Je(rn());function Ii(e,t){let r=new RegExp(e.separator,"img"),n=(o,i,a)=>`${i}${a}`;return o=>{o=o.replace(/[\s*+\-:~^]+/g," ").trim();let i=new RegExp(`(^|${e.separator})(${o.replace(/[|\\{}()[\]^$+*?.-]/g,"\\$&").replace(r,"|")})`,"img");return a=>(t?(0,$i.default)(a):a).replace(i,n).replace(/<\/mark>(\s+)]*>/img,"$1")}}function ji({document$:e}){var a;let t=ce(),r=t.version.staticVersions?C(t.version.staticVersions):Ge(new URL((a=t.version.versionPath)!=null?a:"../versions.json",t.base)),n=new URL("..",t.base),o=c=>new URL(c,n).toString().replace(/\/*$/,""),i=r.pipe(d(c=>{let s=t.base.toString().replace(/\/*$/,"");return c.find(({version:f,aliases:u})=>o(f)===s||u.find(l=>o(l)===s))||c[0]}));r.pipe(d(c=>new Map(c.map(s=>[`${new URL(`../${s.version}/`,t.base)}`,s]))),_(c=>x(document.body,"click").pipe(A(s=>!s.metaKey&&!s.ctrlKey),me(i),_(([s,f])=>{if(s.target instanceof Element){let u=s.target.closest("a");if(u&&!u.target&&c.has(u.href)){let l=u.href;return!s.target.closest(".md-version")&&c.get(l)===f?k:(s.preventDefault(),C(l))}}return k}),_(s=>{let{version:f}=c.get(s);return hr(new URL(s)).pipe(d(u=>{let p=Oe().href.replace(t.base,"");return u.includes(p.split("#")[0])?new URL(`../${f}/${p}`,t.base):new URL(s)}))})))).subscribe(c=>lr(c)),G([r,i]).subscribe(([c,s])=>{B(".md-header__topic").appendChild(oi(c,s))}),e.pipe(_(()=>i)).subscribe(c=>{var f;let s=__md_get("__outdated",sessionStorage);if(s===null){let u=((f=t.version)==null?void 0:f.default)||"latest";s=!c.aliases.includes(u),__md_set("__outdated",s,sessionStorage)}if(s)for(let u of ee("outdated"))u.hidden=!1})}function Fi(e,{location$:t}){let r={lang:[],separator:"\\s+"};return G([t.pipe(z(Oe()),A(n=>!!n.searchParams.get("h")))]).pipe(d(([n])=>Ii(r,!0)(n.searchParams.get("h"))),d(n=>{var a;let o=new Map,i=document.createNodeIterator(e,NodeFilter.SHOW_TEXT);for(let c=i.nextNode();c;c=i.nextNode())if((a=c.parentElement)!=null&&a.offsetHeight){let s=c.textContent,f=n(s);f.length>s.length&&o.set(c,f)}for(let[c,s]of o){let{childNodes:f}=O("span",null,s);c.replaceWith(...Array.from(f))}return{ref:e,nodes:o}}))}function Ds(e,{viewport$:t,main$:r}){let n=e.parentElement,o=n.offsetTop-n.parentElement.offsetTop;return G([r,t]).pipe(d(([{offset:i,height:a},{offset:{y:c}}])=>(a=a+Math.min(o,Math.max(0,c-i))-o,{height:a,locked:c>=i+o})),Q((i,a)=>i.height===a.height&&i.locked===a.locked))}function fn(e,n){var o=n,{header$:t}=o,r=hn(o,["header$"]);let i=B(".md-sidebar__scrollwrap",e),{y:a}=Be(i);return I(()=>{let c=new L;return c.pipe(Re(0,fe),me(t)).subscribe({next([{height:s},{height:f}]){i.style.height=`${s-2*a}px`,e.style.top=`${f}px`},complete(){i.style.height="",e.style.top=""}}),c.pipe(Ce(fe),ve(1)).subscribe(()=>{for(let s of D(".md-nav__link--active[href]",e)){let f=ko(s);if(typeof f!="undefined"){let u=s.offsetTop-f.offsetTop,{height:l}=Se(f);f.scrollTo({top:u-l/2})}}}),Ds(e,r).pipe(M(s=>c.next(s)),R(()=>c.complete()),d(s=>V({ref:e},s)))})}function Ui(e,t){if(typeof t!="undefined"){let r=`https://api.github.com/repos/${e}/${t}`;return Ir(Ge(`${r}/releases/latest`).pipe(le(()=>k),d(n=>({version:n.tag_name})),De({})),Ge(r).pipe(le(()=>k),d(n=>({stars:n.stargazers_count,forks:n.forks_count})),De({}))).pipe(d(([n,o])=>V(V({},n),o)))}else{let r=`https://api.github.com/users/${e}`;return Ge(r).pipe(d(n=>({repositories:n.public_repos})),De({}))}}function Vi(e,t){let r=`https://${e}/api/v4/projects/${encodeURIComponent(t)}`;return Ge(r).pipe(le(()=>k),d(({star_count:n,forks_count:o})=>({stars:n,forks:o})),De({}))}function Ni(e){let[t]=e.match(/(git(?:hub|lab))/i)||[];switch(t.toLowerCase()){case"github":let[,r,n]=e.match(/^.+github\.com\/([^/]+)\/?([^/]+)?/i);return Ui(r,n);case"gitlab":let[,o,i]=e.match(/^.+?([^/]*gitlab[^/]+)\/(.+?)\/?$/i);return Vi(o,i);default:return k}}var Ws;function zs(e){return Ws||(Ws=I(()=>{let t=__md_get("__source",sessionStorage);if(t)return C(t);if(ee("consent").length){let n=__md_get("__consent");if(!(n&&n.github))return k}return Ni(e.href).pipe(M(n=>__md_set("__source",n,sessionStorage)))}).pipe(le(()=>k),A(t=>Object.keys(t).length>0),d(t=>({facts:t})),X(1)))}function Di(e){let t=B(":scope > :last-child",e);return I(()=>{let r=new L;return r.subscribe(({facts:n})=>{t.appendChild(ri(n)),t.classList.add("md-source__repository--active")}),zs(e).pipe(M(n=>r.next(n)),R(()=>r.complete()),d(n=>V({ref:e},n)))})}function qs(e,{viewport$:t,header$:r}){return de(document.body).pipe(_(()=>mr(e,{header$:r,viewport$:t})),d(({offset:{y:n}})=>({hidden:n>=10})),J("hidden"))}function Wi(e,t){return I(()=>{let r=new L;return r.subscribe({next({hidden:n}){e.hidden=n},complete(){e.hidden=!1}}),(Z("navigation.tabs.sticky")?C({hidden:!1}):qs(e,t)).pipe(M(n=>r.next(n)),R(()=>r.complete()),d(n=>V({ref:e},n)))})}function Ks(e,{viewport$:t,header$:r,excludedLinks:n}){let o=new Map,i=D("a[href]",e);for(let s of i){if(n!=null&&n.has(s))continue;let f=s.getAttribute("href"),u;if(f.startsWith("#")){let l=decodeURIComponent(s.hash.substring(1));u=ie(`[id="${l}"]`)}else u=ie(`a.pseudo-toc-entry[href=${CSS.escape(f)}]`);if(typeof u!="undefined"){let l=s.closest(".md-nav__link");l!==null&&o.set(l,u)}}let a=r.pipe(J("height"),d(({height:s})=>{let f=_e("main"),u=B(":scope > :first-child",f);return s+.8*(u.offsetTop-f.offsetTop)}),pe());return de(document.body).pipe(J("height"),_(s=>I(()=>{let f=[];return C([...o].reduce((u,[l,p])=>{for(;f.length&&o.get(f[f.length-1]).tagName>=p.tagName;)f.pop();let m=p.offsetTop;for(;!m&&p.parentElement;)p=p.parentElement,m=p.offsetTop;return u.set([...f=[...f,l]].reverse(),m)},new Map))}).pipe(d(f=>new Map([...f].sort(([,u],[,l])=>u-l))),St(a),_(([f,u])=>t.pipe(Nr(([l,p],{offset:{y:m},size:h})=>{let b=m+h.height>=Math.floor(s.height);for(;p.length;){let[,w]=p[0];if(w-u=m&&!b)p=[l.pop(),...p];else break}return[l,p]},[[],[...f]]),Q((l,p)=>l[0]===p[0]&&l[1]===p[1])))))).pipe(d(([s,f])=>({prev:s.map(([u])=>u),next:f.map(([u])=>u)})),z({prev:[],next:[]}),Ne(2,1),d(([s,f])=>s.prev.length{let i=new L,a=o?"md-nav__link--active":"md-nav__link--in-viewport";if(i.subscribe(({prev:s,next:f})=>{for(let[u]of f)u.classList.remove("md-nav__link--passed"),u.classList.remove(a);for(let[u,[l]]of s.entries())l.classList.add("md-nav__link--passed"),l.classList.toggle(a,u===s.length-1)}),Z("toc.follow")&&(o||!Z("toc.integrate"))){let s=!o||Z("toc.integrate");i.pipe(He(1)).subscribe(({prev:f})=>{var m;let u;if(f.length===0&&s&&(u=(m=e.querySelector("a[href='#']"))!=null?m:e),s=!1,f.length!==0&&(u=f[f.length-1][0]),u===void 0||!u.offsetHeight)return;let l=u.parentElement,p=5;for(;l!==null&&l.scrollHeight-p<=l.clientHeight;)l=l.parentElement;if(l!==null&&l!==document.body&&l!==document.documentElement){let h=u.getBoundingClientRect(),b=l.getBoundingClientRect();l.scrollTo({top:l.scrollTop+(h.y-b.height/2-b.y)})}})}o&&Z("navigation.tracking")&&t.pipe(te(i.pipe(ue(1))),J("offset"),He(250),Pe(1),te(n.pipe(Pe(1))),Ot({delay:250}),me(i)).subscribe(([,{prev:s}])=>{let f=Oe(),u=s[s.length-1];if(u&&u.length){let[l]=u,{hash:p}=new URL(l.href);f.hash!==p&&(f.hash=p,history.replaceState({},"",`${f}`))}else f.hash="",history.replaceState({},"",`${f}`)}),Z("toc.sticky")&&de(document.body).pipe(J("width"),He(0)).subscribe(()=>{let s=new Map,f="--md-nav__header-height";for(let u of D(".md-nav__link",e)){let l=u.nextElementSibling;if(!(l instanceof HTMLElement)||l.tagName!=="NAV")continue;let p="",m=NaN,h=l.parentElement.closest("nav");if(h!==null){let b=s.get(h);b!==void 0&&(p=`${b.height} + `,m=b.zindex-1)}isNaN(m)&&(m=100),p+=`${u.offsetHeight}px + 0.625em`,u.classList.add("md-nav__sticky"),u.style.setProperty("--md-nav__sticky-zindex",m.toString()),l.style.setProperty(f,`calc(${p})`),s.set(l,{height:p,zindex:m})}});let c=o?void 0:new Set(D("[data-md-component='toc'] a[href]",e));return Ks(e,{viewport$:t,header$:r,excludedLinks:c}).pipe(M(s=>i.next(s)),R(()=>i.complete()),d(s=>V({ref:e},s)))})}function Bs(e,{viewport$:t,main$:r,target$:n}){let o=t.pipe(d(({offset:{y:a}})=>a),Ne(2,1),d(([a,c])=>a>c&&c>0),Q()),i=r.pipe(d(({active:a})=>a));return G([i,o]).pipe(d(([a,c])=>!(a&&c)),Q(),te(n.pipe(Pe(1))),Vr(!0),Ot({delay:250}),d(a=>({hidden:a})))}function zi(e,{viewport$:t,header$:r,main$:n,target$:o}){let i=new L,a=i.pipe(ue(1));return i.subscribe({next({hidden:c}){e.hidden=c,c?(e.setAttribute("tabindex","-1"),e.blur()):e.removeAttribute("tabindex")},complete(){e.style.top="",e.hidden=!0,e.removeAttribute("tabindex")}}),r.pipe(te(a),J("height")).subscribe(({height:c})=>{e.style.top=`${c+16}px`}),Bs(e,{viewport$:t,main$:n,target$:o}).pipe(M(c=>i.next(c)),R(()=>i.complete()),d(c=>V({ref:e},c)))}function qi({document$:e,tablet$:t}){e.pipe(_(()=>D(".md-toggle--indeterminate, [data-md-state=indeterminate]")),M(r=>{r.indeterminate=!0,r.checked=!1}),oe(r=>x(r,"change").pipe(zr(()=>r.classList.contains("md-toggle--indeterminate")),d(()=>r))),me(t)).subscribe(([r,n])=>{r.classList.remove("md-toggle--indeterminate"),n&&(r.checked=!1)})}function Ys(){return/(iPad|iPhone|iPod)/.test(navigator.userAgent)}function Ki({document$:e}){e.pipe(_(()=>D("[data-md-scrollfix]")),M(t=>t.removeAttribute("data-md-scrollfix")),A(Ys),oe(t=>x(t,"touchstart").pipe(d(()=>t)))).subscribe(t=>{let r=t.scrollTop;r===0?t.scrollTop=1:r+t.offsetHeight===t.scrollHeight&&(t.scrollTop=r-1)})}function Bi({viewport$:e,tablet$:t}){G([ht("search"),t]).pipe(d(([r,n])=>r&&!n),_(r=>C(r).pipe(ke(r?400:100))),me(e)).subscribe(([r,{offset:{y:n}}])=>{if(r)document.body.setAttribute("data-md-scrolllock",""),document.body.style.top=`-${n}px`;else{let o=-1*parseInt(document.body.style.top,10);document.body.removeAttribute("data-md-scrolllock"),document.body.style.top="",o&&window.scrollTo(0,o)}})}Object.entries||(Object.entries=function(e){let t=[];for(let r of Object.keys(e))t.push([r,e[r]]);return t});Object.values||(Object.values=function(e){let t=[];for(let r of Object.keys(e))t.push(e[r]);return t});typeof Element!="undefined"&&(Element.prototype.scrollTo||(Element.prototype.scrollTo=function(e,t){typeof e=="object"?(this.scrollLeft=e.left,this.scrollTop=e.top):(this.scrollLeft=e,this.scrollTop=t)}),Element.prototype.replaceWith||(Element.prototype.replaceWith=function(...e){let t=this.parentNode;if(t){e.length===0&&t.removeChild(this);for(let r=e.length-1;r>=0;r--){let n=e[r];typeof n!="object"?n=document.createTextNode(n):n.parentNode&&n.parentNode.removeChild(n),r?t.insertBefore(this.previousSibling,n):t.replaceChild(n,this)}}}));document.documentElement.classList.remove("no-js");document.documentElement.classList.add("js");var nt=So(),vr=jo(),rt=Do(),un=Io(),ge=Jo(),gr=Yr("(min-width: 960px)"),Gi=Yr("(min-width: 1220px)"),Ji=Wo(),Gs=ce(),pn=new L;ki({alert$:pn});Z("navigation.instant")&&Pi({document$:nt,location$:vr,viewport$:ge});var Yi;((Yi=Gs.version)==null?void 0:Yi.provider)==="mike"&&ji({document$:nt});P(vr,rt).pipe(ke(125)).subscribe(()=>{Ye("drawer",!1),Ye("search",!1)});un.pipe(A(({mode:e})=>e==="global")).subscribe(e=>{switch(e.type){case"p":case",":let t=ie("[href][rel=prev]");typeof t!="undefined"&&t.click();break;case"n":case".":let r=ie("[href][rel=next]");typeof r!="undefined"&&r.click();break}});qi({document$:nt,tablet$:gr});Ki({document$:nt});Bi({viewport$:ge,tablet$:gr});var We=xi(_e("header"),{viewport$:ge}),br=nt.pipe(d(()=>_e("main")),_(e=>Si(e,{viewport$:ge,header$:We})),X(1)),Js=P(...ee("consent").map(e=>Xo(e,{target$:rt})),...ee("dialog").map(e=>yi(e,{alert$:pn})),...ee("header").map(e=>wi(e,{viewport$:ge,header$:We,main$:br})),...ee("palette").map(e=>Oi(e)),...ee("search").map(e=>Hi(e,{keyboard$:un})),...ee("source").map(e=>Di(e))),Qs=I(()=>P(...ee("announce").map(e=>Qo(e)),...ee("content").map(e=>gi(e,{viewport$:ge,target$:rt,print$:Ji})),...ee("content").map(e=>Z("search.highlight")?Fi(e,{location$:vr}):k),...ee("header-title").map(e=>Ei(e,{viewport$:ge,header$:We})),...ee("sidebar").map(e=>e.getAttribute("data-md-type")==="navigation"?Gr(Gi,()=>fn(e,{viewport$:ge,header$:We,main$:br})):Gr(gr,()=>fn(e,{viewport$:ge,header$:We,main$:br}))),...ee("tabs").map(e=>Wi(e,{viewport$:ge,header$:We})),...ee("toc").map(e=>ln(e,{viewport$:ge,header$:We,target$:rt,localToc:!0})),...ee("sidebar").filter(e=>e.getAttribute("data-md-type")==="navigation").map(e=>ln(e,{viewport$:ge,header$:We,target$:rt,localToc:!1})),...ee("top").map(e=>zi(e,{viewport$:ge,header$:We,main$:br,target$:rt})))),Qi=nt.pipe(_(()=>Qs),tt(Js),X(1));Qi.subscribe();window.document$=nt;window.location$=vr;window.target$=rt;window.keyboard$=un;window.viewport$=ge;window.tablet$=gr;window.screen$=Gi;window.print$=Ji;window.alert$=pn;window.component$=Qi;})();
-//# sourceMappingURL=sphinx_immaterial_theme.1b5b7a2d5891aec19.min.js.map
+  `):"",this.name="UnsubscriptionError",this.errors=r}});function Ve(e,t){if(e){var r=e.indexOf(t);0<=r&&e.splice(r,1)}}var $e=function(){function e(t){this.initialTeardown=t,this.closed=!1,this._parentage=null,this._finalizers=null}return e.prototype.unsubscribe=function(){var t,r,n,o,i;if(!this.closed){this.closed=!0;var a=this._parentage;if(a)if(this._parentage=null,Array.isArray(a))try{for(var c=ye(a),s=c.next();!s.done;s=c.next()){var f=s.value;f.remove(this)}}catch(b){t={error:b}}finally{try{s&&!s.done&&(r=c.return)&&r.call(c)}finally{if(t)throw t.error}}else a.remove(this);var u=this.initialTeardown;if(T(u))try{u()}catch(b){i=b instanceof Ft?b.errors:[b]}var l=this._finalizers;if(l){this._finalizers=null;try{for(var p=ye(l),m=p.next();!m.done;m=p.next()){var h=m.value;try{zn(h)}catch(b){i=i!=null?i:[],b instanceof Ft?i=Y(Y([],z(i)),z(b.errors)):i.push(b)}}}catch(b){n={error:b}}finally{try{m&&!m.done&&(o=p.return)&&o.call(p)}finally{if(n)throw n.error}}}if(i)throw new Ft(i)}},e.prototype.add=function(t){var r;if(t&&t!==this)if(this.closed)zn(t);else{if(t instanceof e){if(t.closed||t._hasParent(this))return;t._addParent(this)}(this._finalizers=(r=this._finalizers)!==null&&r!==void 0?r:[]).push(t)}},e.prototype._hasParent=function(t){var r=this._parentage;return r===t||Array.isArray(r)&&r.includes(t)},e.prototype._addParent=function(t){var r=this._parentage;this._parentage=Array.isArray(r)?(r.push(t),r):r?[r,t]:t},e.prototype._removeParent=function(t){var r=this._parentage;r===t?this._parentage=null:Array.isArray(r)&&Ve(r,t)},e.prototype.remove=function(t){var r=this._finalizers;r&&Ve(r,t),t instanceof e&&t._removeParent(this)},e.EMPTY=function(){var t=new e;return t.closed=!0,t}(),e}();var Tr=$e.EMPTY;function Ut(e){return e instanceof $e||e&&"closed"in e&&T(e.remove)&&T(e.add)&&T(e.unsubscribe)}function zn(e){T(e)?e():e.unsubscribe()}var Ae={onUnhandledError:null,onStoppedNotification:null,Promise:void 0,useDeprecatedSynchronousErrorHandling:!1,useDeprecatedNextContext:!1};var at={setTimeout:function(e,t){for(var r=[],n=2;n0},enumerable:!1,configurable:!0}),t.prototype._trySubscribe=function(r){return this._throwIfClosed(),e.prototype._trySubscribe.call(this,r)},t.prototype._subscribe=function(r){return this._throwIfClosed(),this._checkFinalizedStatuses(r),this._innerSubscribe(r)},t.prototype._innerSubscribe=function(r){var n=this,o=this,i=o.hasError,a=o.isStopped,c=o.observers;return i||a?Tr:(this.currentObservers=null,c.push(r),new $e(function(){n.currentObservers=null,Ve(c,r)}))},t.prototype._checkFinalizedStatuses=function(r){var n=this,o=n.hasError,i=n.thrownError,a=n.isStopped;o?r.error(i):a&&r.complete()},t.prototype.asObservable=function(){var r=new U;return r.source=this,r},t.create=function(r,n){return new Xn(r,n)},t}(U);var Xn=function(e){re(t,e);function t(r,n){var o=e.call(this)||this;return o.destination=r,o.source=n,o}return t.prototype.next=function(r){var n,o;(o=(n=this.destination)===null||n===void 0?void 0:n.next)===null||o===void 0||o.call(n,r)},t.prototype.error=function(r){var n,o;(o=(n=this.destination)===null||n===void 0?void 0:n.error)===null||o===void 0||o.call(n,r)},t.prototype.complete=function(){var r,n;(n=(r=this.destination)===null||r===void 0?void 0:r.complete)===null||n===void 0||n.call(r)},t.prototype._subscribe=function(r){var n,o;return(o=(n=this.source)===null||n===void 0?void 0:n.subscribe(r))!==null&&o!==void 0?o:Tr},t}(L);var yt={now:function(){return(yt.delegate||Date).now()},delegate:void 0};var xt=function(e){re(t,e);function t(r,n,o){r===void 0&&(r=1/0),n===void 0&&(n=1/0),o===void 0&&(o=yt);var i=e.call(this)||this;return i._bufferSize=r,i._windowTime=n,i._timestampProvider=o,i._buffer=[],i._infiniteTimeWindow=!0,i._infiniteTimeWindow=n===1/0,i._bufferSize=Math.max(1,r),i._windowTime=Math.max(1,n),i}return t.prototype.next=function(r){var n=this,o=n.isStopped,i=n._buffer,a=n._infiniteTimeWindow,c=n._timestampProvider,s=n._windowTime;o||(i.push(r),!a&&i.push(c.now()+s)),this._trimBuffer(),e.prototype.next.call(this,r)},t.prototype._subscribe=function(r){this._throwIfClosed(),this._trimBuffer();for(var n=this._innerSubscribe(r),o=this,i=o._infiniteTimeWindow,a=o._buffer,c=a.slice(),s=0;s0?e.prototype.requestAsyncId.call(this,r,n,o):(r.actions.push(this),r._scheduled||(r._scheduled=ft.requestAnimationFrame(function(){return r.flush(void 0)})))},t.prototype.recycleAsyncId=function(r,n,o){var i;if(o===void 0&&(o=0),o!=null?o>0:this.delay>0)return e.prototype.recycleAsyncId.call(this,r,n,o);var a=r.actions;n!=null&&((i=a[a.length-1])===null||i===void 0?void 0:i.id)!==n&&(ft.cancelAnimationFrame(n),r._scheduled=void 0)},t}(Dt);var to=function(e){re(t,e);function t(){return e!==null&&e.apply(this,arguments)||this}return t.prototype.flush=function(r){this._active=!0;var n=this._scheduled;this._scheduled=void 0;var o=this.actions,i;r=r||o.shift();do if(i=r.execute(r.state,r.delay))break;while((r=o[0])&&r.id===n&&o.shift());if(this._active=!1,i){for(;(r=o[0])&&r.id===n&&o.shift();)r.unsubscribe();throw i}},t}(Wt);var fe=new to(eo);var k=new U(function(e){return e.complete()});function zt(e){return e&&T(e.schedule)}function kr(e){return e[e.length-1]}function qe(e){return T(kr(e))?e.pop():void 0}function Ee(e){return zt(kr(e))?e.pop():void 0}function qt(e,t){return typeof kr(e)=="number"?e.pop():t}var lt=function(e){return e&&typeof e.length=="number"&&typeof e!="function"};function Kt(e){return T(e==null?void 0:e.then)}function Bt(e){return T(e[ct])}function Yt(e){return Symbol.asyncIterator&&T(e==null?void 0:e[Symbol.asyncIterator])}function Gt(e){return new TypeError("You provided "+(e!==null&&typeof e=="object"?"an invalid object":"'"+e+"'")+" where a stream was expected. You can provide an Observable, Promise, ReadableStream, Array, AsyncIterable, or Iterable.")}function ya(){return typeof Symbol!="function"||!Symbol.iterator?"@@iterator":Symbol.iterator}var Jt=ya();function Qt(e){return T(e==null?void 0:e[Jt])}function Xt(e){return Dn(this,arguments,function(){var r,n,o,i;return $t(this,function(a){switch(a.label){case 0:r=e.getReader(),a.label=1;case 1:a.trys.push([1,,9,10]),a.label=2;case 2:return[4,It(r.read())];case 3:return n=a.sent(),o=n.value,i=n.done,i?[4,It(void 0)]:[3,5];case 4:return[2,a.sent()];case 5:return[4,It(o)];case 6:return[4,a.sent()];case 7:return a.sent(),[3,2];case 8:return[3,10];case 9:return r.releaseLock(),[7];case 10:return[2]}})})}function Zt(e){return T(e==null?void 0:e.getReader)}function D(e){if(e instanceof U)return e;if(e!=null){if(Bt(e))return xa(e);if(lt(e))return wa(e);if(Kt(e))return Ea(e);if(Yt(e))return ro(e);if(Qt(e))return Sa(e);if(Zt(e))return Oa(e)}throw Gt(e)}function xa(e){return new U(function(t){var r=e[ct]();if(T(r.subscribe))return r.subscribe(t);throw new TypeError("Provided object does not correctly implement Symbol.observable")})}function wa(e){return new U(function(t){for(var r=0;r=2,!0))}function pe(e){e===void 0&&(e={});var t=e.connector,r=t===void 0?function(){return new L}:t,n=e.resetOnError,o=n===void 0?!0:n,i=e.resetOnComplete,a=i===void 0?!0:i,c=e.resetOnRefCountZero,s=c===void 0?!0:c;return function(f){var u,l,p,m=0,h=!1,b=!1,v=function(){l==null||l.unsubscribe(),l=void 0},V=function(){v(),u=p=void 0,h=b=!1},$=function(){var x=u;V(),x==null||x.unsubscribe()};return y(function(x,Te){m++,!b&&!h&&v();var Le=p=p!=null?p:r();Te.add(function(){m--,m===0&&!b&&!h&&(l=Dr($,s))}),Le.subscribe(Te),!u&&m>0&&(u=new Xe({next:function(we){return Le.next(we)},error:function(we){b=!0,v(),l=Dr(V,o,we),Le.error(we)},complete:function(){h=!0,v(),l=Dr(V,a),Le.complete()}}),D(x).subscribe(u))})(f)}}function Dr(e,t){for(var r=[],n=2;ne.next(document)),e}function W(e,t=document){return Array.from(t.querySelectorAll(e))}function B(e,t=document){let r=ie(e,t);if(typeof r=="undefined")throw new ReferenceError(`Missing element: expected "${e}" to be present`);return r}function ie(e,t=document){return t.querySelector(e)||void 0}function Fe(){return document.activeElement instanceof HTMLElement&&document.activeElement||void 0}function nr(e){return P(w(document.body,"focusin"),w(document.body,"focusout")).pipe(He(1),d(()=>{let t=Fe();return typeof t!="undefined"?e.contains(t):!1}),q(e===Fe()),Q())}function Be(e){return{x:e.offsetLeft,y:e.offsetTop}}function Oo(e){return P(w(window,"load"),w(window,"resize")).pipe(Re(0,fe),d(()=>Be(e)),q(Be(e)))}function or(e){return{x:e.scrollLeft,y:e.scrollTop}}function _t(e){return P(w(e,"scroll"),w(window,"resize")).pipe(Re(0,fe),d(()=>or(e)),q(or(e)))}var To=function(){if(typeof Map!="undefined")return Map;function e(t,r){var n=-1;return t.some(function(o,i){return o[0]===r?(n=i,!0):!1}),n}return function(){function t(){this.__entries__=[]}return Object.defineProperty(t.prototype,"size",{get:function(){return this.__entries__.length},enumerable:!0,configurable:!0}),t.prototype.get=function(r){var n=e(this.__entries__,r),o=this.__entries__[n];return o&&o[1]},t.prototype.set=function(r,n){var o=e(this.__entries__,r);~o?this.__entries__[o][1]=n:this.__entries__.push([r,n])},t.prototype.delete=function(r){var n=this.__entries__,o=e(n,r);~o&&n.splice(o,1)},t.prototype.has=function(r){return!!~e(this.__entries__,r)},t.prototype.clear=function(){this.__entries__.splice(0)},t.prototype.forEach=function(r,n){n===void 0&&(n=null);for(var o=0,i=this.__entries__;o0},e.prototype.connect_=function(){!Br||this.connected_||(document.addEventListener("transitionend",this.onTransitionEnd_),window.addEventListener("resize",this.refresh),Ka?(this.mutationsObserver_=new MutationObserver(this.refresh),this.mutationsObserver_.observe(document,{attributes:!0,childList:!0,characterData:!0,subtree:!0})):(document.addEventListener("DOMSubtreeModified",this.refresh),this.mutationEventsAdded_=!0),this.connected_=!0)},e.prototype.disconnect_=function(){!Br||!this.connected_||(document.removeEventListener("transitionend",this.onTransitionEnd_),window.removeEventListener("resize",this.refresh),this.mutationsObserver_&&this.mutationsObserver_.disconnect(),this.mutationEventsAdded_&&document.removeEventListener("DOMSubtreeModified",this.refresh),this.mutationsObserver_=null,this.mutationEventsAdded_=!1,this.connected_=!1)},e.prototype.onTransitionEnd_=function(t){var r=t.propertyName,n=r===void 0?"":r,o=qa.some(function(i){return!!~n.indexOf(i)});o&&this.refresh()},e.getInstance=function(){return this.instance_||(this.instance_=new e),this.instance_},e.instance_=null,e}(),Lo=function(e,t){for(var r=0,n=Object.keys(t);r0},e}(),Ao=typeof WeakMap!="undefined"?new WeakMap:new To,Co=function(){function e(t){if(!(this instanceof e))throw new TypeError("Cannot call a class as a function.");if(!arguments.length)throw new TypeError("1 argument required, but only 0 present.");var r=Ba.getInstance(),n=new ns(t,r,this);Ao.set(this,n)}return e}();["observe","unobserve","disconnect"].forEach(function(e){Co.prototype[e]=function(){var t;return(t=Ao.get(this))[e].apply(t,arguments)}});var os=function(){return typeof ir.ResizeObserver!="undefined"?ir.ResizeObserver:Co}(),Ro=os;var Ho=new L,is=I(()=>C(new Ro(e=>{for(let t of e)Ho.next(t)}))).pipe(_(e=>P(je,C(e)).pipe(R(()=>e.disconnect()))),X(1));function Se(e){return{width:e.offsetWidth,height:e.offsetHeight}}function de(e){return is.pipe(M(t=>t.observe(e)),_(t=>Ho.pipe(A(({target:r})=>r===e),R(()=>t.unobserve(e)),d(()=>Se(e)))),q(Se(e)))}function Tt(e){return{width:e.scrollWidth,height:e.scrollHeight}}function ko(e){let t=e.parentElement;for(;t&&(e.scrollWidth<=t.scrollWidth&&e.scrollHeight<=t.scrollHeight);)t=(e=t).parentElement;return t?e:void 0}var Po=new L,as=I(()=>C(new IntersectionObserver(e=>{for(let t of e)Po.next(t)},{threshold:0}))).pipe(_(e=>P(je,C(e)).pipe(R(()=>e.disconnect()))),X(1));function cr(e){return as.pipe(M(t=>t.observe(e)),_(t=>Po.pipe(A(({target:r})=>r===e),R(()=>t.unobserve(e)),d(({isIntersecting:r})=>r))))}var fr={drawer:B("[data-md-toggle=drawer]"),search:B("[data-md-toggle=search]")};function $o(e){return fr[e].checked}function Ye(e,t){fr[e].checked!==t&&fr[e].click()}function ht(e){let t=fr[e];return w(t,"change").pipe(d(()=>t.checked),q(t.checked))}function ss(e,t){switch(e.constructor){case HTMLInputElement:return e.type==="radio"?/^Arrow/.test(t):!0;case HTMLSelectElement:case HTMLTextAreaElement:return!0;default:return e.isContentEditable}}function Io(){return w(window,"keydown").pipe(A(e=>!(e.metaKey||e.ctrlKey)),d(e=>({mode:$o("search")?"search":"global",type:e.key,claim(){e.preventDefault(),e.stopPropagation()}})),A(({mode:e,type:t})=>{if(e==="global"){let r=Fe();if(typeof r!="undefined")return!ss(r,t)}return!0}),pe())}function Oe(){return new URL(location.href)}function lr(e){location.href=e.href}function jo(){return new L}function Fo(e,t){if(typeof t=="string"||typeof t=="number")e.innerHTML+=t.toString();else if(t instanceof Node)e.appendChild(t);else if(Array.isArray(t))for(let r of t)Fo(e,r)}function O(e,t,...r){let n=document.createElement(e);if(t)for(let o of Object.keys(t))typeof t[o]!="undefined"&&(typeof t[o]!="boolean"?n.setAttribute(o,t[o]):n.setAttribute(o,""));for(let o of r)Fo(n,o);return n}function Uo(e,t){let r=t;if(e.length>r){for(;e[r]!==" "&&--r>0;);return`${e.substring(0,r)}...`}return e}function ur(e){if(e>999){let t=+((e-950)%1e3>99);return`${((e+1e-6)/1e3).toFixed(t)}k`}else return e.toString()}function Vo(){return location.hash.substring(1)}function No(e){let t=O("a",{href:e});t.addEventListener("click",r=>r.stopPropagation()),t.click()}function cs(){return w(window,"hashchange").pipe(d(Vo),q(Vo()),A(e=>e.length>0),X(1))}function Do(){return cs().pipe(d(e=>ie(`[id="${e}"]`)),A(e=>typeof e!="undefined"))}function Yr(e){let t=matchMedia(e);return tr(r=>t.addListener(()=>r(t.matches))).pipe(q(t.matches))}function Wo(){let e=matchMedia("print");return P(w(window,"beforeprint").pipe(d(()=>!0)),w(window,"afterprint").pipe(d(()=>!1))).pipe(q(e.matches))}function Gr(e,t){return e.pipe(_(r=>r?t():k))}function pr(e,t={credentials:"same-origin"}){return be(fetch(`${e}`,t)).pipe(le(()=>k),_(r=>r.status!==200?Et(()=>new Error(r.statusText)):C(r)))}function Ge(e,t){return pr(e,t).pipe(_(r=>r.json()),X(1))}function zo(e,t){let r=new DOMParser;return pr(e,t).pipe(_(n=>n.text()),d(n=>r.parseFromString(n,"text/xml")),X(1))}function qo(e){let t=O("script",{src:e});return I(()=>(document.head.appendChild(t),P(w(t,"load"),w(t,"error").pipe(_(()=>Et(()=>new ReferenceError(`Invalid script: ${e}`))))).pipe(d(()=>{}),R(()=>document.head.removeChild(t)),ve(1))))}function Ko(){return{x:Math.max(0,scrollX),y:Math.max(0,scrollY)}}function Bo(){return P(w(window,"scroll",{passive:!0}),w(window,"resize",{passive:!0})).pipe(d(Ko),q(Ko()))}function Yo(){return{width:innerWidth,height:innerHeight}}function Go(){return w(window,"resize",{passive:!0}).pipe(d(Yo),q(Yo()))}function Jo(){return G([Bo(),Go()]).pipe(d(([e,t])=>({offset:e,size:t})),X(1))}function mr(e,{viewport$:t,header$:r}){let n=t.pipe(J("size")),o=G([n,r]).pipe(d(()=>Be(e)));return G([r,t,o]).pipe(d(([{height:i},{offset:a,size:c},{x:s,y:f}])=>({offset:{x:a.x-s,y:a.y-f+i},size:c})))}var fs=B("#__config"),bt=JSON.parse(fs.textContent);bt.base=`${new URL(bt.base,Oe())}`;function ce(){return bt}function Z(e){return bt.features.includes(e)}function ae(e,t){return typeof t!="undefined"?bt.translations[e].replace("#",t.toString()):bt.translations[e]}function _e(e,t=document){return B(`[data-md-component=${e}]`,t)}function ee(e,t=document){return W(`[data-md-component=${e}]`,t)}function ls(e){let t=B(".md-typeset > :first-child",e);return w(t,"click",{once:!0}).pipe(d(()=>B(".md-typeset",e)),d(r=>({hash:__md_hash(r.innerHTML)})))}function Qo(e){return!Z("announce.dismiss")||!e.childElementCount?k:I(()=>{let t=new L;return t.pipe(q({hash:__md_get("__announce")})).subscribe(({hash:r})=>{var n;r&&r===((n=__md_get("__announce"))!=null?n:r)&&(e.hidden=!0,__md_set("__announce",r))}),ls(e).pipe(M(r=>t.next(r)),R(()=>t.complete()),d(r=>N({ref:e},r)))})}function us(e,{target$:t}){return t.pipe(d(r=>({hidden:r!==e})))}function Xo(e,t){let r=new L;return r.subscribe(({hidden:n})=>{e.hidden=n}),us(e,t).pipe(M(n=>r.next(n)),R(()=>r.complete()),d(n=>N({ref:e},n)))}var fi=Je(Qr());function Xr(e){return O("div",{class:"md-tooltip",id:e},O("div",{class:"md-tooltip__inner md-typeset"}))}function Zo(e,t){if(t=t?`${t}_annotation_${e}`:void 0,t){let r=t?`#${t}`:void 0;return O("aside",{class:"md-annotation",tabIndex:0},Xr(t),O("a",{href:r,class:"md-annotation__index",tabIndex:-1},O("span",{"data-md-annotation-id":e})))}else return O("aside",{class:"md-annotation",tabIndex:0},Xr(t),O("span",{class:"md-annotation__index",tabIndex:-1},O("span",{"data-md-annotation-id":e})))}function ei(e){return O("button",{class:"md-clipboard md-icon",title:ae("clipboard.copy"),"data-clipboard-target":`#${e} > code`})}function Zr(e,t){let r=t&2,n=t&1,o=Object.keys(e.terms).filter(c=>!e.terms[c]).reduce((c,s)=>[...c,O("del",null,s)," "],[]).slice(0,-1),i=new URL(e.location);Z("search.highlight")&&i.searchParams.set("h",Object.entries(e.terms).filter(([,c])=>c).reduce((c,[s])=>`${c} ${s}`.trim(),""));let{tags:a}=ce();return O("a",{href:`${i}`,class:"md-search-result__link",tabIndex:-1},O("article",{class:["md-search-result__article",...r?["md-search-result__article--document"]:[]].join(" "),"data-md-score":e.score.toFixed(2)},r>0&&O("div",{class:"md-search-result__icon md-icon"}),O("h1",{class:"md-search-result__title"},e.title),n>0&&e.text.length>0&&O("p",{class:"md-search-result__teaser"},Uo(e.text,320)),e.tags&&O("div",{class:"md-typeset"},e.tags.map(c=>{let s=c.replace(/<[^>]+>/g,""),f=a?s in a?`md-tag-icon md-tag-icon--${a[s]}`:"md-tag-icon":"";return O("span",{class:`md-tag ${f}`},c)})),n>0&&o.length>0&&O("p",{class:"md-search-result__terms"},ae("search.result.term.missing"),": ",...o)))}function ti(e){let t=e[0].score,r=[...e],n=r.findIndex(f=>!f.location.includes("#")),[o]=r.splice(n===-1?0:n,1),i=r.findIndex(f=>f.scoreZr(f,1)),...c.length?[O("details",{class:"md-search-result__more"},O("summary",{tabIndex:-1},c.length>0&&c.length===1?ae("search.result.more.one"):ae("search.result.more.other",c.length)),...c.map(f=>Zr(f,1)))]:[]];return O("li",{class:"md-search-result__item"},s)}function ri(e){return O("ul",{class:"md-source__facts"},Object.entries(e).map(([t,r])=>O("li",{class:`md-source__fact md-source__fact--${t}`},typeof r=="number"?ur(r):r)))}function en(e){let t=`tabbed-control tabbed-control--${e}`;return O("div",{class:t,hidden:!0},O("button",{class:"tabbed-button",tabIndex:-1}))}function ni(e){return O("div",{class:"md-typeset__scrollwrap"},O("div",{class:"md-typeset__table"},e))}function ps(e){let t=ce(),r=new URL(`${e.version}/`,new URL("../",t.base));return O("li",{class:"md-version__item"},O("a",{href:`${r}`,class:"md-version__link"},e.title))}function oi(e,t){return O("div",{class:"md-version"},O("button",{class:"md-version__current","aria-label":ae("select.version.title")},t.title),O("ul",{class:"md-version__list"},e.map(ps)))}function ms(e,t){let r=I(()=>G([Oo(e),_t(t)])).pipe(d(([{x:n,y:o},i])=>{let{width:a,height:c}=Se(e);return{x:n-i.x+a/2,y:o-i.y+c/2}}));return nr(e).pipe(_(n=>r.pipe(d(o=>({active:n,offset:o})),ve(+!n||1/0))))}function ii(e,t,{target$:r}){let[n,o]=Array.from(e.children);return I(()=>{let i=new L,a=i.pipe(ue(1));return i.subscribe({next({offset:c}){e.style.setProperty("--md-tooltip-x",`${c.x}px`),e.style.setProperty("--md-tooltip-y",`${c.y}px`)},complete(){e.style.removeProperty("--md-tooltip-x"),e.style.removeProperty("--md-tooltip-y")}}),cr(e).pipe(te(a)).subscribe(c=>{e.toggleAttribute("data-md-visible",c)}),P(i.pipe(A(({active:c})=>c)),i.pipe(He(250),A(({active:c})=>!c))).subscribe({next({active:c}){c?e.prepend(n):n.remove()},complete(){e.prepend(n)}}),i.pipe(Re(16,fe)).subscribe(({active:c})=>{n.classList.toggle("md-tooltip--active",c)}),i.pipe(Kr(125,fe),A(()=>!!e.offsetParent),d(()=>e.offsetParent.getBoundingClientRect()),d(({x:c})=>c)).subscribe({next(c){c?e.style.setProperty("--md-tooltip-0",`${-c}px`):e.style.removeProperty("--md-tooltip-0")},complete(){e.style.removeProperty("--md-tooltip-0")}}),w(o,"click").pipe(te(a),A(c=>!(c.metaKey||c.ctrlKey))).subscribe(c=>c.preventDefault()),w(o,"mousedown").pipe(te(a),me(i)).subscribe(([c,{active:s}])=>{var f;if(c.button!==0||c.metaKey||c.ctrlKey)c.preventDefault();else if(s){c.preventDefault();let u=e.parentElement.closest(".md-annotation");u instanceof HTMLElement?u.focus():(f=Fe())==null||f.blur()}}),r.pipe(te(a),A(c=>c===n),ke(125)).subscribe(()=>e.focus()),ms(e,t).pipe(M(c=>i.next(c)),R(()=>i.complete()),d(c=>N({ref:e},c)))})}function ds(e){let t=[];for(let r of W(".c, .c1, .cm",e)){let n=[],o=document.createNodeIterator(r,NodeFilter.SHOW_TEXT);for(let i=o.nextNode();i;i=o.nextNode())n.push(i);for(let i of n){let a;for(;a=/(\(\d+\))(!)?/.exec(i.textContent);){let[,c,s]=a;if(typeof s=="undefined"){let f=i.splitText(a.index);i=f.splitText(c.length),t.push(f)}else{i.textContent=c,t.push(i);break}}}}return t}function ai(e,t){t.append(...Array.from(e.childNodes))}function si(e,t,{target$:r,print$:n}){let o=t.closest("[id]"),i=o==null?void 0:o.id,a=new Map;for(let c of ds(t)){let[,s]=c.textContent.match(/\((\d+)\)/);ie(`li:nth-child(${s})`,e)&&(a.set(s,Zo(s,i)),c.replaceWith(a.get(s)))}return a.size===0?k:I(()=>{let c=new L,s=[];for(let[f,u]of a)s.push([B(".md-typeset",u),B(`li:nth-child(${f})`,e)]);return n.pipe(te(c.pipe(ue(1)))).subscribe(f=>{e.hidden=!f;for(let[u,l]of s)f?ai(u,l):ai(l,u)}),P(...[...a].map(([,f])=>ii(f,t,{target$:r}))).pipe(R(()=>c.complete()),pe())})}var hs=0;function li(e){if(e.nextElementSibling){let t=e.nextElementSibling;if(t.tagName==="OL")return t;if(t.tagName==="P"&&!t.children.length)return li(t)}}function ci(e){return de(e).pipe(d(({width:t})=>({scrollable:Tt(e).width>t})),J("scrollable"))}function ui(e,t){let{matches:r}=matchMedia("(hover)"),n=I(()=>{let o=new L;if(o.subscribe(({scrollable:a})=>{a&&r?e.setAttribute("tabindex","0"):e.removeAttribute("tabindex")}),fi.default.isSupported()){let a=e.closest("pre");a.id=`__code_${++hs}`,a.insertBefore(ei(a.id),e)}let i=e.closest(".highlight");if(i instanceof HTMLElement){let a=li(i);if(typeof a!="undefined"&&(i.classList.contains("annotate")||Z("content.code.annotate"))){let c=si(a,e,t);return ci(e).pipe(M(s=>o.next(s)),R(()=>o.complete()),d(s=>N({ref:e},s)),tt(de(i).pipe(d(({width:s,height:f})=>s&&f),Q(),_(s=>s?c:k))))}}return ci(e).pipe(M(a=>o.next(a)),R(()=>o.complete()),d(a=>N({ref:e},a)))});return Z("content.lazy")?cr(e).pipe(A(o=>o),ve(1),_(()=>n)):n}var pi=".node circle,.node ellipse,.node path,.node polygon,.node rect{fill:var(--md-mermaid-node-bg-color);stroke:var(--md-mermaid-node-fg-color)}marker{fill:var(--md-mermaid-edge-color)!important}.edgeLabel .label rect{fill:transparent}.label{color:var(--md-mermaid-label-fg-color);font-family:var(--md-mermaid-font-family)}.label foreignObject{line-height:normal;overflow:visible}.label div .edgeLabel{color:var(--md-mermaid-label-fg-color)}.edgeLabel,.edgeLabel rect,.label div .edgeLabel{background-color:var(--md-mermaid-label-bg-color)}.edgeLabel,.edgeLabel rect{fill:var(--md-mermaid-label-bg-color);color:var(--md-mermaid-edge-color)}.edgePath .path,.flowchart-link{stroke:var(--md-mermaid-edge-color)}.edgePath .arrowheadPath{fill:var(--md-mermaid-edge-color);stroke:none}.cluster rect{fill:var(--md-default-fg-color--lightest);stroke:var(--md-default-fg-color--lighter)}.cluster span{color:var(--md-mermaid-label-fg-color);font-family:var(--md-mermaid-font-family)}defs #flowchart-circleEnd,defs #flowchart-circleStart,defs #flowchart-crossEnd,defs #flowchart-crossStart,defs #flowchart-pointEnd,defs #flowchart-pointStart{stroke:none}g.classGroup line,g.classGroup rect{fill:var(--md-mermaid-node-bg-color);stroke:var(--md-mermaid-node-fg-color)}g.classGroup text{fill:var(--md-mermaid-label-fg-color);font-family:var(--md-mermaid-font-family)}.classLabel .box{fill:var(--md-mermaid-label-bg-color);background-color:var(--md-mermaid-label-bg-color);opacity:1}.classLabel .label{fill:var(--md-mermaid-label-fg-color);font-family:var(--md-mermaid-font-family)}.node .divider{stroke:var(--md-mermaid-node-fg-color)}.relation{stroke:var(--md-mermaid-edge-color)}.cardinality{fill:var(--md-mermaid-label-fg-color);font-family:var(--md-mermaid-font-family)}.cardinality text{fill:inherit!important}defs #classDiagram-compositionEnd,defs #classDiagram-compositionStart,defs #classDiagram-dependencyEnd,defs #classDiagram-dependencyStart,defs #classDiagram-extensionEnd,defs #classDiagram-extensionStart{fill:var(--md-mermaid-edge-color)!important;stroke:var(--md-mermaid-edge-color)!important}defs #classDiagram-aggregationEnd,defs #classDiagram-aggregationStart{fill:var(--md-mermaid-label-bg-color)!important;stroke:var(--md-mermaid-edge-color)!important}g.stateGroup rect{fill:var(--md-mermaid-node-bg-color);stroke:var(--md-mermaid-node-fg-color)}g.stateGroup .state-title{fill:var(--md-mermaid-label-fg-color)!important;font-family:var(--md-mermaid-font-family)}g.stateGroup .composit{fill:var(--md-mermaid-label-bg-color)}.nodeLabel{color:var(--md-mermaid-label-fg-color);font-family:var(--md-mermaid-font-family)}.node circle.state-end,.node circle.state-start,.start-state{fill:var(--md-mermaid-edge-color);stroke:none}.end-state-inner,.end-state-outer{fill:var(--md-mermaid-edge-color)}.end-state-inner,.node circle.state-end{stroke:var(--md-mermaid-label-bg-color)}.transition{stroke:var(--md-mermaid-edge-color)}[id^=state-fork] rect,[id^=state-join] rect{fill:var(--md-mermaid-edge-color)!important;stroke:none!important}.statediagram-cluster.statediagram-cluster .inner{fill:var(--md-default-bg-color)}.statediagram-cluster rect{fill:var(--md-mermaid-node-bg-color);stroke:var(--md-mermaid-node-fg-color)}.statediagram-state rect.divider{fill:var(--md-default-fg-color--lightest);stroke:var(--md-default-fg-color--lighter)}defs #statediagram-barbEnd{stroke:var(--md-mermaid-edge-color)}.entityBox{fill:var(--md-mermaid-label-bg-color);stroke:var(--md-mermaid-node-fg-color)}.entityLabel{fill:var(--md-mermaid-label-fg-color);font-family:var(--md-mermaid-font-family)}.relationshipLabelBox{fill:var(--md-mermaid-label-bg-color);fill-opacity:1;background-color:var(--md-mermaid-label-bg-color);opacity:1}.relationshipLabel{fill:var(--md-mermaid-label-fg-color)}.relationshipLine{stroke:var(--md-mermaid-edge-color)}defs #ONE_OR_MORE_END *,defs #ONE_OR_MORE_START *,defs #ONLY_ONE_END *,defs #ONLY_ONE_START *,defs #ZERO_OR_MORE_END *,defs #ZERO_OR_MORE_START *,defs #ZERO_OR_ONE_END *,defs #ZERO_OR_ONE_START *{stroke:var(--md-mermaid-edge-color)!important}.actor,defs #ZERO_OR_MORE_END circle,defs #ZERO_OR_MORE_START circle{fill:var(--md-mermaid-label-bg-color)}.actor{stroke:var(--md-mermaid-node-fg-color)}text.actor>tspan{fill:var(--md-mermaid-label-fg-color);font-family:var(--md-mermaid-font-family)}line{stroke:var(--md-default-fg-color--lighter)}.messageLine0,.messageLine1{stroke:var(--md-mermaid-edge-color)}.loopText>tspan,.messageText,.noteText>tspan{font-family:var(--md-mermaid-font-family)!important}#arrowhead path,.loopText>tspan,.messageText,.noteText>tspan{fill:var(--md-mermaid-edge-color);stroke:none}.loopLine{stroke:var(--md-mermaid-node-fg-color)}.labelBox,.loopLine{fill:var(--md-mermaid-node-bg-color)}.labelBox{stroke:none}.labelText,.labelText>span{fill:var(--md-mermaid-node-fg-color);font-family:var(--md-mermaid-font-family)}";var tn,vs=0,gs=ce();function ys(){return typeof mermaid=="undefined"||mermaid instanceof Element?qo(`${gs.base}_static/mermaid/mermaid.min.js`):C(void 0)}function mi(e){return e.classList.remove("mermaid"),tn||(tn=ys().pipe(M(()=>mermaid.initialize({startOnLoad:!1,themeCSS:pi,sequence:{actorFontSize:"16px",messageFontSize:"16px",noteFontSize:"16px"}})),d(()=>{}),X(1))),tn.subscribe(()=>{e.classList.add("mermaid");let t=`__mermaid_${vs++}`,r=O("div",{class:"mermaid"});mermaid.mermaidAPI.render(t,e.textContent,n=>{let o=r.attachShadow({mode:"closed"});o.innerHTML=n,e.replaceWith(r)})}),tn.pipe(d(()=>({ref:e})))}function xs(e,{target$:t,print$:r}){let n=!0;return P(t.pipe(d(o=>o.closest("details:not([open])")),A(o=>e===o),d(()=>({action:"open",reveal:!0}))),r.pipe(A(o=>o||!n),M(()=>n=e.open),d(o=>({action:o?"open":"close"}))))}function di(e,t){return I(()=>{let r=new L;return r.subscribe(({action:n,reveal:o})=>{e.toggleAttribute("open",n==="open"),o&&e.scrollIntoView()}),xs(e,t).pipe(M(n=>r.next(n)),R(()=>r.complete()),d(n=>N({ref:e},n)))})}var hi=O("table");function bi(e){return e.replaceWith(hi),hi.replaceWith(ni(e)),C({ref:e})}function ws(e){let t=W(":scope > input",e),r=t.find(n=>n.checked)||t[0];return P(...t.map(n=>w(n,"change").pipe(d(()=>B(`label[for="${n.id}"]`))))).pipe(q(B(`label[for="${r.id}"]`)),d(n=>({active:n})))}function vi(e,{viewport$:t}){let r=en("prev");e.append(r);let n=en("next");e.append(n);let o=B(".tabbed-labels",e);return I(()=>{let i=new L,a=i.pipe(ue(1));return G([i,de(e)]).pipe(Re(1,fe),te(a)).subscribe({next([{active:c},s]){let f=Be(c),{width:u}=Se(c);e.style.setProperty("--md-indicator-x",`${f.x}px`),e.style.setProperty("--md-indicator-width",`${u}px`);let l=or(o);(f.xl.x+s.width)&&o.scrollTo({left:Math.max(0,f.x-16),behavior:"smooth"})},complete(){e.style.removeProperty("--md-indicator-x"),e.style.removeProperty("--md-indicator-width")}}),G([_t(o),de(o)]).pipe(te(a)).subscribe(([c,s])=>{let f=Tt(o);r.hidden=c.x<16,n.hidden=c.x>f.width-s.width-16}),P(w(r,"click").pipe(d(()=>-1)),w(n,"click").pipe(d(()=>1))).pipe(te(a)).subscribe(c=>{let{width:s}=Se(o);o.scrollBy({left:s*c,behavior:"smooth"})}),Z("content.tabs.link")&&i.pipe(Pe(1),me(t)).subscribe(([{active:c},{offset:s}])=>{let f=c.innerText.trim();if(c.hasAttribute("data-md-switching"))c.removeAttribute("data-md-switching");else{let u=e.offsetTop-s.y;for(let p of W("[data-tabs]"))for(let m of W(":scope > input",p)){let h=B(`label[for="${m.id}"]`);if(h!==c&&h.innerText.trim()===f){h.setAttribute("data-md-switching",""),m.click();break}}window.scrollTo({top:e.offsetTop-u});let l=__md_get("__tabs")||[];__md_set("__tabs",[...new Set([f,...l])])}}),ws(e).pipe(M(c=>i.next(c)),R(()=>i.complete()),d(c=>N({ref:e},c)))}).pipe(Ze(se))}function gi(e,{viewport$:t,target$:r,print$:n}){return P(...W("pre:not(.mermaid) > code",e).map(o=>ui(o,{target$:r,print$:n})),...W("pre.mermaid",e).map(o=>mi(o)),...W("table:not([class])",e).map(o=>bi(o)),...W("details",e).map(o=>di(o,{target$:r,print$:n})),...W("[data-tabs]",e).map(o=>vi(o,{viewport$:t})))}function Es(e,{alert$:t}){return t.pipe(_(r=>P(C(!0),C(!1).pipe(ke(2e3))).pipe(d(n=>({message:r,active:n})))))}function yi(e,t){let r=B(".md-typeset",e);return I(()=>{let n=new L;return n.subscribe(({message:o,active:i})=>{e.classList.toggle("md-dialog--active",i),r.textContent=o}),Es(e,t).pipe(M(o=>n.next(o)),R(()=>n.complete()),d(o=>N({ref:e},o)))})}function Ss({viewport$:e}){if(!Z("header.autohide"))return C(!1);let t=e.pipe(d(({offset:{y:o}})=>o),Ne(2,1),d(([o,i])=>[oMath.abs(i-o.y)>100),d(([,[o]])=>o),Q()),n=ht("search");return G([e,n]).pipe(d(([{offset:o},i])=>o.y>400&&!i),Q(),_(o=>o?r:C(!1)),q(!1))}function xi(e,t){return I(()=>G([de(e),Ss(t)])).pipe(d(([{height:r},n])=>({height:r,hidden:n})),Q((r,n)=>r.height===n.height&&r.hidden===n.hidden),X(1))}function wi(e,{header$:t,main$:r}){return I(()=>{let n=new L,o=n.pipe(ue(1));return n.pipe(J("active"),St(t)).subscribe(([{active:i},{hidden:a}])=>{e.classList.toggle("md-header--shadow",i&&!a),e.hidden=a}),r.subscribe(n),t.pipe(te(o),d(i=>N({ref:e},i)))})}function Os(e,{viewport$:t,header$:r}){return mr(e,{viewport$:t,header$:r}).pipe(d(({offset:{y:n}})=>{let{height:o}=Se(e);return{active:n>=o}}),J("active"))}function Ei(e,t){return I(()=>{let r=new L;r.subscribe(({active:o})=>{e.classList.toggle("md-header__title--active",o)});let n=ie("article h1, .objdesc > dt .descname");return typeof n=="undefined"?k:Os(n,t).pipe(M(o=>r.next(o)),R(()=>r.complete()),d(o=>N({ref:e},o)))})}function Si(e,{viewport$:t,header$:r}){let n=r.pipe(d(({height:i})=>i),Q()),o=n.pipe(_(()=>de(e).pipe(d(({height:i})=>({top:e.offsetTop,bottom:e.offsetTop+i})),J("bottom"))));return G([n,o,t]).pipe(d(([i,{top:a,bottom:c},{offset:{y:s},size:{height:f}}])=>(f=Math.max(0,f-Math.max(0,a-s,i)-Math.max(0,f+s-c)),{offset:a-i,height:f,active:a-i<=s})),Q((i,a)=>i.offset===a.offset&&i.height===a.height&&i.active===a.active))}function _s(e){let t=__md_get("__palette")||{index:e.findIndex(r=>matchMedia(r.getAttribute("data-md-color-media")).matches)};return C(...e).pipe(oe(r=>w(r,"change").pipe(d(()=>r))),q(e[Math.max(0,t.index)]),d(r=>({index:e.indexOf(r),color:{scheme:r.getAttribute("data-md-color-scheme"),primary:r.getAttribute("data-md-color-primary"),accent:r.getAttribute("data-md-color-accent")}})),X(1))}function Oi(e){return I(()=>{let t=new L;t.subscribe(n=>{document.body.setAttribute("data-md-color-switching","");for(let[o,i]of Object.entries(n.color))document.body.setAttribute(`data-md-color-${o}`,i);for(let o=0;o{document.body.removeAttribute("data-md-color-switching")});let r=W("input",e);return _s(r).pipe(M(n=>t.next(n)),R(()=>t.complete()),d(n=>N({ref:e},n)))})}function Ts(e){let t=a=>a.trim(),{searchParams:r}=Oe(),n;if(r.has("q")){Ye("search",!0);let a=r.get("q");n=C(a)}else n=C();ht("search").pipe(A(a=>!a),ve(1)).subscribe(()=>{let a=new URL(location.href);a.searchParams.delete("q"),history.replaceState({},"",`${a}`)}),n.subscribe(a=>{a&&(e.value=a,e.focus())});let o=nr(e),i=P(w(e,"keyup"),w(e,"focus").pipe(ke(1)),n).pipe(d(()=>t(e.value)),q(""),Q());return G([i,o]).pipe(d(([a,c])=>({value:a,focus:c})),X(1))}function _i(e){let t=new L,r=t.pipe(ue(1));return t.pipe(J("focus")).subscribe(({focus:n})=>{n?(Ye("search",n),e.placeholder=""):e.placeholder=ae("search.placeholder")}),w(e.form,"reset").pipe(te(r)).subscribe(()=>e.focus()),Ts(e).pipe(M(n=>t.next(n)),R(()=>t.complete()),d(n=>N({ref:e},n)),pe())}var on=Je(rn());var As=ce();function nn(e){return`${As.base}${e}`}var dr;function Li(e){return new Promise((t,r)=>{let n=document.createElement("script"),o=nn(e);n.src=o,n.addEventListener("load",()=>t()),n.addEventListener("error",()=>{console.error(`Failed to load search data: ${o}`),r()}),document.body.appendChild(n)})}function Cs(){return dr!==void 0||(dr=Promise.all([Li("_static/language_data.js"),Li("searchindex.js")]).then(()=>{})),dr}var Ue={objNameMatch:11,objPartialMatch:6,objPrio:{0:15,1:5,2:-5},objPrioDefault:0,title:15,partialTitle:7,term:5,partialTerm:2},an;window.Search={setIndex:e=>{an=e}};var Rs=!1;function Hs(e,t){let{docurls:r,objects:n,objnames:o,titles:i}=an,a=[];function c(s,f,u,l,p,m,h){var V;let b=(s?`${s}.`:"")+m,v=b.toLowerCase();if(v.indexOf(e)>-1){let $=0,x=v.split(".");v===e||x[x.length-1]===e?$+=Ue.objNameMatch:x[x.length-1].indexOf(e)>-1&&($+=Ue.objPartialMatch);let Te=o[u][2],Le=i[f];if(t.length>0){let we=`${s} ${m} ${Te} ${Le} ${h!=null?h:""}`.toLowerCase(),Mt=!0;for(let ot=0;ot2){let m=sn(u);if(!o[u])for(let h in o)h.match(m)&&p.push({files:o[h],score:Ue.partialTerm});if(!i[u])for(let h in i)h.match(m)&&p.push({files:i[h],score:Ue.partialTitle})}if(p.every(m=>m.files===void 0))break;p.forEach(m=>{let h=m.files;if(h!==void 0){Array.isArray(h)||(h=[h]),l.push(...h);for(let b=0;bm.length>2).length;if(!(a[u].length!==e.length&&a[u].length!==p)){for(let m=0;mc[f][h]));s.push({docurl:r[f],title:n[f],anchor:"",objectLabel:null,synopsis:null,score:m})}}}return s}function $s(e){let t=new DOMParser().parseFromString(e,"text/html");t.querySelectorAll(".headerlink").forEach(s=>{var f;(f=s.parentNode)==null||f.removeChild(s)});let r=t.querySelector("[role=main]");if(r===null)return console.warn("Content block not found. Sphinx search tries to obtain it via '[role=main]'. Could you check your theme or template."),[];let n=r.querySelectorAll("h1, h2, h3, h4, h5, h6"),o,i=[],a=t.createRange(),c=(s,f)=>{var m;s!==void 0?a.setStartAfter(s):a.setStartBefore(r),f!==void 0?a.setEndBefore(f):a.setEndAfter(r);let u=a.toString().trim(),l=(m=s==null?void 0:s.textContent)==null?void 0:m.trim();if(!l&&!u)return;let p=s!==void 0?`#${s.id}`:"";i.push({title:l!=null?l:"",anchor:p,text:u})};return n.forEach(s=>{if(!s.id)return;let u=o;o=s,c(u,s)}),c(o,void 0),i}function Is(e,t){let r=$s(e),n=t.map(i=>new RegExp(sn(i),"im")),o=[];for(let i=0;ii.score!==a.score?a.score-i.score:i.sectionIndex-a.sectionIndex),o.length!==0)return o.map(i=>{let c=r[i.sectionIndex],s=Math.max(i.snippetIndex-240/2,0);return{snippet:(s>0?"\u2026":"")+c.text.substr(s,240).trim()+(s+240${(0,on.default)(e.objectLabel)}`,text:r(e.synopsis)}];let a=nn(e.docurl),c;if(window.location.protocol!=="file:")try{let l=yield(yield fetch(a)).text();c=Is(l,t)}catch(u){console.warn("Failed to retrieve search result document: ",u)}c===void 0&&(c=[{score:-1,title:"",anchor:"",snippet:"",terms:i}]);let s=[];c[0].score!==-1&&s.push({location:n,score:e.score,terms:i,title:r(o),text:""});let f;for(let u of c)f===void 0&&(f=u.score),s.push({location:n+u.anchor,score:u.score===f?e.score:0,terms:u.terms,title:r(u.title||o),text:r(u.snippet)});return s})}function Fs(e){return new DOMParser().parseFromString(e,"text/html").body.textContent||""}function Mi(e){return ze(this,null,function*(){yield Cs();let t=new Stemmer,r=[],n=[],o=[],i=[];for(let u of ks(e)){let l=!1;u[0]==="-"&&(l=!0,u=u.substr(1));let p=u.toLowerCase();if(p.length===0)continue;i.push(p);let m=!1;for(let h of p.matchAll(/\w+/g)){let b=h[0];if(stopwords.indexOf(b)!==-1)continue;let v=t.stemWord(b);v.length<3&&b.length>=3&&(v=b);let V;l?V=n:(V=r,m=!0),V.indexOf(v)===-1&&V.push(v)}!l&&m&&o.push(p)}let a=[];for(let u=0;u{let p=u.score,m=l.score;if(p!==m)return m-p;let h=u.title.toLowerCase(),b=l.title.toLowerCase();return h>b?1:h`${u}`,f=u=>(0,on.default)(u).replace(c,s).replace(/<\/mark>(\s+)]*>/gim,"$1");return{count:a.length,get:u=>js(a[u],o,f)}})}function Ai(e,{query$:t}){let r=B(":scope > :first-child",e),n=B(":scope > :last-child",e),o,i,a=e.parentElement,c=16,s=()=>a.scrollTop+a.clientHeight+c>a.scrollHeight,f=()=>{i!==void 0&&s()&&(i(),i=void 0)};a.addEventListener("scroll",f,{passive:!0}),window.addEventListener("resize",f,{passive:!0});let u=l=>ze(this,null,function*(){o=l;let p=4,m=p;for(let h=0;h{i=()=>v(void 0)})),m+=p),o!==l)return;let b=yield l.get(h);if(o!==l)return;n.appendChild(ti(b))}});return t.pipe(J("value"),Fr(()=>$r(250)),mt(l=>ze(this,null,function*(){if(!!l.value)return Mi(l.value)})),Ce(fe)).subscribe(l=>{if(n.innerHTML="",l){switch(l.count){case 0:r.textContent=ae("search.result.none");break;case 1:r.textContent=ae("search.result.one");break;default:r.textContent=ae("search.result.other",ur(l.count))}u(l)}else r.textContent=ae("search.result.placeholder")}),C()}function Us(e,{query$:t}){return t.pipe(d(({value:r})=>{let n=Oe();return n.hash="",n.searchParams.delete("h"),n.searchParams.set("q",r),{url:n}}))}function Ci(e,t){let r=new L;return r.subscribe(({url:n})=>{e.setAttribute("data-clipboard-text",e.href),e.href=`${n}`}),w(e,"click").subscribe(n=>n.preventDefault()),Us(e,t).pipe(M(n=>r.next(n)),R(()=>r.complete()),d(n=>N({ref:e},n)))}function Ri(e,{keyboard$:t}){let r=_e("search-query");return t.pipe(A(({mode:n})=>n==="search")).subscribe(n=>{switch(n.type){case"ArrowRight":e.innerText.length&&r.selectionStart===r.value.length&&(r.value=e.innerText);break}}),C()}function Hi(e,{keyboard$:t}){try{let r=_e("search-query",e),n=_e("search-result",e);t.pipe(A(({mode:a})=>a==="search")).subscribe(a=>{let c=Fe();switch(a.type){case"Enter":if(c===r){let s=new Map;for(let f of W(":first-child [href]",n)){let u=f.firstElementChild;s.set(f,parseFloat(u.getAttribute("data-md-score")))}if(s.size){let[[f]]=[...s].sort(([,u],[,l])=>l-u);f.click()}a.claim()}break;case"Escape":case"Tab":Ye("search",!1),r.blur();break;case"ArrowUp":case"ArrowDown":if(typeof c=="undefined")r.focus();else{let s=[r,...W(":not(details) > [href], summary, details[open] [href]",n)],f=Math.max(0,(Math.max(0,s.indexOf(c))+s.length+(a.type==="ArrowUp"?-1:1))%s.length);s[f].focus()}a.claim();break;default:r!==Fe()&&r.focus()}}),t.pipe(A(({mode:a})=>a==="global")).subscribe(a=>{switch(a.type){case"f":case"s":case"/":r.focus(),r.select(),a.claim();break}});let o=_i(r),i=Ai(n,{query$:o});return P(o,i).pipe(tt(...ee("search-share",e).map(a=>Ci(a,{query$:o})),...ee("search-suggest",e).map(a=>Ri(a,{keyboard$:t}))))}catch(r){return e.hidden=!0,je}}var cn=Je(Qr());function Vs(e){e.setAttribute("data-md-copying","");let t=e.innerText;return e.removeAttribute("data-md-copying"),t}function ki({alert$:e}){cn.default.isSupported()&&new U(t=>{new cn.default("[data-clipboard-target], [data-clipboard-text]",{text:r=>r.getAttribute("data-clipboard-text")||Vs(B(r.getAttribute("data-clipboard-target")))}).on("success",r=>t.next(r))}).pipe(M(t=>{t.trigger.focus()}),d(()=>ae("clipboard.copied"))).subscribe(e)}function Ns(e){if(e.length<2)return[""];let[t,r]=[...e].sort((o,i)=>o.length-i.length).map(o=>o.replace(/[^/]+$/,"")),n=0;if(t===r)n=t.length;else for(;t.charCodeAt(n)===r.charCodeAt(n);)n++;return e.map(o=>o.replace(t.slice(0,n),""))}function hr(e){let t=__md_get("__sitemap",sessionStorage,e);if(t)return C(t);{let r=ce();return zo(new URL("sitemap.xml",e||r.base)).pipe(d(n=>Ns(W("loc",n).map(o=>o.textContent))),le(()=>k),De([]),M(n=>__md_set("__sitemap",n,sessionStorage,e)))}}function Pi({document$:e,location$:t,viewport$:r}){let n=ce();if(location.protocol==="file:")return;"scrollRestoration"in history&&(history.scrollRestoration="manual",w(window,"beforeunload").subscribe(()=>{history.scrollRestoration="auto"}));let o=ie("link[rel=icon]");typeof o!="undefined"&&(o.href=o.href);let i=hr().pipe(d(l=>l.map(p=>`${new URL(p,n.base)}`)),_(l=>w(document.body,"click").pipe(A(p=>!p.metaKey&&!p.ctrlKey),_(p=>{if(p.target instanceof Element){let m=p.target.closest("a");if(m&&!m.target){let h=new URL(m.href);if(h.search="",h.hash="",h.pathname!==location.pathname&&l.includes(h.toString()))return p.preventDefault(),C({url:new URL(m.href)})}}return je}))),pe()),a=w(window,"popstate").pipe(A(l=>l.state!==null),d(l=>({url:new URL(location.href),offset:l.state})),pe());P(i,a).pipe(Q((l,p)=>l.url.href===p.url.href),d(({url:l})=>l)).subscribe(t);let c=t.pipe(J("pathname"),_(l=>pr(l.href).pipe(le(()=>(lr(l),je)))),pe());i.pipe(rr(c)).subscribe(({url:l})=>{history.pushState({},"",`${l}`)});let s=new DOMParser;c.pipe(_(l=>l.text()),d(l=>s.parseFromString(l,"text/html"))).subscribe(e);let f=new Set,u=new Set;for(let l of W("script",document))l.src?f.add(new URL(l.src,document.baseURI).toString()):u.add(l.outerHTML);e.pipe(Pe(1),mt(l=>ze(this,null,function*(){var p;for(let m of["title","link[rel=canonical]","meta[name=author]","meta[name=description]","[data-md-component=announce]","[data-md-component=container]","[data-md-component=header-topic]","[data-md-component=outdated]","[data-md-component=logo]","[data-md-component=skip]",...Z("navigation.tabs.sticky")?["[data-md-component=tabs]"]:[]]){let h=ie(m),b=ie(m,l);typeof h!="undefined"&&typeof b!="undefined"&&h.replaceWith(b)}((p=window.MathJax)==null?void 0:p.typesetPromise)!==void 0&&(yield window.MathJax.typesetPromise());for(let m of W("script",l))if(m.src){let h=new URL(m.src,document.baseURI).toString();if(!f.has(h)){let b=document.createElement("script");for(let V of m.getAttributeNames())b.setAttribute(V,m.getAttribute(V));let v;b.src=h,b.async||(v=new Promise(V=>b.addEventListener("load",()=>V()))),document.body.appendChild(b),f.add(h),v!==void 0&&(yield v)}}else{let h=m.outerHTML;if(!u.has(h)){let b=document.createElement("script");for(let v of m.getAttributeNames())b.setAttribute(v,m.getAttribute(v));b.textContent=m.textContent,document.body.appendChild(b),u.add(h)}}}))).subscribe(),e.pipe(Pe(1),d(()=>_e("container")),_(l=>W("script",l)),mt(l=>{let p=O("script");if(l.src){for(let m of l.getAttributeNames())p.setAttribute(m,l.getAttribute(m));return l.replaceWith(p),new U(m=>{p.onload=()=>m.complete()})}else return p.textContent=l.textContent,l.replaceWith(p),k})).subscribe(),P(i,a).pipe(rr(e)).subscribe(({url:l,offset:p})=>{l.hash&&!p?No(l.hash):window.scrollTo(0,(p==null?void 0:p.y)||0)}),r.pipe(Wr(i),He(250),J("offset")).subscribe(({offset:l})=>{history.replaceState(l,"")}),P(i,a).pipe(Ne(2,1),A(([l,p])=>l.url.pathname===p.url.pathname),d(([,l])=>l)).subscribe(({offset:l})=>{window.scrollTo(0,(l==null?void 0:l.y)||0)})}var $i=Je(rn());function Ii(e,t){let r=new RegExp(e.separator,"img"),n=(o,i,a)=>`${i}${a}`;return o=>{o=o.replace(/[\s*+\-:~^]+/g," ").trim();let i=new RegExp(`(^|${e.separator})(${o.replace(/[|\\{}()[\]^$+*?.-]/g,"\\$&").replace(r,"|")})`,"img");return a=>(t?(0,$i.default)(a):a).replace(i,n).replace(/<\/mark>(\s+)]*>/img,"$1")}}function ji({document$:e}){var a;let t=ce(),r=t.version.staticVersions?C(t.version.staticVersions):Ge(new URL((a=t.version.versionPath)!=null?a:"../versions.json",t.base)),n=new URL("..",t.base),o=c=>new URL(c,n).toString().replace(/\/*$/,""),i=r.pipe(d(c=>{let s=t.base.toString().replace(/\/*$/,"");return c.find(({version:f,aliases:u})=>o(f)===s||u.find(l=>o(l)===s))||c[0]}));r.pipe(d(c=>new Map(c.map(s=>[`${new URL(`../${s.version}/`,t.base)}`,s]))),_(c=>w(document.body,"click").pipe(A(s=>!s.metaKey&&!s.ctrlKey),me(i),_(([s,f])=>{if(s.target instanceof Element){let u=s.target.closest("a");if(u&&!u.target&&c.has(u.href)){let l=u.href;return!s.target.closest(".md-version")&&c.get(l)===f?k:(s.preventDefault(),C(l))}}return k}),_(s=>{let{version:f}=c.get(s);return hr(new URL(s)).pipe(d(u=>{let p=Oe().href.replace(t.base,"");return u.includes(p.split("#")[0])?new URL(`../${f}/${p}`,t.base):new URL(s)}))})))).subscribe(c=>lr(c)),G([r,i]).subscribe(([c,s])=>{B(".md-header__topic").appendChild(oi(c,s))}),e.pipe(_(()=>i)).subscribe(c=>{var f;let s=__md_get("__outdated",sessionStorage);if(s===null){let u=((f=t.version)==null?void 0:f.default)||"latest";s=!c.aliases.includes(u),__md_set("__outdated",s,sessionStorage)}if(s)for(let u of ee("outdated"))u.hidden=!1})}function Fi(e,{location$:t}){let r={lang:[],separator:"\\s+"};return G([t.pipe(q(Oe()),A(n=>!!n.searchParams.get("h")))]).pipe(d(([n])=>Ii(r,!0)(n.searchParams.get("h"))),d(n=>{var a;let o=new Map,i=document.createNodeIterator(e,NodeFilter.SHOW_TEXT);for(let c=i.nextNode();c;c=i.nextNode())if((a=c.parentElement)!=null&&a.offsetHeight){let s=c.textContent,f=n(s);f.length>s.length&&o.set(c,f)}for(let[c,s]of o){let{childNodes:f}=O("span",null,s);c.replaceWith(...Array.from(f))}return{ref:e,nodes:o}}))}function Ds(e,{viewport$:t,main$:r}){let n=e.parentElement,o=n.offsetTop-n.parentElement.offsetTop;return G([r,t]).pipe(d(([{offset:i,height:a},{offset:{y:c}}])=>(a=a+Math.min(o,Math.max(0,c-i))-o,{height:a,locked:c>=i+o})),Q((i,a)=>i.height===a.height&&i.locked===a.locked))}function fn(e,n){var o=n,{header$:t}=o,r=hn(o,["header$"]);let i=B(".md-sidebar__scrollwrap",e),{y:a}=Be(i);return I(()=>{let c=new L;return c.pipe(Re(0,fe),me(t)).subscribe({next([{height:s},{height:f}]){i.style.height=`${s-2*a}px`,e.style.top=`${f}px`},complete(){i.style.height="",e.style.top=""}}),c.pipe(Ce(fe),ve(1)).subscribe(()=>{for(let s of W(".md-nav__link--active[href]",e)){let f=ko(s);if(typeof f!="undefined"){let u=s.offsetTop-f.offsetTop,{height:l}=Se(f);f.scrollTo({top:u-l/2})}}}),Ds(e,r).pipe(M(s=>c.next(s)),R(()=>c.complete()),d(s=>N({ref:e},s)))})}function Ui(e,t){if(typeof t!="undefined"){let r=`https://api.github.com/repos/${e}/${t}`;return Ir(Ge(`${r}/releases/latest`).pipe(le(()=>k),d(n=>({version:n.tag_name})),De({})),Ge(r).pipe(le(()=>k),d(n=>({stars:n.stargazers_count,forks:n.forks_count})),De({}))).pipe(d(([n,o])=>N(N({},n),o)))}else{let r=`https://api.github.com/users/${e}`;return Ge(r).pipe(d(n=>({repositories:n.public_repos})),De({}))}}function Vi(e,t){let r=`https://${e}/api/v4/projects/${encodeURIComponent(t)}`;return Ge(r).pipe(le(()=>k),d(({star_count:n,forks_count:o})=>({stars:n,forks:o})),De({}))}function Ni(e){let[t]=e.match(/(git(?:hub|lab))/i)||[];switch(t.toLowerCase()){case"github":let[,r,n]=e.match(/^.+github\.com\/([^/]+)\/?([^/]+)?/i);return Ui(r,n);case"gitlab":let[,o,i]=e.match(/^.+?([^/]*gitlab[^/]+)\/(.+?)\/?$/i);return Vi(o,i);default:return k}}var Ws;function zs(e){return Ws||(Ws=I(()=>{let t=__md_get("__source",sessionStorage);if(t)return C(t);if(ee("consent").length){let n=__md_get("__consent");if(!(n&&n.github))return k}return Ni(e.href).pipe(M(n=>__md_set("__source",n,sessionStorage)))}).pipe(le(()=>k),A(t=>Object.keys(t).length>0),d(t=>({facts:t})),X(1)))}function Di(e){let t=B(":scope > :last-child",e);return I(()=>{let r=new L;return r.subscribe(({facts:n})=>{t.appendChild(ri(n)),t.classList.add("md-source__repository--active")}),zs(e).pipe(M(n=>r.next(n)),R(()=>r.complete()),d(n=>N({ref:e},n)))})}function qs(e,{viewport$:t,header$:r}){return de(document.body).pipe(_(()=>mr(e,{header$:r,viewport$:t})),d(({offset:{y:n}})=>({hidden:n>=10})),J("hidden"))}function Wi(e,t){return I(()=>{let r=new L;return r.subscribe({next({hidden:n}){e.hidden=n},complete(){e.hidden=!1}}),(Z("navigation.tabs.sticky")?C({hidden:!1}):qs(e,t)).pipe(M(n=>r.next(n)),R(()=>r.complete()),d(n=>N({ref:e},n)))})}function Ks(e,{viewport$:t,header$:r,excludedLinks:n}){let o=new Map,i=W("a[href]",e);for(let s of i){if(n!=null&&n.has(s))continue;let f=s.getAttribute("href"),u;if(f.startsWith("#")){let l=decodeURIComponent(s.hash.substring(1));u=ie(`[id="${l}"]`)}else u=ie(`a.pseudo-toc-entry[href=${CSS.escape(f)}]`);if(typeof u!="undefined"){let l=s.closest(".md-nav__link");l!==null&&o.set(l,u)}}let a=r.pipe(J("height"),d(({height:s})=>{let f=_e("main"),u=B(":scope > :first-child",f);return s+.8*(u.offsetTop-f.offsetTop)}),pe());return de(document.body).pipe(J("height"),_(s=>I(()=>{let f=[];return C([...o].reduce((u,[l,p])=>{for(;f.length&&o.get(f[f.length-1]).tagName>=p.tagName;)f.pop();let m=p.offsetTop;for(;!m&&p.parentElement;)p=p.parentElement,m=p.offsetTop;return u.set([...f=[...f,l]].reverse(),m)},new Map))}).pipe(d(f=>new Map([...f].sort(([,u],[,l])=>u-l))),St(a),_(([f,u])=>t.pipe(Nr(([l,p],{offset:{y:m},size:h})=>{let b=m+h.height>=Math.floor(s.height);for(;p.length;){let[,v]=p[0];if(v-u=m&&!b)p=[l.pop(),...p];else break}return[l,p]},[[],[...f]]),Q((l,p)=>l[0]===p[0]&&l[1]===p[1])))))).pipe(d(([s,f])=>({prev:s.map(([u])=>u),next:f.map(([u])=>u)})),q({prev:[],next:[]}),Ne(2,1),d(([s,f])=>s.prev.length{let i=new L,a=o?"md-nav__link--active":"md-nav__link--in-viewport";if(i.subscribe(({prev:s,next:f})=>{for(let[u]of f)u.classList.remove("md-nav__link--passed"),u.classList.remove(a);for(let[u,[l]]of s.entries())l.classList.add("md-nav__link--passed"),l.classList.toggle(a,u===s.length-1)}),Z("toc.follow")&&(o||!Z("toc.integrate"))){let s=!o||Z("toc.integrate");i.pipe(He(1)).subscribe(({prev:f})=>{var m;let u;if(f.length===0&&s&&(u=(m=e.querySelector("a[href='#']"))!=null?m:e),s=!1,f.length!==0&&(u=f[f.length-1][0]),u===void 0||!u.offsetHeight)return;let l=u.parentElement,p=5;for(;l!==null&&l.scrollHeight-p<=l.clientHeight;)l=l.parentElement;if(l!==null&&l!==document.body&&l!==document.documentElement){let h=u.getBoundingClientRect(),b=l.getBoundingClientRect();l.scrollTo({top:l.scrollTop+(h.y-b.height/2-b.y)})}})}o&&Z("navigation.tracking")&&t.pipe(te(i.pipe(ue(1))),J("offset"),He(250),Pe(1),te(n.pipe(Pe(1))),Ot({delay:250}),me(i)).subscribe(([,{prev:s}])=>{let f=Oe(),u=s[s.length-1];if(u&&u.length){let[l]=u,{hash:p}=new URL(l.href);f.hash!==p&&(f.hash=p,history.replaceState({},"",`${f}`))}else f.hash="",history.replaceState({},"",`${f}`)}),Z("toc.sticky")&&de(document.body).pipe(J("width"),He(0)).subscribe(()=>{let s=new Map,f="--md-nav__header-height";for(let u of W(".md-nav__link",e)){let l=u.nextElementSibling;if(!(l instanceof HTMLElement)||l.tagName!=="NAV")continue;let p="",m=NaN,h=l.parentElement.closest("nav");if(h!==null){let b=s.get(h);b!==void 0&&(p=`${b.height} + `,m=b.zindex-1)}isNaN(m)&&(m=100),p+=`${u.offsetHeight}px + 0.625em`,u.classList.add("md-nav__sticky"),u.style.setProperty("--md-nav__sticky-zindex",m.toString()),l.style.setProperty(f,`calc(${p})`),s.set(l,{height:p,zindex:m})}});let c=o?void 0:new Set(W("[data-md-component='toc'] a[href]",e));return Ks(e,{viewport$:t,header$:r,excludedLinks:c}).pipe(M(s=>i.next(s)),R(()=>i.complete()),d(s=>N({ref:e},s)))})}function Bs(e,{viewport$:t,main$:r,target$:n}){let o=t.pipe(d(({offset:{y:a}})=>a),Ne(2,1),d(([a,c])=>a>c&&c>0),Q()),i=r.pipe(d(({active:a})=>a));return G([i,o]).pipe(d(([a,c])=>!(a&&c)),Q(),te(n.pipe(Pe(1))),Vr(!0),Ot({delay:250}),d(a=>({hidden:a})))}function zi(e,{viewport$:t,header$:r,main$:n,target$:o}){let i=new L,a=i.pipe(ue(1));return i.subscribe({next({hidden:c}){e.hidden=c,c?(e.setAttribute("tabindex","-1"),e.blur()):e.removeAttribute("tabindex")},complete(){e.style.top="",e.hidden=!0,e.removeAttribute("tabindex")}}),r.pipe(te(a),J("height")).subscribe(({height:c})=>{e.style.top=`${c+16}px`}),Bs(e,{viewport$:t,main$:n,target$:o}).pipe(M(c=>i.next(c)),R(()=>i.complete()),d(c=>N({ref:e},c)))}function qi({document$:e,tablet$:t}){e.pipe(_(()=>W(".md-toggle--indeterminate, [data-md-state=indeterminate]")),M(r=>{r.indeterminate=!0,r.checked=!1}),oe(r=>w(r,"change").pipe(zr(()=>r.classList.contains("md-toggle--indeterminate")),d(()=>r))),me(t)).subscribe(([r,n])=>{r.classList.remove("md-toggle--indeterminate"),n&&(r.checked=!1)})}function Ys(){return/(iPad|iPhone|iPod)/.test(navigator.userAgent)}function Ki({document$:e}){e.pipe(_(()=>W("[data-md-scrollfix]")),M(t=>t.removeAttribute("data-md-scrollfix")),A(Ys),oe(t=>w(t,"touchstart").pipe(d(()=>t)))).subscribe(t=>{let r=t.scrollTop;r===0?t.scrollTop=1:r+t.offsetHeight===t.scrollHeight&&(t.scrollTop=r-1)})}function Bi({viewport$:e,tablet$:t}){G([ht("search"),t]).pipe(d(([r,n])=>r&&!n),_(r=>C(r).pipe(ke(r?400:100))),me(e)).subscribe(([r,{offset:{y:n}}])=>{if(r)document.body.setAttribute("data-md-scrolllock",""),document.body.style.top=`-${n}px`;else{let o=-1*parseInt(document.body.style.top,10);document.body.removeAttribute("data-md-scrolllock"),document.body.style.top="",o&&window.scrollTo(0,o)}})}Object.entries||(Object.entries=function(e){let t=[];for(let r of Object.keys(e))t.push([r,e[r]]);return t});Object.values||(Object.values=function(e){let t=[];for(let r of Object.keys(e))t.push(e[r]);return t});typeof Element!="undefined"&&(Element.prototype.scrollTo||(Element.prototype.scrollTo=function(e,t){typeof e=="object"?(this.scrollLeft=e.left,this.scrollTop=e.top):(this.scrollLeft=e,this.scrollTop=t)}),Element.prototype.replaceWith||(Element.prototype.replaceWith=function(...e){let t=this.parentNode;if(t){e.length===0&&t.removeChild(this);for(let r=e.length-1;r>=0;r--){let n=e[r];typeof n!="object"?n=document.createTextNode(n):n.parentNode&&n.parentNode.removeChild(n),r?t.insertBefore(this.previousSibling,n):t.replaceChild(n,this)}}}));document.documentElement.classList.remove("no-js");document.documentElement.classList.add("js");var nt=So(),vr=jo(),rt=Do(),un=Io(),ge=Jo(),gr=Yr("(min-width: 960px)"),Gi=Yr("(min-width: 1220px)"),Ji=Wo(),Gs=ce(),pn=new L;ki({alert$:pn});Z("navigation.instant")&&Pi({document$:nt,location$:vr,viewport$:ge});var Yi;((Yi=Gs.version)==null?void 0:Yi.provider)==="mike"&&ji({document$:nt});P(vr,rt).pipe(ke(125)).subscribe(()=>{Ye("drawer",!1),Ye("search",!1)});un.pipe(A(({mode:e})=>e==="global")).subscribe(e=>{switch(e.type){case"p":case",":let t=ie("[href][rel=prev]");typeof t!="undefined"&&t.click();break;case"n":case".":let r=ie("[href][rel=next]");typeof r!="undefined"&&r.click();break}});qi({document$:nt,tablet$:gr});Ki({document$:nt});Bi({viewport$:ge,tablet$:gr});var We=xi(_e("header"),{viewport$:ge}),br=nt.pipe(d(()=>_e("main")),_(e=>Si(e,{viewport$:ge,header$:We})),X(1)),Js=P(...ee("consent").map(e=>Xo(e,{target$:rt})),...ee("dialog").map(e=>yi(e,{alert$:pn})),...ee("header").map(e=>wi(e,{viewport$:ge,header$:We,main$:br})),...ee("palette").map(e=>Oi(e)),...ee("search").map(e=>Hi(e,{keyboard$:un})),...ee("source").map(e=>Di(e))),Qs=I(()=>P(...ee("announce").map(e=>Qo(e)),...ee("content").map(e=>gi(e,{viewport$:ge,target$:rt,print$:Ji})),...ee("content").map(e=>Z("search.highlight")?Fi(e,{location$:vr}):k),...ee("header-title").map(e=>Ei(e,{viewport$:ge,header$:We})),...ee("sidebar").map(e=>e.getAttribute("data-md-type")==="navigation"?Gr(Gi,()=>fn(e,{viewport$:ge,header$:We,main$:br})):Gr(gr,()=>fn(e,{viewport$:ge,header$:We,main$:br}))),...ee("tabs").map(e=>Wi(e,{viewport$:ge,header$:We})),...ee("toc").map(e=>ln(e,{viewport$:ge,header$:We,target$:rt,localToc:!0})),...ee("sidebar").filter(e=>e.getAttribute("data-md-type")==="navigation").map(e=>ln(e,{viewport$:ge,header$:We,target$:rt,localToc:!1})),...ee("top").map(e=>zi(e,{viewport$:ge,header$:We,main$:br,target$:rt})))),Qi=nt.pipe(_(()=>Qs),tt(Js),X(1));Qi.subscribe();window.document$=nt;window.location$=vr;window.target$=rt;window.keyboard$=un;window.viewport$=ge;window.tablet$=gr;window.screen$=Gi;window.print$=Ji;window.alert$=pn;window.component$=Qi;})();
+//# sourceMappingURL=sphinx_immaterial_theme.f9d9eeeb247ace16c.min.js.map
diff --git a/_static/sphinx_immaterial_theme.1b5b7a2d5891aec19.min.js.map b/_static/sphinx_immaterial_theme.f9d9eeeb247ace16c.min.js.map
similarity index 54%
rename from _static/sphinx_immaterial_theme.1b5b7a2d5891aec19.min.js.map
rename to _static/sphinx_immaterial_theme.f9d9eeeb247ace16c.min.js.map
index 48e2a90..db7d206 100644
--- a/_static/sphinx_immaterial_theme.1b5b7a2d5891aec19.min.js.map
+++ b/_static/sphinx_immaterial_theme.f9d9eeeb247ace16c.min.js.map
@@ -1 +1 @@
-{"version": 3, "sections": [{"offset": {"line": 0, "column": 0}, "map": {"version": 3, "sources": ["node_modules/focus-visible/dist/focus-visible.js", "node_modules/url-polyfill/url-polyfill.js", "node_modules/tslib/tslib.js", "node_modules/clipboard/dist/clipboard.js", "node_modules/escape-html/index.js", "node_modules/array-flat-polyfill/index.mjs", "src/assets/javascripts/bundle.ts", "node_modules/unfetch/polyfill/index.js", "node_modules/tslib/modules/index.js", "node_modules/rxjs/src/internal/util/isFunction.ts", "node_modules/rxjs/src/internal/util/createErrorClass.ts", "node_modules/rxjs/src/internal/util/UnsubscriptionError.ts", "node_modules/rxjs/src/internal/util/arrRemove.ts", "node_modules/rxjs/src/internal/Subscription.ts", "node_modules/rxjs/src/internal/config.ts", "node_modules/rxjs/src/internal/scheduler/timeoutProvider.ts", "node_modules/rxjs/src/internal/util/reportUnhandledError.ts", "node_modules/rxjs/src/internal/util/noop.ts", "node_modules/rxjs/src/internal/NotificationFactories.ts", "node_modules/rxjs/src/internal/util/errorContext.ts", "node_modules/rxjs/src/internal/Subscriber.ts", "node_modules/rxjs/src/internal/symbol/observable.ts", "node_modules/rxjs/src/internal/util/identity.ts", "node_modules/rxjs/src/internal/util/pipe.ts", "node_modules/rxjs/src/internal/Observable.ts", "node_modules/rxjs/src/internal/util/lift.ts", "node_modules/rxjs/src/internal/operators/OperatorSubscriber.ts", "node_modules/rxjs/src/internal/scheduler/animationFrameProvider.ts", "node_modules/rxjs/src/internal/util/ObjectUnsubscribedError.ts", "node_modules/rxjs/src/internal/Subject.ts", "node_modules/rxjs/src/internal/scheduler/dateTimestampProvider.ts", "node_modules/rxjs/src/internal/ReplaySubject.ts", "node_modules/rxjs/src/internal/scheduler/Action.ts", "node_modules/rxjs/src/internal/scheduler/intervalProvider.ts", "node_modules/rxjs/src/internal/scheduler/AsyncAction.ts", "node_modules/rxjs/src/internal/Scheduler.ts", "node_modules/rxjs/src/internal/scheduler/AsyncScheduler.ts", "node_modules/rxjs/src/internal/scheduler/async.ts", "node_modules/rxjs/src/internal/scheduler/AnimationFrameAction.ts", "node_modules/rxjs/src/internal/scheduler/AnimationFrameScheduler.ts", "node_modules/rxjs/src/internal/scheduler/animationFrame.ts", "node_modules/rxjs/src/internal/observable/empty.ts", "node_modules/rxjs/src/internal/util/isScheduler.ts", "node_modules/rxjs/src/internal/util/args.ts", "node_modules/rxjs/src/internal/util/isArrayLike.ts", "node_modules/rxjs/src/internal/util/isPromise.ts", "node_modules/rxjs/src/internal/util/isInteropObservable.ts", "node_modules/rxjs/src/internal/util/isAsyncIterable.ts", "node_modules/rxjs/src/internal/util/throwUnobservableError.ts", "node_modules/rxjs/src/internal/symbol/iterator.ts", "node_modules/rxjs/src/internal/util/isIterable.ts", "node_modules/rxjs/src/internal/util/isReadableStreamLike.ts", "node_modules/rxjs/src/internal/observable/innerFrom.ts", "node_modules/rxjs/src/internal/util/executeSchedule.ts", "node_modules/rxjs/src/internal/operators/observeOn.ts", "node_modules/rxjs/src/internal/operators/subscribeOn.ts", "node_modules/rxjs/src/internal/scheduled/scheduleObservable.ts", "node_modules/rxjs/src/internal/scheduled/schedulePromise.ts", "node_modules/rxjs/src/internal/scheduled/scheduleArray.ts", "node_modules/rxjs/src/internal/scheduled/scheduleIterable.ts", "node_modules/rxjs/src/internal/scheduled/scheduleAsyncIterable.ts", "node_modules/rxjs/src/internal/scheduled/scheduleReadableStreamLike.ts", "node_modules/rxjs/src/internal/scheduled/scheduled.ts", "node_modules/rxjs/src/internal/observable/from.ts", "node_modules/rxjs/src/internal/observable/of.ts", "node_modules/rxjs/src/internal/observable/throwError.ts", "node_modules/rxjs/src/internal/util/isDate.ts", "node_modules/rxjs/src/internal/operators/map.ts", "node_modules/rxjs/src/internal/util/mapOneOrManyArgs.ts", "node_modules/rxjs/src/internal/util/argsArgArrayOrObject.ts", "node_modules/rxjs/src/internal/util/createObject.ts", "node_modules/rxjs/src/internal/observable/combineLatest.ts", "node_modules/rxjs/src/internal/operators/mergeInternals.ts", "node_modules/rxjs/src/internal/operators/mergeMap.ts", "node_modules/rxjs/src/internal/operators/mergeAll.ts", "node_modules/rxjs/src/internal/operators/concatAll.ts", "node_modules/rxjs/src/internal/observable/concat.ts", "node_modules/rxjs/src/internal/observable/defer.ts", "node_modules/rxjs/src/internal/observable/fromEvent.ts", "node_modules/rxjs/src/internal/observable/fromEventPattern.ts", "node_modules/rxjs/src/internal/observable/timer.ts", "node_modules/rxjs/src/internal/observable/interval.ts", "node_modules/rxjs/src/internal/observable/merge.ts", "node_modules/rxjs/src/internal/observable/never.ts", "node_modules/rxjs/src/internal/util/argsOrArgArray.ts", "node_modules/rxjs/src/internal/operators/filter.ts", "node_modules/rxjs/src/internal/observable/zip.ts", "node_modules/rxjs/src/internal/operators/audit.ts", "node_modules/rxjs/src/internal/operators/auditTime.ts", "node_modules/rxjs/src/internal/operators/bufferCount.ts", "node_modules/rxjs/src/internal/operators/catchError.ts", "node_modules/rxjs/src/internal/operators/scanInternals.ts", "node_modules/rxjs/src/internal/operators/combineLatest.ts", "node_modules/rxjs/src/internal/operators/combineLatestWith.ts", "node_modules/rxjs/src/internal/operators/concatMap.ts", "node_modules/rxjs/src/internal/operators/debounce.ts", "node_modules/rxjs/src/internal/operators/debounceTime.ts", "node_modules/rxjs/src/internal/operators/defaultIfEmpty.ts", "node_modules/rxjs/src/internal/operators/take.ts", "node_modules/rxjs/src/internal/operators/ignoreElements.ts", "node_modules/rxjs/src/internal/operators/mapTo.ts", "node_modules/rxjs/src/internal/operators/delayWhen.ts", "node_modules/rxjs/src/internal/operators/delay.ts", "node_modules/rxjs/src/internal/operators/distinctUntilChanged.ts", "node_modules/rxjs/src/internal/operators/distinctUntilKeyChanged.ts", "node_modules/rxjs/src/internal/operators/endWith.ts", "node_modules/rxjs/src/internal/operators/finalize.ts", "node_modules/rxjs/src/internal/operators/takeLast.ts", "node_modules/rxjs/src/internal/operators/merge.ts", "node_modules/rxjs/src/internal/operators/mergeWith.ts", "node_modules/rxjs/src/internal/operators/repeat.ts", "node_modules/rxjs/src/internal/operators/sample.ts", "node_modules/rxjs/src/internal/operators/scan.ts", "node_modules/rxjs/src/internal/operators/share.ts", "node_modules/rxjs/src/internal/operators/shareReplay.ts", "node_modules/rxjs/src/internal/operators/skip.ts", "node_modules/rxjs/src/internal/operators/skipUntil.ts", "node_modules/rxjs/src/internal/operators/startWith.ts", "node_modules/rxjs/src/internal/operators/switchMap.ts", "node_modules/rxjs/src/internal/operators/takeUntil.ts", "node_modules/rxjs/src/internal/operators/takeWhile.ts", "node_modules/rxjs/src/internal/operators/tap.ts", "node_modules/rxjs/src/internal/operators/throttle.ts", "node_modules/rxjs/src/internal/operators/throttleTime.ts", "node_modules/rxjs/src/internal/operators/withLatestFrom.ts", "src/assets/javascripts/browser/document/index.ts", "src/assets/javascripts/browser/element/_/index.ts", "src/assets/javascripts/browser/element/focus/index.ts", "src/assets/javascripts/browser/element/offset/_/index.ts", "src/assets/javascripts/browser/element/offset/content/index.ts", "node_modules/resize-observer-polyfill/dist/ResizeObserver.es.js", "src/assets/javascripts/browser/element/size/_/index.ts", "src/assets/javascripts/browser/element/size/content/index.ts", "src/assets/javascripts/browser/element/visibility/index.ts", "src/assets/javascripts/browser/toggle/index.ts", "src/assets/javascripts/browser/keyboard/index.ts", "src/assets/javascripts/browser/location/_/index.ts", "src/assets/javascripts/utilities/h/index.ts", "src/assets/javascripts/utilities/string/index.ts", "src/assets/javascripts/browser/location/hash/index.ts", "src/assets/javascripts/browser/media/index.ts", "src/assets/javascripts/browser/request/index.ts", "src/assets/javascripts/browser/script/index.ts", "src/assets/javascripts/browser/viewport/offset/index.ts", "src/assets/javascripts/browser/viewport/size/index.ts", "src/assets/javascripts/browser/viewport/_/index.ts", "src/assets/javascripts/browser/viewport/at/index.ts", "src/assets/javascripts/_/index.ts", "src/assets/javascripts/components/_/index.ts", "src/assets/javascripts/components/announce/index.ts", "src/assets/javascripts/components/consent/index.ts", "src/assets/javascripts/components/content/code/_/index.ts", "src/assets/javascripts/templates/tooltip/index.tsx", "src/assets/javascripts/templates/annotation/index.tsx", "src/assets/javascripts/templates/clipboard/index.tsx", "src/assets/javascripts/templates/search/index.tsx", "src/assets/javascripts/templates/source/index.tsx", "src/assets/javascripts/templates/tabbed/index.tsx", "src/assets/javascripts/templates/table/index.tsx", "src/assets/javascripts/templates/version/index.tsx", "src/assets/javascripts/components/content/annotation/_/index.ts", "src/assets/javascripts/components/content/annotation/list/index.ts", "src/assets/javascripts/components/content/code/mermaid/index.ts", "src/assets/javascripts/components/content/details/index.ts", "src/assets/javascripts/components/content/table/index.ts", "src/assets/javascripts/components/content/tabs/index.ts", "src/assets/javascripts/components/content/_/index.ts", "src/assets/javascripts/components/dialog/index.ts", "src/assets/javascripts/components/header/_/index.ts", "src/assets/javascripts/components/header/title/index.ts", "src/assets/javascripts/components/main/index.ts", "src/assets/javascripts/components/palette/index.ts", "src/assets/javascripts/components/search/query/index.ts", "src/assets/javascripts/sphinx_search.ts", "src/assets/javascripts/components/search/result/index.ts", "src/assets/javascripts/components/search/share/index.ts", "src/assets/javascripts/components/search/suggest/index.ts", "src/assets/javascripts/components/search/_/index.ts", "src/assets/javascripts/integrations/clipboard/index.ts", "src/assets/javascripts/integrations/sitemap/index.ts", "src/assets/javascripts/integrations/instant/index.ts", "src/assets/javascripts/integrations/search/highlighter/index.ts", "src/assets/javascripts/integrations/version/index.ts", "src/assets/javascripts/components/search/highlight/index.ts", "src/assets/javascripts/components/sidebar/index.ts", "src/assets/javascripts/components/source/facts/github/index.ts", "src/assets/javascripts/components/source/facts/gitlab/index.ts", "src/assets/javascripts/components/source/facts/_/index.ts", "src/assets/javascripts/components/source/_/index.ts", "src/assets/javascripts/components/tabs/index.ts", "src/assets/javascripts/components/toc/index.ts", "src/assets/javascripts/components/top/index.ts", "src/assets/javascripts/patches/indeterminate/index.ts", "src/assets/javascripts/patches/scrollfix/index.ts", "src/assets/javascripts/patches/scrolllock/index.ts", "src/assets/javascripts/polyfills/index.ts"], "sourceRoot": "../../../..", "sourcesContent": ["(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' ? factory() :\n  typeof define === 'function' && define.amd ? define(factory) :\n  (factory());\n}(this, (function () { 'use strict';\n\n  /**\n   * Applies the :focus-visible polyfill at the given scope.\n   * A scope in this case is either the top-level Document or a Shadow Root.\n   *\n   * @param {(Document|ShadowRoot)} scope\n   * @see https://github.com/WICG/focus-visible\n   */\n  function applyFocusVisiblePolyfill(scope) {\n    var hadKeyboardEvent = true;\n    var hadFocusVisibleRecently = false;\n    var hadFocusVisibleRecentlyTimeout = null;\n\n    var inputTypesAllowlist = {\n      text: true,\n      search: true,\n      url: true,\n      tel: true,\n      email: true,\n      password: true,\n      number: true,\n      date: true,\n      month: true,\n      week: true,\n      time: true,\n      datetime: true,\n      'datetime-local': true\n    };\n\n    /**\n     * Helper function for legacy browsers and iframes which sometimes focus\n     * elements like document, body, and non-interactive SVG.\n     * @param {Element} el\n     */\n    function isValidFocusTarget(el) {\n      if (\n        el &&\n        el !== document &&\n        el.nodeName !== 'HTML' &&\n        el.nodeName !== 'BODY' &&\n        'classList' in el &&\n        'contains' in el.classList\n      ) {\n        return true;\n      }\n      return false;\n    }\n\n    /**\n     * Computes whether the given element should automatically trigger the\n     * `focus-visible` class being added, i.e. whether it should always match\n     * `:focus-visible` when focused.\n     * @param {Element} el\n     * @return {boolean}\n     */\n    function focusTriggersKeyboardModality(el) {\n      var type = el.type;\n      var tagName = el.tagName;\n\n      if (tagName === 'INPUT' && inputTypesAllowlist[type] && !el.readOnly) {\n        return true;\n      }\n\n      if (tagName === 'TEXTAREA' && !el.readOnly) {\n        return true;\n      }\n\n      if (el.isContentEditable) {\n        return true;\n      }\n\n      return false;\n    }\n\n    /**\n     * Add the `focus-visible` class to the given element if it was not added by\n     * the author.\n     * @param {Element} el\n     */\n    function addFocusVisibleClass(el) {\n      if (el.classList.contains('focus-visible')) {\n        return;\n      }\n      el.classList.add('focus-visible');\n      el.setAttribute('data-focus-visible-added', '');\n    }\n\n    /**\n     * Remove the `focus-visible` class from the given element if it was not\n     * originally added by the author.\n     * @param {Element} el\n     */\n    function removeFocusVisibleClass(el) {\n      if (!el.hasAttribute('data-focus-visible-added')) {\n        return;\n      }\n      el.classList.remove('focus-visible');\n      el.removeAttribute('data-focus-visible-added');\n    }\n\n    /**\n     * If the most recent user interaction was via the keyboard;\n     * and the key press did not include a meta, alt/option, or control key;\n     * then the modality is keyboard. Otherwise, the modality is not keyboard.\n     * Apply `focus-visible` to any current active element and keep track\n     * of our keyboard modality state with `hadKeyboardEvent`.\n     * @param {KeyboardEvent} e\n     */\n    function onKeyDown(e) {\n      if (e.metaKey || e.altKey || e.ctrlKey) {\n        return;\n      }\n\n      if (isValidFocusTarget(scope.activeElement)) {\n        addFocusVisibleClass(scope.activeElement);\n      }\n\n      hadKeyboardEvent = true;\n    }\n\n    /**\n     * If at any point a user clicks with a pointing device, ensure that we change\n     * the modality away from keyboard.\n     * This avoids the situation where a user presses a key on an already focused\n     * element, and then clicks on a different element, focusing it with a\n     * pointing device, while we still think we're in keyboard modality.\n     * @param {Event} e\n     */\n    function onPointerDown(e) {\n      hadKeyboardEvent = false;\n    }\n\n    /**\n     * On `focus`, add the `focus-visible` class to the target if:\n     * - the target received focus as a result of keyboard navigation, or\n     * - the event target is an element that will likely require interaction\n     *   via the keyboard (e.g. a text box)\n     * @param {Event} e\n     */\n    function onFocus(e) {\n      // Prevent IE from focusing the document or HTML element.\n      if (!isValidFocusTarget(e.target)) {\n        return;\n      }\n\n      if (hadKeyboardEvent || focusTriggersKeyboardModality(e.target)) {\n        addFocusVisibleClass(e.target);\n      }\n    }\n\n    /**\n     * On `blur`, remove the `focus-visible` class from the target.\n     * @param {Event} e\n     */\n    function onBlur(e) {\n      if (!isValidFocusTarget(e.target)) {\n        return;\n      }\n\n      if (\n        e.target.classList.contains('focus-visible') ||\n        e.target.hasAttribute('data-focus-visible-added')\n      ) {\n        // To detect a tab/window switch, we look for a blur event followed\n        // rapidly by a visibility change.\n        // If we don't see a visibility change within 100ms, it's probably a\n        // regular focus change.\n        hadFocusVisibleRecently = true;\n        window.clearTimeout(hadFocusVisibleRecentlyTimeout);\n        hadFocusVisibleRecentlyTimeout = window.setTimeout(function() {\n          hadFocusVisibleRecently = false;\n        }, 100);\n        removeFocusVisibleClass(e.target);\n      }\n    }\n\n    /**\n     * If the user changes tabs, keep track of whether or not the previously\n     * focused element had .focus-visible.\n     * @param {Event} e\n     */\n    function onVisibilityChange(e) {\n      if (document.visibilityState === 'hidden') {\n        // If the tab becomes active again, the browser will handle calling focus\n        // on the element (Safari actually calls it twice).\n        // If this tab change caused a blur on an element with focus-visible,\n        // re-apply the class when the user switches back to the tab.\n        if (hadFocusVisibleRecently) {\n          hadKeyboardEvent = true;\n        }\n        addInitialPointerMoveListeners();\n      }\n    }\n\n    /**\n     * Add a group of listeners to detect usage of any pointing devices.\n     * These listeners will be added when the polyfill first loads, and anytime\n     * the window is blurred, so that they are active when the window regains\n     * focus.\n     */\n    function addInitialPointerMoveListeners() {\n      document.addEventListener('mousemove', onInitialPointerMove);\n      document.addEventListener('mousedown', onInitialPointerMove);\n      document.addEventListener('mouseup', onInitialPointerMove);\n      document.addEventListener('pointermove', onInitialPointerMove);\n      document.addEventListener('pointerdown', onInitialPointerMove);\n      document.addEventListener('pointerup', onInitialPointerMove);\n      document.addEventListener('touchmove', onInitialPointerMove);\n      document.addEventListener('touchstart', onInitialPointerMove);\n      document.addEventListener('touchend', onInitialPointerMove);\n    }\n\n    function removeInitialPointerMoveListeners() {\n      document.removeEventListener('mousemove', onInitialPointerMove);\n      document.removeEventListener('mousedown', onInitialPointerMove);\n      document.removeEventListener('mouseup', onInitialPointerMove);\n      document.removeEventListener('pointermove', onInitialPointerMove);\n      document.removeEventListener('pointerdown', onInitialPointerMove);\n      document.removeEventListener('pointerup', onInitialPointerMove);\n      document.removeEventListener('touchmove', onInitialPointerMove);\n      document.removeEventListener('touchstart', onInitialPointerMove);\n      document.removeEventListener('touchend', onInitialPointerMove);\n    }\n\n    /**\n     * When the polfyill first loads, assume the user is in keyboard modality.\n     * If any event is received from a pointing device (e.g. mouse, pointer,\n     * touch), turn off keyboard modality.\n     * This accounts for situations where focus enters the page from the URL bar.\n     * @param {Event} e\n     */\n    function onInitialPointerMove(e) {\n      // Work around a Safari quirk that fires a mousemove on  whenever the\n      // window blurs, even if you're tabbing out of the page. \u00af\\_(\u30c4)_/\u00af\n      if (e.target.nodeName && e.target.nodeName.toLowerCase() === 'html') {\n        return;\n      }\n\n      hadKeyboardEvent = false;\n      removeInitialPointerMoveListeners();\n    }\n\n    // For some kinds of state, we are interested in changes at the global scope\n    // only. For example, global pointer input, global key presses and global\n    // visibility change should affect the state at every scope:\n    document.addEventListener('keydown', onKeyDown, true);\n    document.addEventListener('mousedown', onPointerDown, true);\n    document.addEventListener('pointerdown', onPointerDown, true);\n    document.addEventListener('touchstart', onPointerDown, true);\n    document.addEventListener('visibilitychange', onVisibilityChange, true);\n\n    addInitialPointerMoveListeners();\n\n    // For focus and blur, we specifically care about state changes in the local\n    // scope. This is because focus / blur events that originate from within a\n    // shadow root are not re-dispatched from the host element if it was already\n    // the active element in its own scope:\n    scope.addEventListener('focus', onFocus, true);\n    scope.addEventListener('blur', onBlur, true);\n\n    // We detect that a node is a ShadowRoot by ensuring that it is a\n    // DocumentFragment and also has a host property. This check covers native\n    // implementation and polyfill implementation transparently. If we only cared\n    // about the native implementation, we could just check if the scope was\n    // an instance of a ShadowRoot.\n    if (scope.nodeType === Node.DOCUMENT_FRAGMENT_NODE && scope.host) {\n      // Since a ShadowRoot is a special kind of DocumentFragment, it does not\n      // have a root element to add a class to. So, we add this attribute to the\n      // host element instead:\n      scope.host.setAttribute('data-js-focus-visible', '');\n    } else if (scope.nodeType === Node.DOCUMENT_NODE) {\n      document.documentElement.classList.add('js-focus-visible');\n      document.documentElement.setAttribute('data-js-focus-visible', '');\n    }\n  }\n\n  // It is important to wrap all references to global window and document in\n  // these checks to support server-side rendering use cases\n  // @see https://github.com/WICG/focus-visible/issues/199\n  if (typeof window !== 'undefined' && typeof document !== 'undefined') {\n    // Make the polyfill helper globally available. This can be used as a signal\n    // to interested libraries that wish to coordinate with the polyfill for e.g.,\n    // applying the polyfill to a shadow root:\n    window.applyFocusVisiblePolyfill = applyFocusVisiblePolyfill;\n\n    // Notify interested libraries of the polyfill's presence, in case the\n    // polyfill was loaded lazily:\n    var event;\n\n    try {\n      event = new CustomEvent('focus-visible-polyfill-ready');\n    } catch (error) {\n      // IE11 does not support using CustomEvent as a constructor directly:\n      event = document.createEvent('CustomEvent');\n      event.initCustomEvent('focus-visible-polyfill-ready', false, false, {});\n    }\n\n    window.dispatchEvent(event);\n  }\n\n  if (typeof document !== 'undefined') {\n    // Apply the polyfill to the global document, so that no JavaScript\n    // coordination is required to use the polyfill in the top-level document:\n    applyFocusVisiblePolyfill(document);\n  }\n\n})));\n", "(function(global) {\r\n  /**\r\n   * Polyfill URLSearchParams\r\n   *\r\n   * Inspired from : https://github.com/WebReflection/url-search-params/blob/master/src/url-search-params.js\r\n   */\r\n\r\n  var checkIfIteratorIsSupported = function() {\r\n    try {\r\n      return !!Symbol.iterator;\r\n    } catch (error) {\r\n      return false;\r\n    }\r\n  };\r\n\r\n\r\n  var iteratorSupported = checkIfIteratorIsSupported();\r\n\r\n  var createIterator = function(items) {\r\n    var iterator = {\r\n      next: function() {\r\n        var value = items.shift();\r\n        return { done: value === void 0, value: value };\r\n      }\r\n    };\r\n\r\n    if (iteratorSupported) {\r\n      iterator[Symbol.iterator] = function() {\r\n        return iterator;\r\n      };\r\n    }\r\n\r\n    return iterator;\r\n  };\r\n\r\n  /**\r\n   * Search param name and values should be encoded according to https://url.spec.whatwg.org/#urlencoded-serializing\r\n   * encodeURIComponent() produces the same result except encoding spaces as `%20` instead of `+`.\r\n   */\r\n  var serializeParam = function(value) {\r\n    return encodeURIComponent(value).replace(/%20/g, '+');\r\n  };\r\n\r\n  var deserializeParam = function(value) {\r\n    return decodeURIComponent(String(value).replace(/\\+/g, ' '));\r\n  };\r\n\r\n  var polyfillURLSearchParams = function() {\r\n\r\n    var URLSearchParams = function(searchString) {\r\n      Object.defineProperty(this, '_entries', { writable: true, value: {} });\r\n      var typeofSearchString = typeof searchString;\r\n\r\n      if (typeofSearchString === 'undefined') {\r\n        // do nothing\r\n      } else if (typeofSearchString === 'string') {\r\n        if (searchString !== '') {\r\n          this._fromString(searchString);\r\n        }\r\n      } else if (searchString instanceof URLSearchParams) {\r\n        var _this = this;\r\n        searchString.forEach(function(value, name) {\r\n          _this.append(name, value);\r\n        });\r\n      } else if ((searchString !== null) && (typeofSearchString === 'object')) {\r\n        if (Object.prototype.toString.call(searchString) === '[object Array]') {\r\n          for (var i = 0; i < searchString.length; i++) {\r\n            var entry = searchString[i];\r\n            if ((Object.prototype.toString.call(entry) === '[object Array]') || (entry.length !== 2)) {\r\n              this.append(entry[0], entry[1]);\r\n            } else {\r\n              throw new TypeError('Expected [string, any] as entry at index ' + i + ' of URLSearchParams\\'s input');\r\n            }\r\n          }\r\n        } else {\r\n          for (var key in searchString) {\r\n            if (searchString.hasOwnProperty(key)) {\r\n              this.append(key, searchString[key]);\r\n            }\r\n          }\r\n        }\r\n      } else {\r\n        throw new TypeError('Unsupported input\\'s type for URLSearchParams');\r\n      }\r\n    };\r\n\r\n    var proto = URLSearchParams.prototype;\r\n\r\n    proto.append = function(name, value) {\r\n      if (name in this._entries) {\r\n        this._entries[name].push(String(value));\r\n      } else {\r\n        this._entries[name] = [String(value)];\r\n      }\r\n    };\r\n\r\n    proto.delete = function(name) {\r\n      delete this._entries[name];\r\n    };\r\n\r\n    proto.get = function(name) {\r\n      return (name in this._entries) ? this._entries[name][0] : null;\r\n    };\r\n\r\n    proto.getAll = function(name) {\r\n      return (name in this._entries) ? this._entries[name].slice(0) : [];\r\n    };\r\n\r\n    proto.has = function(name) {\r\n      return (name in this._entries);\r\n    };\r\n\r\n    proto.set = function(name, value) {\r\n      this._entries[name] = [String(value)];\r\n    };\r\n\r\n    proto.forEach = function(callback, thisArg) {\r\n      var entries;\r\n      for (var name in this._entries) {\r\n        if (this._entries.hasOwnProperty(name)) {\r\n          entries = this._entries[name];\r\n          for (var i = 0; i < entries.length; i++) {\r\n            callback.call(thisArg, entries[i], name, this);\r\n          }\r\n        }\r\n      }\r\n    };\r\n\r\n    proto.keys = function() {\r\n      var items = [];\r\n      this.forEach(function(value, name) {\r\n        items.push(name);\r\n      });\r\n      return createIterator(items);\r\n    };\r\n\r\n    proto.values = function() {\r\n      var items = [];\r\n      this.forEach(function(value) {\r\n        items.push(value);\r\n      });\r\n      return createIterator(items);\r\n    };\r\n\r\n    proto.entries = function() {\r\n      var items = [];\r\n      this.forEach(function(value, name) {\r\n        items.push([name, value]);\r\n      });\r\n      return createIterator(items);\r\n    };\r\n\r\n    if (iteratorSupported) {\r\n      proto[Symbol.iterator] = proto.entries;\r\n    }\r\n\r\n    proto.toString = function() {\r\n      var searchArray = [];\r\n      this.forEach(function(value, name) {\r\n        searchArray.push(serializeParam(name) + '=' + serializeParam(value));\r\n      });\r\n      return searchArray.join('&');\r\n    };\r\n\r\n\r\n    global.URLSearchParams = URLSearchParams;\r\n  };\r\n\r\n  var checkIfURLSearchParamsSupported = function() {\r\n    try {\r\n      var URLSearchParams = global.URLSearchParams;\r\n\r\n      return (\r\n        (new URLSearchParams('?a=1').toString() === 'a=1') &&\r\n        (typeof URLSearchParams.prototype.set === 'function') &&\r\n        (typeof URLSearchParams.prototype.entries === 'function')\r\n      );\r\n    } catch (e) {\r\n      return false;\r\n    }\r\n  };\r\n\r\n  if (!checkIfURLSearchParamsSupported()) {\r\n    polyfillURLSearchParams();\r\n  }\r\n\r\n  var proto = global.URLSearchParams.prototype;\r\n\r\n  if (typeof proto.sort !== 'function') {\r\n    proto.sort = function() {\r\n      var _this = this;\r\n      var items = [];\r\n      this.forEach(function(value, name) {\r\n        items.push([name, value]);\r\n        if (!_this._entries) {\r\n          _this.delete(name);\r\n        }\r\n      });\r\n      items.sort(function(a, b) {\r\n        if (a[0] < b[0]) {\r\n          return -1;\r\n        } else if (a[0] > b[0]) {\r\n          return +1;\r\n        } else {\r\n          return 0;\r\n        }\r\n      });\r\n      if (_this._entries) { // force reset because IE keeps keys index\r\n        _this._entries = {};\r\n      }\r\n      for (var i = 0; i < items.length; i++) {\r\n        this.append(items[i][0], items[i][1]);\r\n      }\r\n    };\r\n  }\r\n\r\n  if (typeof proto._fromString !== 'function') {\r\n    Object.defineProperty(proto, '_fromString', {\r\n      enumerable: false,\r\n      configurable: false,\r\n      writable: false,\r\n      value: function(searchString) {\r\n        if (this._entries) {\r\n          this._entries = {};\r\n        } else {\r\n          var keys = [];\r\n          this.forEach(function(value, name) {\r\n            keys.push(name);\r\n          });\r\n          for (var i = 0; i < keys.length; i++) {\r\n            this.delete(keys[i]);\r\n          }\r\n        }\r\n\r\n        searchString = searchString.replace(/^\\?/, '');\r\n        var attributes = searchString.split('&');\r\n        var attribute;\r\n        for (var i = 0; i < attributes.length; i++) {\r\n          attribute = attributes[i].split('=');\r\n          this.append(\r\n            deserializeParam(attribute[0]),\r\n            (attribute.length > 1) ? deserializeParam(attribute[1]) : ''\r\n          );\r\n        }\r\n      }\r\n    });\r\n  }\r\n\r\n  // HTMLAnchorElement\r\n\r\n})(\r\n  (typeof global !== 'undefined') ? global\r\n    : ((typeof window !== 'undefined') ? window\r\n    : ((typeof self !== 'undefined') ? self : this))\r\n);\r\n\r\n(function(global) {\r\n  /**\r\n   * Polyfill URL\r\n   *\r\n   * Inspired from : https://github.com/arv/DOM-URL-Polyfill/blob/master/src/url.js\r\n   */\r\n\r\n  var checkIfURLIsSupported = function() {\r\n    try {\r\n      var u = new global.URL('b', 'http://a');\r\n      u.pathname = 'c d';\r\n      return (u.href === 'http://a/c%20d') && u.searchParams;\r\n    } catch (e) {\r\n      return false;\r\n    }\r\n  };\r\n\r\n\r\n  var polyfillURL = function() {\r\n    var _URL = global.URL;\r\n\r\n    var URL = function(url, base) {\r\n      if (typeof url !== 'string') url = String(url);\r\n      if (base && typeof base !== 'string') base = String(base);\r\n\r\n      // Only create another document if the base is different from current location.\r\n      var doc = document, baseElement;\r\n      if (base && (global.location === void 0 || base !== global.location.href)) {\r\n        base = base.toLowerCase();\r\n        doc = document.implementation.createHTMLDocument('');\r\n        baseElement = doc.createElement('base');\r\n        baseElement.href = base;\r\n        doc.head.appendChild(baseElement);\r\n        try {\r\n          if (baseElement.href.indexOf(base) !== 0) throw new Error(baseElement.href);\r\n        } catch (err) {\r\n          throw new Error('URL unable to set base ' + base + ' due to ' + err);\r\n        }\r\n      }\r\n\r\n      var anchorElement = doc.createElement('a');\r\n      anchorElement.href = url;\r\n      if (baseElement) {\r\n        doc.body.appendChild(anchorElement);\r\n        anchorElement.href = anchorElement.href; // force href to refresh\r\n      }\r\n\r\n      var inputElement = doc.createElement('input');\r\n      inputElement.type = 'url';\r\n      inputElement.value = url;\r\n\r\n      if (anchorElement.protocol === ':' || !/:/.test(anchorElement.href) || (!inputElement.checkValidity() && !base)) {\r\n        throw new TypeError('Invalid URL');\r\n      }\r\n\r\n      Object.defineProperty(this, '_anchorElement', {\r\n        value: anchorElement\r\n      });\r\n\r\n\r\n      // create a linked searchParams which reflect its changes on URL\r\n      var searchParams = new global.URLSearchParams(this.search);\r\n      var enableSearchUpdate = true;\r\n      var enableSearchParamsUpdate = true;\r\n      var _this = this;\r\n      ['append', 'delete', 'set'].forEach(function(methodName) {\r\n        var method = searchParams[methodName];\r\n        searchParams[methodName] = function() {\r\n          method.apply(searchParams, arguments);\r\n          if (enableSearchUpdate) {\r\n            enableSearchParamsUpdate = false;\r\n            _this.search = searchParams.toString();\r\n            enableSearchParamsUpdate = true;\r\n          }\r\n        };\r\n      });\r\n\r\n      Object.defineProperty(this, 'searchParams', {\r\n        value: searchParams,\r\n        enumerable: true\r\n      });\r\n\r\n      var search = void 0;\r\n      Object.defineProperty(this, '_updateSearchParams', {\r\n        enumerable: false,\r\n        configurable: false,\r\n        writable: false,\r\n        value: function() {\r\n          if (this.search !== search) {\r\n            search = this.search;\r\n            if (enableSearchParamsUpdate) {\r\n              enableSearchUpdate = false;\r\n              this.searchParams._fromString(this.search);\r\n              enableSearchUpdate = true;\r\n            }\r\n          }\r\n        }\r\n      });\r\n    };\r\n\r\n    var proto = URL.prototype;\r\n\r\n    var linkURLWithAnchorAttribute = function(attributeName) {\r\n      Object.defineProperty(proto, attributeName, {\r\n        get: function() {\r\n          return this._anchorElement[attributeName];\r\n        },\r\n        set: function(value) {\r\n          this._anchorElement[attributeName] = value;\r\n        },\r\n        enumerable: true\r\n      });\r\n    };\r\n\r\n    ['hash', 'host', 'hostname', 'port', 'protocol']\r\n      .forEach(function(attributeName) {\r\n        linkURLWithAnchorAttribute(attributeName);\r\n      });\r\n\r\n    Object.defineProperty(proto, 'search', {\r\n      get: function() {\r\n        return this._anchorElement['search'];\r\n      },\r\n      set: function(value) {\r\n        this._anchorElement['search'] = value;\r\n        this._updateSearchParams();\r\n      },\r\n      enumerable: true\r\n    });\r\n\r\n    Object.defineProperties(proto, {\r\n\r\n      'toString': {\r\n        get: function() {\r\n          var _this = this;\r\n          return function() {\r\n            return _this.href;\r\n          };\r\n        }\r\n      },\r\n\r\n      'href': {\r\n        get: function() {\r\n          return this._anchorElement.href.replace(/\\?$/, '');\r\n        },\r\n        set: function(value) {\r\n          this._anchorElement.href = value;\r\n          this._updateSearchParams();\r\n        },\r\n        enumerable: true\r\n      },\r\n\r\n      'pathname': {\r\n        get: function() {\r\n          return this._anchorElement.pathname.replace(/(^\\/?)/, '/');\r\n        },\r\n        set: function(value) {\r\n          this._anchorElement.pathname = value;\r\n        },\r\n        enumerable: true\r\n      },\r\n\r\n      'origin': {\r\n        get: function() {\r\n          // get expected port from protocol\r\n          var expectedPort = { 'http:': 80, 'https:': 443, 'ftp:': 21 }[this._anchorElement.protocol];\r\n          // add port to origin if, expected port is different than actual port\r\n          // and it is not empty f.e http://foo:8080\r\n          // 8080 != 80 && 8080 != ''\r\n          var addPortToOrigin = this._anchorElement.port != expectedPort &&\r\n            this._anchorElement.port !== '';\r\n\r\n          return this._anchorElement.protocol +\r\n            '//' +\r\n            this._anchorElement.hostname +\r\n            (addPortToOrigin ? (':' + this._anchorElement.port) : '');\r\n        },\r\n        enumerable: true\r\n      },\r\n\r\n      'password': { // TODO\r\n        get: function() {\r\n          return '';\r\n        },\r\n        set: function(value) {\r\n        },\r\n        enumerable: true\r\n      },\r\n\r\n      'username': { // TODO\r\n        get: function() {\r\n          return '';\r\n        },\r\n        set: function(value) {\r\n        },\r\n        enumerable: true\r\n      },\r\n    });\r\n\r\n    URL.createObjectURL = function(blob) {\r\n      return _URL.createObjectURL.apply(_URL, arguments);\r\n    };\r\n\r\n    URL.revokeObjectURL = function(url) {\r\n      return _URL.revokeObjectURL.apply(_URL, arguments);\r\n    };\r\n\r\n    global.URL = URL;\r\n\r\n  };\r\n\r\n  if (!checkIfURLIsSupported()) {\r\n    polyfillURL();\r\n  }\r\n\r\n  if ((global.location !== void 0) && !('origin' in global.location)) {\r\n    var getOrigin = function() {\r\n      return global.location.protocol + '//' + global.location.hostname + (global.location.port ? (':' + global.location.port) : '');\r\n    };\r\n\r\n    try {\r\n      Object.defineProperty(global.location, 'origin', {\r\n        get: getOrigin,\r\n        enumerable: true\r\n      });\r\n    } catch (e) {\r\n      setInterval(function() {\r\n        global.location.origin = getOrigin();\r\n      }, 100);\r\n    }\r\n  }\r\n\r\n})(\r\n  (typeof global !== 'undefined') ? global\r\n    : ((typeof window !== 'undefined') ? window\r\n    : ((typeof self !== 'undefined') ? self : this))\r\n);\r\n", "/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global global, define, System, Reflect, Promise */\r\nvar __extends;\r\nvar __assign;\r\nvar __rest;\r\nvar __decorate;\r\nvar __param;\r\nvar __metadata;\r\nvar __awaiter;\r\nvar __generator;\r\nvar __exportStar;\r\nvar __values;\r\nvar __read;\r\nvar __spread;\r\nvar __spreadArrays;\r\nvar __spreadArray;\r\nvar __await;\r\nvar __asyncGenerator;\r\nvar __asyncDelegator;\r\nvar __asyncValues;\r\nvar __makeTemplateObject;\r\nvar __importStar;\r\nvar __importDefault;\r\nvar __classPrivateFieldGet;\r\nvar __classPrivateFieldSet;\r\nvar __createBinding;\r\n(function (factory) {\r\n    var root = typeof global === \"object\" ? global : typeof self === \"object\" ? self : typeof this === \"object\" ? this : {};\r\n    if (typeof define === \"function\" && define.amd) {\r\n        define(\"tslib\", [\"exports\"], function (exports) { factory(createExporter(root, createExporter(exports))); });\r\n    }\r\n    else if (typeof module === \"object\" && typeof module.exports === \"object\") {\r\n        factory(createExporter(root, createExporter(module.exports)));\r\n    }\r\n    else {\r\n        factory(createExporter(root));\r\n    }\r\n    function createExporter(exports, previous) {\r\n        if (exports !== root) {\r\n            if (typeof Object.create === \"function\") {\r\n                Object.defineProperty(exports, \"__esModule\", { value: true });\r\n            }\r\n            else {\r\n                exports.__esModule = true;\r\n            }\r\n        }\r\n        return function (id, v) { return exports[id] = previous ? previous(id, v) : v; };\r\n    }\r\n})\r\n(function (exporter) {\r\n    var extendStatics = Object.setPrototypeOf ||\r\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n        function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n\r\n    __extends = function (d, b) {\r\n        if (typeof b !== \"function\" && b !== null)\r\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n        extendStatics(d, b);\r\n        function __() { this.constructor = d; }\r\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n    };\r\n\r\n    __assign = Object.assign || function (t) {\r\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n            s = arguments[i];\r\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n        }\r\n        return t;\r\n    };\r\n\r\n    __rest = function (s, e) {\r\n        var t = {};\r\n        for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n            t[p] = s[p];\r\n        if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n            for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n                if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n                    t[p[i]] = s[p[i]];\r\n            }\r\n        return t;\r\n    };\r\n\r\n    __decorate = function (decorators, target, key, desc) {\r\n        var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n        if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n        else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n        return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n    };\r\n\r\n    __param = function (paramIndex, decorator) {\r\n        return function (target, key) { decorator(target, key, paramIndex); }\r\n    };\r\n\r\n    __metadata = function (metadataKey, metadataValue) {\r\n        if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n    };\r\n\r\n    __awaiter = function (thisArg, _arguments, P, generator) {\r\n        function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n        return new (P || (P = Promise))(function (resolve, reject) {\r\n            function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n            function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n            function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n            step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n        });\r\n    };\r\n\r\n    __generator = function (thisArg, body) {\r\n        var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n        return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n        function verb(n) { return function (v) { return step([n, v]); }; }\r\n        function step(op) {\r\n            if (f) throw new TypeError(\"Generator is already executing.\");\r\n            while (_) try {\r\n                if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n                if (y = 0, t) op = [op[0] & 2, t.value];\r\n                switch (op[0]) {\r\n                    case 0: case 1: t = op; break;\r\n                    case 4: _.label++; return { value: op[1], done: false };\r\n                    case 5: _.label++; y = op[1]; op = [0]; continue;\r\n                    case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n                    default:\r\n                        if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n                        if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n                        if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n                        if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n                        if (t[2]) _.ops.pop();\r\n                        _.trys.pop(); continue;\r\n                }\r\n                op = body.call(thisArg, _);\r\n            } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n            if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n        }\r\n    };\r\n\r\n    __exportStar = function(m, o) {\r\n        for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n    };\r\n\r\n    __createBinding = Object.create ? (function(o, m, k, k2) {\r\n        if (k2 === undefined) k2 = k;\r\n        Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n    }) : (function(o, m, k, k2) {\r\n        if (k2 === undefined) k2 = k;\r\n        o[k2] = m[k];\r\n    });\r\n\r\n    __values = function (o) {\r\n        var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n        if (m) return m.call(o);\r\n        if (o && typeof o.length === \"number\") return {\r\n            next: function () {\r\n                if (o && i >= o.length) o = void 0;\r\n                return { value: o && o[i++], done: !o };\r\n            }\r\n        };\r\n        throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n    };\r\n\r\n    __read = function (o, n) {\r\n        var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n        if (!m) return o;\r\n        var i = m.call(o), r, ar = [], e;\r\n        try {\r\n            while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n        }\r\n        catch (error) { e = { error: error }; }\r\n        finally {\r\n            try {\r\n                if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n            }\r\n            finally { if (e) throw e.error; }\r\n        }\r\n        return ar;\r\n    };\r\n\r\n    /** @deprecated */\r\n    __spread = function () {\r\n        for (var ar = [], i = 0; i < arguments.length; i++)\r\n            ar = ar.concat(__read(arguments[i]));\r\n        return ar;\r\n    };\r\n\r\n    /** @deprecated */\r\n    __spreadArrays = function () {\r\n        for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n        for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n            for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n                r[k] = a[j];\r\n        return r;\r\n    };\r\n\r\n    __spreadArray = function (to, from) {\r\n        for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)\r\n            to[j] = from[i];\r\n        return to;\r\n    };\r\n\r\n    __await = function (v) {\r\n        return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n    };\r\n\r\n    __asyncGenerator = function (thisArg, _arguments, generator) {\r\n        if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n        var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n        return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n        function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n        function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n        function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r);  }\r\n        function fulfill(value) { resume(\"next\", value); }\r\n        function reject(value) { resume(\"throw\", value); }\r\n        function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n    };\r\n\r\n    __asyncDelegator = function (o) {\r\n        var i, p;\r\n        return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n        function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n    };\r\n\r\n    __asyncValues = function (o) {\r\n        if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n        var m = o[Symbol.asyncIterator], i;\r\n        return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n        function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n        function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n    };\r\n\r\n    __makeTemplateObject = function (cooked, raw) {\r\n        if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n        return cooked;\r\n    };\r\n\r\n    var __setModuleDefault = Object.create ? (function(o, v) {\r\n        Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n    }) : function(o, v) {\r\n        o[\"default\"] = v;\r\n    };\r\n\r\n    __importStar = function (mod) {\r\n        if (mod && mod.__esModule) return mod;\r\n        var result = {};\r\n        if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n        __setModuleDefault(result, mod);\r\n        return result;\r\n    };\r\n\r\n    __importDefault = function (mod) {\r\n        return (mod && mod.__esModule) ? mod : { \"default\": mod };\r\n    };\r\n\r\n    __classPrivateFieldGet = function (receiver, privateMap) {\r\n        if (!privateMap.has(receiver)) {\r\n            throw new TypeError(\"attempted to get private field on non-instance\");\r\n        }\r\n        return privateMap.get(receiver);\r\n    };\r\n\r\n    __classPrivateFieldSet = function (receiver, privateMap, value) {\r\n        if (!privateMap.has(receiver)) {\r\n            throw new TypeError(\"attempted to set private field on non-instance\");\r\n        }\r\n        privateMap.set(receiver, value);\r\n        return value;\r\n    };\r\n\r\n    exporter(\"__extends\", __extends);\r\n    exporter(\"__assign\", __assign);\r\n    exporter(\"__rest\", __rest);\r\n    exporter(\"__decorate\", __decorate);\r\n    exporter(\"__param\", __param);\r\n    exporter(\"__metadata\", __metadata);\r\n    exporter(\"__awaiter\", __awaiter);\r\n    exporter(\"__generator\", __generator);\r\n    exporter(\"__exportStar\", __exportStar);\r\n    exporter(\"__createBinding\", __createBinding);\r\n    exporter(\"__values\", __values);\r\n    exporter(\"__read\", __read);\r\n    exporter(\"__spread\", __spread);\r\n    exporter(\"__spreadArrays\", __spreadArrays);\r\n    exporter(\"__spreadArray\", __spreadArray);\r\n    exporter(\"__await\", __await);\r\n    exporter(\"__asyncGenerator\", __asyncGenerator);\r\n    exporter(\"__asyncDelegator\", __asyncDelegator);\r\n    exporter(\"__asyncValues\", __asyncValues);\r\n    exporter(\"__makeTemplateObject\", __makeTemplateObject);\r\n    exporter(\"__importStar\", __importStar);\r\n    exporter(\"__importDefault\", __importDefault);\r\n    exporter(\"__classPrivateFieldGet\", __classPrivateFieldGet);\r\n    exporter(\"__classPrivateFieldSet\", __classPrivateFieldSet);\r\n});\r\n", "/*!\n * clipboard.js v2.0.11\n * https://clipboardjs.com/\n *\n * Licensed MIT \u00a9 Zeno Rocha\n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"ClipboardJS\"] = factory();\n\telse\n\t\troot[\"ClipboardJS\"] = factory();\n})(this, function() {\nreturn /******/ (function() { // webpackBootstrap\n/******/ \tvar __webpack_modules__ = ({\n\n/***/ 686:\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n  \"default\": function() { return /* binding */ clipboard; }\n});\n\n// EXTERNAL MODULE: ./node_modules/tiny-emitter/index.js\nvar tiny_emitter = __webpack_require__(279);\nvar tiny_emitter_default = /*#__PURE__*/__webpack_require__.n(tiny_emitter);\n// EXTERNAL MODULE: ./node_modules/good-listener/src/listen.js\nvar listen = __webpack_require__(370);\nvar listen_default = /*#__PURE__*/__webpack_require__.n(listen);\n// EXTERNAL MODULE: ./node_modules/select/src/select.js\nvar src_select = __webpack_require__(817);\nvar select_default = /*#__PURE__*/__webpack_require__.n(src_select);\n;// CONCATENATED MODULE: ./src/common/command.js\n/**\n * Executes a given operation type.\n * @param {String} type\n * @return {Boolean}\n */\nfunction command(type) {\n  try {\n    return document.execCommand(type);\n  } catch (err) {\n    return false;\n  }\n}\n;// CONCATENATED MODULE: ./src/actions/cut.js\n\n\n/**\n * Cut action wrapper.\n * @param {String|HTMLElement} target\n * @return {String}\n */\n\nvar ClipboardActionCut = function ClipboardActionCut(target) {\n  var selectedText = select_default()(target);\n  command('cut');\n  return selectedText;\n};\n\n/* harmony default export */ var actions_cut = (ClipboardActionCut);\n;// CONCATENATED MODULE: ./src/common/create-fake-element.js\n/**\n * Creates a fake textarea element with a value.\n * @param {String} value\n * @return {HTMLElement}\n */\nfunction createFakeElement(value) {\n  var isRTL = document.documentElement.getAttribute('dir') === 'rtl';\n  var fakeElement = document.createElement('textarea'); // Prevent zooming on iOS\n\n  fakeElement.style.fontSize = '12pt'; // Reset box model\n\n  fakeElement.style.border = '0';\n  fakeElement.style.padding = '0';\n  fakeElement.style.margin = '0'; // Move element out of screen horizontally\n\n  fakeElement.style.position = 'absolute';\n  fakeElement.style[isRTL ? 'right' : 'left'] = '-9999px'; // Move element to the same position vertically\n\n  var yPosition = window.pageYOffset || document.documentElement.scrollTop;\n  fakeElement.style.top = \"\".concat(yPosition, \"px\");\n  fakeElement.setAttribute('readonly', '');\n  fakeElement.value = value;\n  return fakeElement;\n}\n;// CONCATENATED MODULE: ./src/actions/copy.js\n\n\n\n/**\n * Create fake copy action wrapper using a fake element.\n * @param {String} target\n * @param {Object} options\n * @return {String}\n */\n\nvar fakeCopyAction = function fakeCopyAction(value, options) {\n  var fakeElement = createFakeElement(value);\n  options.container.appendChild(fakeElement);\n  var selectedText = select_default()(fakeElement);\n  command('copy');\n  fakeElement.remove();\n  return selectedText;\n};\n/**\n * Copy action wrapper.\n * @param {String|HTMLElement} target\n * @param {Object} options\n * @return {String}\n */\n\n\nvar ClipboardActionCopy = function ClipboardActionCopy(target) {\n  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n    container: document.body\n  };\n  var selectedText = '';\n\n  if (typeof target === 'string') {\n    selectedText = fakeCopyAction(target, options);\n  } else if (target instanceof HTMLInputElement && !['text', 'search', 'url', 'tel', 'password'].includes(target === null || target === void 0 ? void 0 : target.type)) {\n    // If input type doesn't support `setSelectionRange`. Simulate it. https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement/setSelectionRange\n    selectedText = fakeCopyAction(target.value, options);\n  } else {\n    selectedText = select_default()(target);\n    command('copy');\n  }\n\n  return selectedText;\n};\n\n/* harmony default export */ var actions_copy = (ClipboardActionCopy);\n;// CONCATENATED MODULE: ./src/actions/default.js\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n\n\n/**\n * Inner function which performs selection from either `text` or `target`\n * properties and then executes copy or cut operations.\n * @param {Object} options\n */\n\nvar ClipboardActionDefault = function ClipboardActionDefault() {\n  var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n  // Defines base properties passed from constructor.\n  var _options$action = options.action,\n      action = _options$action === void 0 ? 'copy' : _options$action,\n      container = options.container,\n      target = options.target,\n      text = options.text; // Sets the `action` to be performed which can be either 'copy' or 'cut'.\n\n  if (action !== 'copy' && action !== 'cut') {\n    throw new Error('Invalid \"action\" value, use either \"copy\" or \"cut\"');\n  } // Sets the `target` property using an element that will be have its content copied.\n\n\n  if (target !== undefined) {\n    if (target && _typeof(target) === 'object' && target.nodeType === 1) {\n      if (action === 'copy' && target.hasAttribute('disabled')) {\n        throw new Error('Invalid \"target\" attribute. Please use \"readonly\" instead of \"disabled\" attribute');\n      }\n\n      if (action === 'cut' && (target.hasAttribute('readonly') || target.hasAttribute('disabled'))) {\n        throw new Error('Invalid \"target\" attribute. You can\\'t cut text from elements with \"readonly\" or \"disabled\" attributes');\n      }\n    } else {\n      throw new Error('Invalid \"target\" value, use a valid Element');\n    }\n  } // Define selection strategy based on `text` property.\n\n\n  if (text) {\n    return actions_copy(text, {\n      container: container\n    });\n  } // Defines which selection strategy based on `target` property.\n\n\n  if (target) {\n    return action === 'cut' ? actions_cut(target) : actions_copy(target, {\n      container: container\n    });\n  }\n};\n\n/* harmony default export */ var actions_default = (ClipboardActionDefault);\n;// CONCATENATED MODULE: ./src/clipboard.js\nfunction clipboard_typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { clipboard_typeof = function _typeof(obj) { return typeof obj; }; } else { clipboard_typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return clipboard_typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (clipboard_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\n\n\n\n\n\n/**\n * Helper function to retrieve attribute value.\n * @param {String} suffix\n * @param {Element} element\n */\n\nfunction getAttributeValue(suffix, element) {\n  var attribute = \"data-clipboard-\".concat(suffix);\n\n  if (!element.hasAttribute(attribute)) {\n    return;\n  }\n\n  return element.getAttribute(attribute);\n}\n/**\n * Base class which takes one or more elements, adds event listeners to them,\n * and instantiates a new `ClipboardAction` on each click.\n */\n\n\nvar Clipboard = /*#__PURE__*/function (_Emitter) {\n  _inherits(Clipboard, _Emitter);\n\n  var _super = _createSuper(Clipboard);\n\n  /**\n   * @param {String|HTMLElement|HTMLCollection|NodeList} trigger\n   * @param {Object} options\n   */\n  function Clipboard(trigger, options) {\n    var _this;\n\n    _classCallCheck(this, Clipboard);\n\n    _this = _super.call(this);\n\n    _this.resolveOptions(options);\n\n    _this.listenClick(trigger);\n\n    return _this;\n  }\n  /**\n   * Defines if attributes would be resolved using internal setter functions\n   * or custom functions that were passed in the constructor.\n   * @param {Object} options\n   */\n\n\n  _createClass(Clipboard, [{\n    key: \"resolveOptions\",\n    value: function resolveOptions() {\n      var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n      this.action = typeof options.action === 'function' ? options.action : this.defaultAction;\n      this.target = typeof options.target === 'function' ? options.target : this.defaultTarget;\n      this.text = typeof options.text === 'function' ? options.text : this.defaultText;\n      this.container = clipboard_typeof(options.container) === 'object' ? options.container : document.body;\n    }\n    /**\n     * Adds a click event listener to the passed trigger.\n     * @param {String|HTMLElement|HTMLCollection|NodeList} trigger\n     */\n\n  }, {\n    key: \"listenClick\",\n    value: function listenClick(trigger) {\n      var _this2 = this;\n\n      this.listener = listen_default()(trigger, 'click', function (e) {\n        return _this2.onClick(e);\n      });\n    }\n    /**\n     * Defines a new `ClipboardAction` on each click event.\n     * @param {Event} e\n     */\n\n  }, {\n    key: \"onClick\",\n    value: function onClick(e) {\n      var trigger = e.delegateTarget || e.currentTarget;\n      var action = this.action(trigger) || 'copy';\n      var text = actions_default({\n        action: action,\n        container: this.container,\n        target: this.target(trigger),\n        text: this.text(trigger)\n      }); // Fires an event based on the copy operation result.\n\n      this.emit(text ? 'success' : 'error', {\n        action: action,\n        text: text,\n        trigger: trigger,\n        clearSelection: function clearSelection() {\n          if (trigger) {\n            trigger.focus();\n          }\n\n          window.getSelection().removeAllRanges();\n        }\n      });\n    }\n    /**\n     * Default `action` lookup function.\n     * @param {Element} trigger\n     */\n\n  }, {\n    key: \"defaultAction\",\n    value: function defaultAction(trigger) {\n      return getAttributeValue('action', trigger);\n    }\n    /**\n     * Default `target` lookup function.\n     * @param {Element} trigger\n     */\n\n  }, {\n    key: \"defaultTarget\",\n    value: function defaultTarget(trigger) {\n      var selector = getAttributeValue('target', trigger);\n\n      if (selector) {\n        return document.querySelector(selector);\n      }\n    }\n    /**\n     * Allow fire programmatically a copy action\n     * @param {String|HTMLElement} target\n     * @param {Object} options\n     * @returns Text copied.\n     */\n\n  }, {\n    key: \"defaultText\",\n\n    /**\n     * Default `text` lookup function.\n     * @param {Element} trigger\n     */\n    value: function defaultText(trigger) {\n      return getAttributeValue('text', trigger);\n    }\n    /**\n     * Destroy lifecycle.\n     */\n\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.listener.destroy();\n    }\n  }], [{\n    key: \"copy\",\n    value: function copy(target) {\n      var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n        container: document.body\n      };\n      return actions_copy(target, options);\n    }\n    /**\n     * Allow fire programmatically a cut action\n     * @param {String|HTMLElement} target\n     * @returns Text cutted.\n     */\n\n  }, {\n    key: \"cut\",\n    value: function cut(target) {\n      return actions_cut(target);\n    }\n    /**\n     * Returns the support of the given action, or all actions if no action is\n     * given.\n     * @param {String} [action]\n     */\n\n  }, {\n    key: \"isSupported\",\n    value: function isSupported() {\n      var action = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ['copy', 'cut'];\n      var actions = typeof action === 'string' ? [action] : action;\n      var support = !!document.queryCommandSupported;\n      actions.forEach(function (action) {\n        support = support && !!document.queryCommandSupported(action);\n      });\n      return support;\n    }\n  }]);\n\n  return Clipboard;\n}((tiny_emitter_default()));\n\n/* harmony default export */ var clipboard = (Clipboard);\n\n/***/ }),\n\n/***/ 828:\n/***/ (function(module) {\n\nvar DOCUMENT_NODE_TYPE = 9;\n\n/**\n * A polyfill for Element.matches()\n */\nif (typeof Element !== 'undefined' && !Element.prototype.matches) {\n    var proto = Element.prototype;\n\n    proto.matches = proto.matchesSelector ||\n                    proto.mozMatchesSelector ||\n                    proto.msMatchesSelector ||\n                    proto.oMatchesSelector ||\n                    proto.webkitMatchesSelector;\n}\n\n/**\n * Finds the closest parent that matches a selector.\n *\n * @param {Element} element\n * @param {String} selector\n * @return {Function}\n */\nfunction closest (element, selector) {\n    while (element && element.nodeType !== DOCUMENT_NODE_TYPE) {\n        if (typeof element.matches === 'function' &&\n            element.matches(selector)) {\n          return element;\n        }\n        element = element.parentNode;\n    }\n}\n\nmodule.exports = closest;\n\n\n/***/ }),\n\n/***/ 438:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar closest = __webpack_require__(828);\n\n/**\n * Delegates event to a selector.\n *\n * @param {Element} element\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @param {Boolean} useCapture\n * @return {Object}\n */\nfunction _delegate(element, selector, type, callback, useCapture) {\n    var listenerFn = listener.apply(this, arguments);\n\n    element.addEventListener(type, listenerFn, useCapture);\n\n    return {\n        destroy: function() {\n            element.removeEventListener(type, listenerFn, useCapture);\n        }\n    }\n}\n\n/**\n * Delegates event to a selector.\n *\n * @param {Element|String|Array} [elements]\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @param {Boolean} useCapture\n * @return {Object}\n */\nfunction delegate(elements, selector, type, callback, useCapture) {\n    // Handle the regular Element usage\n    if (typeof elements.addEventListener === 'function') {\n        return _delegate.apply(null, arguments);\n    }\n\n    // Handle Element-less usage, it defaults to global delegation\n    if (typeof type === 'function') {\n        // Use `document` as the first parameter, then apply arguments\n        // This is a short way to .unshift `arguments` without running into deoptimizations\n        return _delegate.bind(null, document).apply(null, arguments);\n    }\n\n    // Handle Selector-based usage\n    if (typeof elements === 'string') {\n        elements = document.querySelectorAll(elements);\n    }\n\n    // Handle Array-like based usage\n    return Array.prototype.map.call(elements, function (element) {\n        return _delegate(element, selector, type, callback, useCapture);\n    });\n}\n\n/**\n * Finds closest match and invokes callback.\n *\n * @param {Element} element\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @return {Function}\n */\nfunction listener(element, selector, type, callback) {\n    return function(e) {\n        e.delegateTarget = closest(e.target, selector);\n\n        if (e.delegateTarget) {\n            callback.call(element, e);\n        }\n    }\n}\n\nmodule.exports = delegate;\n\n\n/***/ }),\n\n/***/ 879:\n/***/ (function(__unused_webpack_module, exports) {\n\n/**\n * Check if argument is a HTML element.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.node = function(value) {\n    return value !== undefined\n        && value instanceof HTMLElement\n        && value.nodeType === 1;\n};\n\n/**\n * Check if argument is a list of HTML elements.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.nodeList = function(value) {\n    var type = Object.prototype.toString.call(value);\n\n    return value !== undefined\n        && (type === '[object NodeList]' || type === '[object HTMLCollection]')\n        && ('length' in value)\n        && (value.length === 0 || exports.node(value[0]));\n};\n\n/**\n * Check if argument is a string.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.string = function(value) {\n    return typeof value === 'string'\n        || value instanceof String;\n};\n\n/**\n * Check if argument is a function.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.fn = function(value) {\n    var type = Object.prototype.toString.call(value);\n\n    return type === '[object Function]';\n};\n\n\n/***/ }),\n\n/***/ 370:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar is = __webpack_require__(879);\nvar delegate = __webpack_require__(438);\n\n/**\n * Validates all params and calls the right\n * listener function based on its target type.\n *\n * @param {String|HTMLElement|HTMLCollection|NodeList} target\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listen(target, type, callback) {\n    if (!target && !type && !callback) {\n        throw new Error('Missing required arguments');\n    }\n\n    if (!is.string(type)) {\n        throw new TypeError('Second argument must be a String');\n    }\n\n    if (!is.fn(callback)) {\n        throw new TypeError('Third argument must be a Function');\n    }\n\n    if (is.node(target)) {\n        return listenNode(target, type, callback);\n    }\n    else if (is.nodeList(target)) {\n        return listenNodeList(target, type, callback);\n    }\n    else if (is.string(target)) {\n        return listenSelector(target, type, callback);\n    }\n    else {\n        throw new TypeError('First argument must be a String, HTMLElement, HTMLCollection, or NodeList');\n    }\n}\n\n/**\n * Adds an event listener to a HTML element\n * and returns a remove listener function.\n *\n * @param {HTMLElement} node\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listenNode(node, type, callback) {\n    node.addEventListener(type, callback);\n\n    return {\n        destroy: function() {\n            node.removeEventListener(type, callback);\n        }\n    }\n}\n\n/**\n * Add an event listener to a list of HTML elements\n * and returns a remove listener function.\n *\n * @param {NodeList|HTMLCollection} nodeList\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listenNodeList(nodeList, type, callback) {\n    Array.prototype.forEach.call(nodeList, function(node) {\n        node.addEventListener(type, callback);\n    });\n\n    return {\n        destroy: function() {\n            Array.prototype.forEach.call(nodeList, function(node) {\n                node.removeEventListener(type, callback);\n            });\n        }\n    }\n}\n\n/**\n * Add an event listener to a selector\n * and returns a remove listener function.\n *\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listenSelector(selector, type, callback) {\n    return delegate(document.body, selector, type, callback);\n}\n\nmodule.exports = listen;\n\n\n/***/ }),\n\n/***/ 817:\n/***/ (function(module) {\n\nfunction select(element) {\n    var selectedText;\n\n    if (element.nodeName === 'SELECT') {\n        element.focus();\n\n        selectedText = element.value;\n    }\n    else if (element.nodeName === 'INPUT' || element.nodeName === 'TEXTAREA') {\n        var isReadOnly = element.hasAttribute('readonly');\n\n        if (!isReadOnly) {\n            element.setAttribute('readonly', '');\n        }\n\n        element.select();\n        element.setSelectionRange(0, element.value.length);\n\n        if (!isReadOnly) {\n            element.removeAttribute('readonly');\n        }\n\n        selectedText = element.value;\n    }\n    else {\n        if (element.hasAttribute('contenteditable')) {\n            element.focus();\n        }\n\n        var selection = window.getSelection();\n        var range = document.createRange();\n\n        range.selectNodeContents(element);\n        selection.removeAllRanges();\n        selection.addRange(range);\n\n        selectedText = selection.toString();\n    }\n\n    return selectedText;\n}\n\nmodule.exports = select;\n\n\n/***/ }),\n\n/***/ 279:\n/***/ (function(module) {\n\nfunction E () {\n  // Keep this empty so it's easier to inherit from\n  // (via https://github.com/lipsmack from https://github.com/scottcorgan/tiny-emitter/issues/3)\n}\n\nE.prototype = {\n  on: function (name, callback, ctx) {\n    var e = this.e || (this.e = {});\n\n    (e[name] || (e[name] = [])).push({\n      fn: callback,\n      ctx: ctx\n    });\n\n    return this;\n  },\n\n  once: function (name, callback, ctx) {\n    var self = this;\n    function listener () {\n      self.off(name, listener);\n      callback.apply(ctx, arguments);\n    };\n\n    listener._ = callback\n    return this.on(name, listener, ctx);\n  },\n\n  emit: function (name) {\n    var data = [].slice.call(arguments, 1);\n    var evtArr = ((this.e || (this.e = {}))[name] || []).slice();\n    var i = 0;\n    var len = evtArr.length;\n\n    for (i; i < len; i++) {\n      evtArr[i].fn.apply(evtArr[i].ctx, data);\n    }\n\n    return this;\n  },\n\n  off: function (name, callback) {\n    var e = this.e || (this.e = {});\n    var evts = e[name];\n    var liveEvents = [];\n\n    if (evts && callback) {\n      for (var i = 0, len = evts.length; i < len; i++) {\n        if (evts[i].fn !== callback && evts[i].fn._ !== callback)\n          liveEvents.push(evts[i]);\n      }\n    }\n\n    // Remove event from queue to prevent memory leak\n    // Suggested by https://github.com/lazd\n    // Ref: https://github.com/scottcorgan/tiny-emitter/commit/c6ebfaa9bc973b33d110a84a307742b7cf94c953#commitcomment-5024910\n\n    (liveEvents.length)\n      ? e[name] = liveEvents\n      : delete e[name];\n\n    return this;\n  }\n};\n\nmodule.exports = E;\nmodule.exports.TinyEmitter = E;\n\n\n/***/ })\n\n/******/ \t});\n/************************************************************************/\n/******/ \t// The module cache\n/******/ \tvar __webpack_module_cache__ = {};\n/******/ \t\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(__webpack_module_cache__[moduleId]) {\n/******/ \t\t\treturn __webpack_module_cache__[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = __webpack_module_cache__[moduleId] = {\n/******/ \t\t\t// no module.id needed\n/******/ \t\t\t// no module.loaded needed\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/ \t\n/******/ \t\t// Execute the module function\n/******/ \t\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n/******/ \t\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/ \t\n/************************************************************************/\n/******/ \t/* webpack/runtime/compat get default export */\n/******/ \t!function() {\n/******/ \t\t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t\t__webpack_require__.n = function(module) {\n/******/ \t\t\tvar getter = module && module.__esModule ?\n/******/ \t\t\t\tfunction() { return module['default']; } :\n/******/ \t\t\t\tfunction() { return module; };\n/******/ \t\t\t__webpack_require__.d(getter, { a: getter });\n/******/ \t\t\treturn getter;\n/******/ \t\t};\n/******/ \t}();\n/******/ \t\n/******/ \t/* webpack/runtime/define property getters */\n/******/ \t!function() {\n/******/ \t\t// define getter functions for harmony exports\n/******/ \t\t__webpack_require__.d = function(exports, definition) {\n/******/ \t\t\tfor(var key in definition) {\n/******/ \t\t\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n/******/ \t\t\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n/******/ \t\t\t\t}\n/******/ \t\t\t}\n/******/ \t\t};\n/******/ \t}();\n/******/ \t\n/******/ \t/* webpack/runtime/hasOwnProperty shorthand */\n/******/ \t!function() {\n/******/ \t\t__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }\n/******/ \t}();\n/******/ \t\n/************************************************************************/\n/******/ \t// module exports must be returned from runtime so entry inlining is disabled\n/******/ \t// startup\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(686);\n/******/ })()\n.default;\n});", "/*!\n * escape-html\n * Copyright(c) 2012-2013 TJ Holowaychuk\n * Copyright(c) 2015 Andreas Lubbe\n * Copyright(c) 2015 Tiancheng \"Timothy\" Gu\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module variables.\n * @private\n */\n\nvar matchHtmlRegExp = /[\"'&<>]/;\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = escapeHtml;\n\n/**\n * Escape special characters in the given string of html.\n *\n * @param  {string} string The string to escape for inserting into HTML\n * @return {string}\n * @public\n */\n\nfunction escapeHtml(string) {\n  var str = '' + string;\n  var match = matchHtmlRegExp.exec(str);\n\n  if (!match) {\n    return str;\n  }\n\n  var escape;\n  var html = '';\n  var index = 0;\n  var lastIndex = 0;\n\n  for (index = match.index; index < str.length; index++) {\n    switch (str.charCodeAt(index)) {\n      case 34: // \"\n        escape = '"';\n        break;\n      case 38: // &\n        escape = '&';\n        break;\n      case 39: // '\n        escape = ''';\n        break;\n      case 60: // <\n        escape = '<';\n        break;\n      case 62: // >\n        escape = '>';\n        break;\n      default:\n        continue;\n    }\n\n    if (lastIndex !== index) {\n      html += str.substring(lastIndex, index);\n    }\n\n    lastIndex = index + 1;\n    html += escape;\n  }\n\n  return lastIndex !== index\n    ? html + str.substring(lastIndex, index)\n    : html;\n}\n", "Array.prototype.flat||Object.defineProperty(Array.prototype,\"flat\",{configurable:!0,value:function r(){var t=isNaN(arguments[0])?1:Number(arguments[0]);return t?Array.prototype.reduce.call(this,function(a,e){return Array.isArray(e)?a.push.apply(a,r.call(e,t-1)):a.push(e),a},[]):Array.prototype.slice.call(this)},writable:!0}),Array.prototype.flatMap||Object.defineProperty(Array.prototype,\"flatMap\",{configurable:!0,value:function(r){return Array.prototype.map.apply(this,arguments).flat()},writable:!0})\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport \"array-flat-polyfill\"\nimport \"focus-visible\"\nimport \"unfetch/polyfill\"\nimport \"url-polyfill\"\n\nimport {\n  EMPTY,\n  Subject,\n  defer,\n  delay,\n  filter,\n  map,\n  merge,\n  mergeWith,\n  shareReplay,\n  switchMap\n} from \"rxjs\"\n\nimport { configuration, feature } from \"./_\"\nimport {\n  at,\n  getOptionalElement,\n  setToggle,\n  watchDocument,\n  watchKeyboard,\n  watchLocation,\n  watchLocationTarget,\n  watchMedia,\n  watchPrint,\n  watchViewport\n} from \"./browser\"\nimport {\n  getComponentElement,\n  getComponentElements,\n  mountAnnounce,\n  mountBackToTop,\n  mountConsent,\n  mountContent,\n  mountDialog,\n  mountHeader,\n  mountHeaderTitle,\n  mountPalette,\n  mountSearch,\n  mountSearchHiglight,\n  mountSidebar,\n  mountSource,\n  mountTableOfContents,\n  mountTabs,\n  watchHeader,\n  watchMain\n} from \"./components\"\nimport {\n  setupClipboardJS,\n  setupInstantLoading,\n  setupVersionSelector\n} from \"./integrations\"\nimport {\n  patchIndeterminate,\n  patchScrollfix,\n  patchScrolllock\n} from \"./patches\"\nimport \"./polyfills\"\n\n/* ----------------------------------------------------------------------------\n * Application\n * ------------------------------------------------------------------------- */\n\n/* Yay, JavaScript is available */\ndocument.documentElement.classList.remove(\"no-js\")\ndocument.documentElement.classList.add(\"js\")\n\n/* Set up navigation observables and subjects */\nconst document$ = watchDocument()\nconst location$ = watchLocation()\nconst target$   = watchLocationTarget()\nconst keyboard$ = watchKeyboard()\n\n/* Set up media observables */\nconst viewport$ = watchViewport()\nconst tablet$   = watchMedia(\"(min-width: 960px)\")\nconst screen$   = watchMedia(\"(min-width: 1220px)\")\nconst print$    = watchPrint()\n\nconst config = configuration()\n\n/* Set up Clipboard.js integration */\nconst alert$ = new Subject()\nsetupClipboardJS({ alert$ })\n\n/* Set up instant loading, if enabled */\nif (feature(\"navigation.instant\"))\n  setupInstantLoading({ document$, location$, viewport$ })\n\n/* Set up version selector */\nif (config.version?.provider === \"mike\")\n  setupVersionSelector({ document$ })\n\n/* Always close drawer and search on navigation */\nmerge(location$, target$)\n  .pipe(\n    delay(125)\n  )\n    .subscribe(() => {\n      setToggle(\"drawer\", false)\n      setToggle(\"search\", false)\n    })\n\n/* Set up global keyboard handlers */\nkeyboard$\n  .pipe(\n    filter(({ mode }) => mode === \"global\")\n  )\n    .subscribe(key => {\n      switch (key.type) {\n\n        /* Go to previous page */\n        case \"p\":\n        case \",\":\n          const prev = getOptionalElement(\"[href][rel=prev]\")\n          if (typeof prev !== \"undefined\")\n            prev.click()\n          break\n\n        /* Go to next page */\n        case \"n\":\n        case \".\":\n          const next = getOptionalElement(\"[href][rel=next]\")\n          if (typeof next !== \"undefined\")\n            next.click()\n          break\n      }\n    })\n\n/* Set up patches */\npatchIndeterminate({ document$, tablet$ })\npatchScrollfix({ document$ })\npatchScrolllock({ viewport$, tablet$ })\n\n/* Set up header and main area observable */\nconst header$ = watchHeader(getComponentElement(\"header\"), { viewport$ })\nconst main$ = document$\n  .pipe(\n    map(() => getComponentElement(\"main\")),\n    switchMap(el => watchMain(el, { viewport$, header$ })),\n    shareReplay(1)\n  )\n\n/* Set up control component observables */\nconst control$ = merge(\n\n  /* Consent */\n  ...getComponentElements(\"consent\")\n    .map(el => mountConsent(el, { target$ })),\n\n  /* Dialog */\n  ...getComponentElements(\"dialog\")\n    .map(el => mountDialog(el, { alert$ })),\n\n  /* Header */\n  ...getComponentElements(\"header\")\n    .map(el => mountHeader(el, { viewport$, header$, main$ })),\n\n  /* Color palette */\n  ...getComponentElements(\"palette\")\n    .map(el => mountPalette(el)),\n\n  /* Search */\n  ...getComponentElements(\"search\")\n    .map(el => mountSearch(el, { keyboard$ })),\n\n  /* Repository information */\n  ...getComponentElements(\"source\")\n    .map(el => mountSource(el))\n)\n\n/* Set up content component observables */\nconst content$ = defer(() => merge(\n\n  /* Announcement bar */\n  ...getComponentElements(\"announce\")\n    .map(el => mountAnnounce(el)),\n\n  /* Content */\n  ...getComponentElements(\"content\")\n    .map(el => mountContent(el, { viewport$, target$, print$ })),\n\n  /* Search highlighting */\n  ...getComponentElements(\"content\")\n    .map(el => feature(\"search.highlight\")\n      ? mountSearchHiglight(el, { location$ })\n      : EMPTY\n    ),\n\n  /* Header title */\n  ...getComponentElements(\"header-title\")\n    .map(el => mountHeaderTitle(el, { viewport$, header$ })),\n\n  /* Sidebar */\n  ...getComponentElements(\"sidebar\")\n    .map(el => el.getAttribute(\"data-md-type\") === \"navigation\"\n      ? at(screen$, () => mountSidebar(el, { viewport$, header$, main$ }))\n      : at(tablet$, () => mountSidebar(el, { viewport$, header$, main$ }))\n    ),\n\n  /* Navigation tabs */\n  ...getComponentElements(\"tabs\")\n    .map(el => mountTabs(el, { viewport$, header$ })),\n\n  /* Table of contents */\n  ...getComponentElements(\"toc\")\n    .map(el => mountTableOfContents(el, { viewport$, header$, target$, localToc: true })),\n\n  /* Global Table of contents */\n  ...getComponentElements(\"sidebar\")\n    .filter(el => el.getAttribute(\"data-md-type\") === \"navigation\")\n    .map(el => mountTableOfContents(el, { viewport$, header$, target$, localToc: false })),\n\n  /* Back-to-top button */\n  ...getComponentElements(\"top\")\n    .map(el => mountBackToTop(el, { viewport$, header$, main$, target$ }))\n))\n\n/* Set up component observables */\nconst component$ = document$\n  .pipe(\n    switchMap(() => content$),\n    mergeWith(control$),\n    shareReplay(1)\n  )\n\n/* Subscribe to all components */\ncomponent$.subscribe()\n\n/* ----------------------------------------------------------------------------\n * Exports\n * ------------------------------------------------------------------------- */\n\nwindow.document$  = document$          /* Document observable */\nwindow.location$  = location$          /* Location subject */\nwindow.target$    = target$            /* Location target observable */\nwindow.keyboard$  = keyboard$          /* Keyboard observable */\nwindow.viewport$  = viewport$          /* Viewport observable */\nwindow.tablet$    = tablet$            /* Media tablet observable */\nwindow.screen$    = screen$            /* Media screen observable */\nwindow.print$     = print$             /* Media print observable */\nwindow.alert$     = alert$             /* Alert subject */\nwindow.component$ = component$         /* Component observable */\n", "self.fetch||(self.fetch=function(e,n){return n=n||{},new Promise(function(t,s){var r=new XMLHttpRequest,o=[],u=[],i={},a=function(){return{ok:2==(r.status/100|0),statusText:r.statusText,status:r.status,url:r.responseURL,text:function(){return Promise.resolve(r.responseText)},json:function(){return Promise.resolve(r.responseText).then(JSON.parse)},blob:function(){return Promise.resolve(new Blob([r.response]))},clone:a,headers:{keys:function(){return o},entries:function(){return u},get:function(e){return i[e.toLowerCase()]},has:function(e){return e.toLowerCase()in i}}}};for(var c in r.open(n.method||\"get\",e,!0),r.onload=function(){r.getAllResponseHeaders().replace(/^(.*?):[^\\S\\n]*([\\s\\S]*?)$/gm,function(e,n,t){o.push(n=n.toLowerCase()),u.push([n,t]),i[n]=i[n]?i[n]+\",\"+t:t}),t(a())},r.onerror=s,r.withCredentials=\"include\"==n.credentials,n.headers)r.setRequestHeader(c,n.headers[c]);r.send(n.body||null)})});\n", "import tslib from '../tslib.js';\r\nconst {\r\n    __extends,\r\n    __assign,\r\n    __rest,\r\n    __decorate,\r\n    __param,\r\n    __metadata,\r\n    __awaiter,\r\n    __generator,\r\n    __exportStar,\r\n    __createBinding,\r\n    __values,\r\n    __read,\r\n    __spread,\r\n    __spreadArrays,\r\n    __spreadArray,\r\n    __await,\r\n    __asyncGenerator,\r\n    __asyncDelegator,\r\n    __asyncValues,\r\n    __makeTemplateObject,\r\n    __importStar,\r\n    __importDefault,\r\n    __classPrivateFieldGet,\r\n    __classPrivateFieldSet,\r\n} = tslib;\r\nexport {\r\n    __extends,\r\n    __assign,\r\n    __rest,\r\n    __decorate,\r\n    __param,\r\n    __metadata,\r\n    __awaiter,\r\n    __generator,\r\n    __exportStar,\r\n    __createBinding,\r\n    __values,\r\n    __read,\r\n    __spread,\r\n    __spreadArrays,\r\n    __spreadArray,\r\n    __await,\r\n    __asyncGenerator,\r\n    __asyncDelegator,\r\n    __asyncValues,\r\n    __makeTemplateObject,\r\n    __importStar,\r\n    __importDefault,\r\n    __classPrivateFieldGet,\r\n    __classPrivateFieldSet,\r\n};\r\n", null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n  ReplaySubject,\n  Subject,\n  fromEvent\n} from \"rxjs\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch document\n *\n * Documents are implemented as subjects, so all downstream observables are\n * automatically updated when a new document is emitted.\n *\n * @returns Document subject\n */\nexport function watchDocument(): Subject {\n  const document$ = new ReplaySubject(1)\n  fromEvent(document, \"DOMContentLoaded\", { once: true })\n    .subscribe(() => document$.next(document))\n\n  /* Return document */\n  return document$\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Retrieve all elements matching the query selector\n *\n * @template T - Element type\n *\n * @param selector - Query selector\n * @param node - Node of reference\n *\n * @returns Elements\n */\nexport function getElements(\n  selector: T, node?: ParentNode\n): HTMLElementTagNameMap[T][]\n\nexport function getElements(\n  selector: string, node?: ParentNode\n): T[]\n\nexport function getElements(\n  selector: string, node: ParentNode = document\n): T[] {\n  return Array.from(node.querySelectorAll(selector))\n}\n\n/**\n * Retrieve an element matching a query selector or throw a reference error\n *\n * Note that this function assumes that the element is present. If unsure if an\n * element is existent, use the `getOptionalElement` function instead.\n *\n * @template T - Element type\n *\n * @param selector - Query selector\n * @param node - Node of reference\n *\n * @returns Element\n */\nexport function getElement(\n  selector: T, node?: ParentNode\n): HTMLElementTagNameMap[T]\n\nexport function getElement(\n  selector: string, node?: ParentNode\n): T\n\nexport function getElement(\n  selector: string, node: ParentNode = document\n): T {\n  const el = getOptionalElement(selector, node)\n  if (typeof el === \"undefined\")\n    throw new ReferenceError(\n      `Missing element: expected \"${selector}\" to be present`\n    )\n\n  /* Return element */\n  return el\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Retrieve an optional element matching the query selector\n *\n * @template T - Element type\n *\n * @param selector - Query selector\n * @param node - Node of reference\n *\n * @returns Element or nothing\n */\nexport function getOptionalElement(\n  selector: T, node?: ParentNode\n): HTMLElementTagNameMap[T] | undefined\n\nexport function getOptionalElement(\n  selector: string, node?: ParentNode\n): T | undefined\n\nexport function getOptionalElement(\n  selector: string, node: ParentNode = document\n): T | undefined {\n  return node.querySelector(selector) || undefined\n}\n\n/**\n * Retrieve the currently active element\n *\n * @returns Element or nothing\n */\nexport function getActiveElement(): HTMLElement | undefined {\n  return document.activeElement instanceof HTMLElement\n    ? document.activeElement || undefined\n    : undefined\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n  Observable,\n  debounceTime,\n  distinctUntilChanged,\n  fromEvent,\n  map,\n  merge,\n  startWith\n} from \"rxjs\"\n\nimport { getActiveElement } from \"../_\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch element focus\n *\n * Previously, this function used `focus` and `blur` events to determine whether\n * an element is focused, but this doesn't work if there are focusable elements\n * within the elements itself. A better solutions are `focusin` and `focusout`\n * events, which bubble up the tree and allow for more fine-grained control.\n *\n * `debounceTime` is necessary, because when a focus change happens inside an\n * element, the observable would first emit `false` and then `true` again.\n *\n * @param el - Element\n *\n * @returns Element focus observable\n */\nexport function watchElementFocus(\n  el: HTMLElement\n): Observable {\n  return merge(\n    fromEvent(document.body, \"focusin\"),\n    fromEvent(document.body, \"focusout\")\n  )\n    .pipe(\n      debounceTime(1),\n      map(() => {\n        const active = getActiveElement()\n        return typeof active !== \"undefined\"\n          ? el.contains(active)\n          : false\n      }),\n      startWith(el === getActiveElement()),\n      distinctUntilChanged()\n    )\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n  Observable,\n  animationFrameScheduler,\n  auditTime,\n  fromEvent,\n  map,\n  merge,\n  startWith\n} from \"rxjs\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Element offset\n */\nexport interface ElementOffset {\n  x: number                            /* Horizontal offset */\n  y: number                            /* Vertical offset */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Retrieve element offset\n *\n * @param el - Element\n *\n * @returns Element offset\n */\nexport function getElementOffset(\n  el: HTMLElement\n): ElementOffset {\n  return {\n    x: el.offsetLeft,\n    y: el.offsetTop\n  }\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Watch element offset\n *\n * @param el - Element\n *\n * @returns Element offset observable\n */\nexport function watchElementOffset(\n  el: HTMLElement\n): Observable {\n  return merge(\n    fromEvent(window, \"load\"),\n    fromEvent(window, \"resize\")\n  )\n    .pipe(\n      auditTime(0, animationFrameScheduler),\n      map(() => getElementOffset(el)),\n      startWith(getElementOffset(el))\n    )\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n  Observable,\n  animationFrameScheduler,\n  auditTime,\n  fromEvent,\n  map,\n  merge,\n  startWith\n} from \"rxjs\"\n\nimport { ElementOffset } from \"../_\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Retrieve element content offset (= scroll offset)\n *\n * @param el - Element\n *\n * @returns Element content offset\n */\nexport function getElementContentOffset(\n  el: HTMLElement\n): ElementOffset {\n  return {\n    x: el.scrollLeft,\n    y: el.scrollTop\n  }\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Watch element content offset\n *\n * @param el - Element\n *\n * @returns Element content offset observable\n */\nexport function watchElementContentOffset(\n  el: HTMLElement\n): Observable {\n  return merge(\n    fromEvent(el, \"scroll\"),\n    fromEvent(window, \"resize\")\n  )\n    .pipe(\n      auditTime(0, animationFrameScheduler),\n      map(() => getElementContentOffset(el)),\n      startWith(getElementContentOffset(el))\n    )\n}\n", "/**\r\n * A collection of shims that provide minimal functionality of the ES6 collections.\r\n *\r\n * These implementations are not meant to be used outside of the ResizeObserver\r\n * modules as they cover only a limited range of use cases.\r\n */\r\n/* eslint-disable require-jsdoc, valid-jsdoc */\r\nvar MapShim = (function () {\r\n    if (typeof Map !== 'undefined') {\r\n        return Map;\r\n    }\r\n    /**\r\n     * Returns index in provided array that matches the specified key.\r\n     *\r\n     * @param {Array} arr\r\n     * @param {*} key\r\n     * @returns {number}\r\n     */\r\n    function getIndex(arr, key) {\r\n        var result = -1;\r\n        arr.some(function (entry, index) {\r\n            if (entry[0] === key) {\r\n                result = index;\r\n                return true;\r\n            }\r\n            return false;\r\n        });\r\n        return result;\r\n    }\r\n    return /** @class */ (function () {\r\n        function class_1() {\r\n            this.__entries__ = [];\r\n        }\r\n        Object.defineProperty(class_1.prototype, \"size\", {\r\n            /**\r\n             * @returns {boolean}\r\n             */\r\n            get: function () {\r\n                return this.__entries__.length;\r\n            },\r\n            enumerable: true,\r\n            configurable: true\r\n        });\r\n        /**\r\n         * @param {*} key\r\n         * @returns {*}\r\n         */\r\n        class_1.prototype.get = function (key) {\r\n            var index = getIndex(this.__entries__, key);\r\n            var entry = this.__entries__[index];\r\n            return entry && entry[1];\r\n        };\r\n        /**\r\n         * @param {*} key\r\n         * @param {*} value\r\n         * @returns {void}\r\n         */\r\n        class_1.prototype.set = function (key, value) {\r\n            var index = getIndex(this.__entries__, key);\r\n            if (~index) {\r\n                this.__entries__[index][1] = value;\r\n            }\r\n            else {\r\n                this.__entries__.push([key, value]);\r\n            }\r\n        };\r\n        /**\r\n         * @param {*} key\r\n         * @returns {void}\r\n         */\r\n        class_1.prototype.delete = function (key) {\r\n            var entries = this.__entries__;\r\n            var index = getIndex(entries, key);\r\n            if (~index) {\r\n                entries.splice(index, 1);\r\n            }\r\n        };\r\n        /**\r\n         * @param {*} key\r\n         * @returns {void}\r\n         */\r\n        class_1.prototype.has = function (key) {\r\n            return !!~getIndex(this.__entries__, key);\r\n        };\r\n        /**\r\n         * @returns {void}\r\n         */\r\n        class_1.prototype.clear = function () {\r\n            this.__entries__.splice(0);\r\n        };\r\n        /**\r\n         * @param {Function} callback\r\n         * @param {*} [ctx=null]\r\n         * @returns {void}\r\n         */\r\n        class_1.prototype.forEach = function (callback, ctx) {\r\n            if (ctx === void 0) { ctx = null; }\r\n            for (var _i = 0, _a = this.__entries__; _i < _a.length; _i++) {\r\n                var entry = _a[_i];\r\n                callback.call(ctx, entry[1], entry[0]);\r\n            }\r\n        };\r\n        return class_1;\r\n    }());\r\n})();\n\n/**\r\n * Detects whether window and document objects are available in current environment.\r\n */\r\nvar isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined' && window.document === document;\n\n// Returns global object of a current environment.\r\nvar global$1 = (function () {\r\n    if (typeof global !== 'undefined' && global.Math === Math) {\r\n        return global;\r\n    }\r\n    if (typeof self !== 'undefined' && self.Math === Math) {\r\n        return self;\r\n    }\r\n    if (typeof window !== 'undefined' && window.Math === Math) {\r\n        return window;\r\n    }\r\n    // eslint-disable-next-line no-new-func\r\n    return Function('return this')();\r\n})();\n\n/**\r\n * A shim for the requestAnimationFrame which falls back to the setTimeout if\r\n * first one is not supported.\r\n *\r\n * @returns {number} Requests' identifier.\r\n */\r\nvar requestAnimationFrame$1 = (function () {\r\n    if (typeof requestAnimationFrame === 'function') {\r\n        // It's required to use a bounded function because IE sometimes throws\r\n        // an \"Invalid calling object\" error if rAF is invoked without the global\r\n        // object on the left hand side.\r\n        return requestAnimationFrame.bind(global$1);\r\n    }\r\n    return function (callback) { return setTimeout(function () { return callback(Date.now()); }, 1000 / 60); };\r\n})();\n\n// Defines minimum timeout before adding a trailing call.\r\nvar trailingTimeout = 2;\r\n/**\r\n * Creates a wrapper function which ensures that provided callback will be\r\n * invoked only once during the specified delay period.\r\n *\r\n * @param {Function} callback - Function to be invoked after the delay period.\r\n * @param {number} delay - Delay after which to invoke callback.\r\n * @returns {Function}\r\n */\r\nfunction throttle (callback, delay) {\r\n    var leadingCall = false, trailingCall = false, lastCallTime = 0;\r\n    /**\r\n     * Invokes the original callback function and schedules new invocation if\r\n     * the \"proxy\" was called during current request.\r\n     *\r\n     * @returns {void}\r\n     */\r\n    function resolvePending() {\r\n        if (leadingCall) {\r\n            leadingCall = false;\r\n            callback();\r\n        }\r\n        if (trailingCall) {\r\n            proxy();\r\n        }\r\n    }\r\n    /**\r\n     * Callback invoked after the specified delay. It will further postpone\r\n     * invocation of the original function delegating it to the\r\n     * requestAnimationFrame.\r\n     *\r\n     * @returns {void}\r\n     */\r\n    function timeoutCallback() {\r\n        requestAnimationFrame$1(resolvePending);\r\n    }\r\n    /**\r\n     * Schedules invocation of the original function.\r\n     *\r\n     * @returns {void}\r\n     */\r\n    function proxy() {\r\n        var timeStamp = Date.now();\r\n        if (leadingCall) {\r\n            // Reject immediately following calls.\r\n            if (timeStamp - lastCallTime < trailingTimeout) {\r\n                return;\r\n            }\r\n            // Schedule new call to be in invoked when the pending one is resolved.\r\n            // This is important for \"transitions\" which never actually start\r\n            // immediately so there is a chance that we might miss one if change\r\n            // happens amids the pending invocation.\r\n            trailingCall = true;\r\n        }\r\n        else {\r\n            leadingCall = true;\r\n            trailingCall = false;\r\n            setTimeout(timeoutCallback, delay);\r\n        }\r\n        lastCallTime = timeStamp;\r\n    }\r\n    return proxy;\r\n}\n\n// Minimum delay before invoking the update of observers.\r\nvar REFRESH_DELAY = 20;\r\n// A list of substrings of CSS properties used to find transition events that\r\n// might affect dimensions of observed elements.\r\nvar transitionKeys = ['top', 'right', 'bottom', 'left', 'width', 'height', 'size', 'weight'];\r\n// Check if MutationObserver is available.\r\nvar mutationObserverSupported = typeof MutationObserver !== 'undefined';\r\n/**\r\n * Singleton controller class which handles updates of ResizeObserver instances.\r\n */\r\nvar ResizeObserverController = /** @class */ (function () {\r\n    /**\r\n     * Creates a new instance of ResizeObserverController.\r\n     *\r\n     * @private\r\n     */\r\n    function ResizeObserverController() {\r\n        /**\r\n         * Indicates whether DOM listeners have been added.\r\n         *\r\n         * @private {boolean}\r\n         */\r\n        this.connected_ = false;\r\n        /**\r\n         * Tells that controller has subscribed for Mutation Events.\r\n         *\r\n         * @private {boolean}\r\n         */\r\n        this.mutationEventsAdded_ = false;\r\n        /**\r\n         * Keeps reference to the instance of MutationObserver.\r\n         *\r\n         * @private {MutationObserver}\r\n         */\r\n        this.mutationsObserver_ = null;\r\n        /**\r\n         * A list of connected observers.\r\n         *\r\n         * @private {Array}\r\n         */\r\n        this.observers_ = [];\r\n        this.onTransitionEnd_ = this.onTransitionEnd_.bind(this);\r\n        this.refresh = throttle(this.refresh.bind(this), REFRESH_DELAY);\r\n    }\r\n    /**\r\n     * Adds observer to observers list.\r\n     *\r\n     * @param {ResizeObserverSPI} observer - Observer to be added.\r\n     * @returns {void}\r\n     */\r\n    ResizeObserverController.prototype.addObserver = function (observer) {\r\n        if (!~this.observers_.indexOf(observer)) {\r\n            this.observers_.push(observer);\r\n        }\r\n        // Add listeners if they haven't been added yet.\r\n        if (!this.connected_) {\r\n            this.connect_();\r\n        }\r\n    };\r\n    /**\r\n     * Removes observer from observers list.\r\n     *\r\n     * @param {ResizeObserverSPI} observer - Observer to be removed.\r\n     * @returns {void}\r\n     */\r\n    ResizeObserverController.prototype.removeObserver = function (observer) {\r\n        var observers = this.observers_;\r\n        var index = observers.indexOf(observer);\r\n        // Remove observer if it's present in registry.\r\n        if (~index) {\r\n            observers.splice(index, 1);\r\n        }\r\n        // Remove listeners if controller has no connected observers.\r\n        if (!observers.length && this.connected_) {\r\n            this.disconnect_();\r\n        }\r\n    };\r\n    /**\r\n     * Invokes the update of observers. It will continue running updates insofar\r\n     * it detects changes.\r\n     *\r\n     * @returns {void}\r\n     */\r\n    ResizeObserverController.prototype.refresh = function () {\r\n        var changesDetected = this.updateObservers_();\r\n        // Continue running updates if changes have been detected as there might\r\n        // be future ones caused by CSS transitions.\r\n        if (changesDetected) {\r\n            this.refresh();\r\n        }\r\n    };\r\n    /**\r\n     * Updates every observer from observers list and notifies them of queued\r\n     * entries.\r\n     *\r\n     * @private\r\n     * @returns {boolean} Returns \"true\" if any observer has detected changes in\r\n     *      dimensions of it's elements.\r\n     */\r\n    ResizeObserverController.prototype.updateObservers_ = function () {\r\n        // Collect observers that have active observations.\r\n        var activeObservers = this.observers_.filter(function (observer) {\r\n            return observer.gatherActive(), observer.hasActive();\r\n        });\r\n        // Deliver notifications in a separate cycle in order to avoid any\r\n        // collisions between observers, e.g. when multiple instances of\r\n        // ResizeObserver are tracking the same element and the callback of one\r\n        // of them changes content dimensions of the observed target. Sometimes\r\n        // this may result in notifications being blocked for the rest of observers.\r\n        activeObservers.forEach(function (observer) { return observer.broadcastActive(); });\r\n        return activeObservers.length > 0;\r\n    };\r\n    /**\r\n     * Initializes DOM listeners.\r\n     *\r\n     * @private\r\n     * @returns {void}\r\n     */\r\n    ResizeObserverController.prototype.connect_ = function () {\r\n        // Do nothing if running in a non-browser environment or if listeners\r\n        // have been already added.\r\n        if (!isBrowser || this.connected_) {\r\n            return;\r\n        }\r\n        // Subscription to the \"Transitionend\" event is used as a workaround for\r\n        // delayed transitions. This way it's possible to capture at least the\r\n        // final state of an element.\r\n        document.addEventListener('transitionend', this.onTransitionEnd_);\r\n        window.addEventListener('resize', this.refresh);\r\n        if (mutationObserverSupported) {\r\n            this.mutationsObserver_ = new MutationObserver(this.refresh);\r\n            this.mutationsObserver_.observe(document, {\r\n                attributes: true,\r\n                childList: true,\r\n                characterData: true,\r\n                subtree: true\r\n            });\r\n        }\r\n        else {\r\n            document.addEventListener('DOMSubtreeModified', this.refresh);\r\n            this.mutationEventsAdded_ = true;\r\n        }\r\n        this.connected_ = true;\r\n    };\r\n    /**\r\n     * Removes DOM listeners.\r\n     *\r\n     * @private\r\n     * @returns {void}\r\n     */\r\n    ResizeObserverController.prototype.disconnect_ = function () {\r\n        // Do nothing if running in a non-browser environment or if listeners\r\n        // have been already removed.\r\n        if (!isBrowser || !this.connected_) {\r\n            return;\r\n        }\r\n        document.removeEventListener('transitionend', this.onTransitionEnd_);\r\n        window.removeEventListener('resize', this.refresh);\r\n        if (this.mutationsObserver_) {\r\n            this.mutationsObserver_.disconnect();\r\n        }\r\n        if (this.mutationEventsAdded_) {\r\n            document.removeEventListener('DOMSubtreeModified', this.refresh);\r\n        }\r\n        this.mutationsObserver_ = null;\r\n        this.mutationEventsAdded_ = false;\r\n        this.connected_ = false;\r\n    };\r\n    /**\r\n     * \"Transitionend\" event handler.\r\n     *\r\n     * @private\r\n     * @param {TransitionEvent} event\r\n     * @returns {void}\r\n     */\r\n    ResizeObserverController.prototype.onTransitionEnd_ = function (_a) {\r\n        var _b = _a.propertyName, propertyName = _b === void 0 ? '' : _b;\r\n        // Detect whether transition may affect dimensions of an element.\r\n        var isReflowProperty = transitionKeys.some(function (key) {\r\n            return !!~propertyName.indexOf(key);\r\n        });\r\n        if (isReflowProperty) {\r\n            this.refresh();\r\n        }\r\n    };\r\n    /**\r\n     * Returns instance of the ResizeObserverController.\r\n     *\r\n     * @returns {ResizeObserverController}\r\n     */\r\n    ResizeObserverController.getInstance = function () {\r\n        if (!this.instance_) {\r\n            this.instance_ = new ResizeObserverController();\r\n        }\r\n        return this.instance_;\r\n    };\r\n    /**\r\n     * Holds reference to the controller's instance.\r\n     *\r\n     * @private {ResizeObserverController}\r\n     */\r\n    ResizeObserverController.instance_ = null;\r\n    return ResizeObserverController;\r\n}());\n\n/**\r\n * Defines non-writable/enumerable properties of the provided target object.\r\n *\r\n * @param {Object} target - Object for which to define properties.\r\n * @param {Object} props - Properties to be defined.\r\n * @returns {Object} Target object.\r\n */\r\nvar defineConfigurable = (function (target, props) {\r\n    for (var _i = 0, _a = Object.keys(props); _i < _a.length; _i++) {\r\n        var key = _a[_i];\r\n        Object.defineProperty(target, key, {\r\n            value: props[key],\r\n            enumerable: false,\r\n            writable: false,\r\n            configurable: true\r\n        });\r\n    }\r\n    return target;\r\n});\n\n/**\r\n * Returns the global object associated with provided element.\r\n *\r\n * @param {Object} target\r\n * @returns {Object}\r\n */\r\nvar getWindowOf = (function (target) {\r\n    // Assume that the element is an instance of Node, which means that it\r\n    // has the \"ownerDocument\" property from which we can retrieve a\r\n    // corresponding global object.\r\n    var ownerGlobal = target && target.ownerDocument && target.ownerDocument.defaultView;\r\n    // Return the local global object if it's not possible extract one from\r\n    // provided element.\r\n    return ownerGlobal || global$1;\r\n});\n\n// Placeholder of an empty content rectangle.\r\nvar emptyRect = createRectInit(0, 0, 0, 0);\r\n/**\r\n * Converts provided string to a number.\r\n *\r\n * @param {number|string} value\r\n * @returns {number}\r\n */\r\nfunction toFloat(value) {\r\n    return parseFloat(value) || 0;\r\n}\r\n/**\r\n * Extracts borders size from provided styles.\r\n *\r\n * @param {CSSStyleDeclaration} styles\r\n * @param {...string} positions - Borders positions (top, right, ...)\r\n * @returns {number}\r\n */\r\nfunction getBordersSize(styles) {\r\n    var positions = [];\r\n    for (var _i = 1; _i < arguments.length; _i++) {\r\n        positions[_i - 1] = arguments[_i];\r\n    }\r\n    return positions.reduce(function (size, position) {\r\n        var value = styles['border-' + position + '-width'];\r\n        return size + toFloat(value);\r\n    }, 0);\r\n}\r\n/**\r\n * Extracts paddings sizes from provided styles.\r\n *\r\n * @param {CSSStyleDeclaration} styles\r\n * @returns {Object} Paddings box.\r\n */\r\nfunction getPaddings(styles) {\r\n    var positions = ['top', 'right', 'bottom', 'left'];\r\n    var paddings = {};\r\n    for (var _i = 0, positions_1 = positions; _i < positions_1.length; _i++) {\r\n        var position = positions_1[_i];\r\n        var value = styles['padding-' + position];\r\n        paddings[position] = toFloat(value);\r\n    }\r\n    return paddings;\r\n}\r\n/**\r\n * Calculates content rectangle of provided SVG element.\r\n *\r\n * @param {SVGGraphicsElement} target - Element content rectangle of which needs\r\n *      to be calculated.\r\n * @returns {DOMRectInit}\r\n */\r\nfunction getSVGContentRect(target) {\r\n    var bbox = target.getBBox();\r\n    return createRectInit(0, 0, bbox.width, bbox.height);\r\n}\r\n/**\r\n * Calculates content rectangle of provided HTMLElement.\r\n *\r\n * @param {HTMLElement} target - Element for which to calculate the content rectangle.\r\n * @returns {DOMRectInit}\r\n */\r\nfunction getHTMLElementContentRect(target) {\r\n    // Client width & height properties can't be\r\n    // used exclusively as they provide rounded values.\r\n    var clientWidth = target.clientWidth, clientHeight = target.clientHeight;\r\n    // By this condition we can catch all non-replaced inline, hidden and\r\n    // detached elements. Though elements with width & height properties less\r\n    // than 0.5 will be discarded as well.\r\n    //\r\n    // Without it we would need to implement separate methods for each of\r\n    // those cases and it's not possible to perform a precise and performance\r\n    // effective test for hidden elements. E.g. even jQuery's ':visible' filter\r\n    // gives wrong results for elements with width & height less than 0.5.\r\n    if (!clientWidth && !clientHeight) {\r\n        return emptyRect;\r\n    }\r\n    var styles = getWindowOf(target).getComputedStyle(target);\r\n    var paddings = getPaddings(styles);\r\n    var horizPad = paddings.left + paddings.right;\r\n    var vertPad = paddings.top + paddings.bottom;\r\n    // Computed styles of width & height are being used because they are the\r\n    // only dimensions available to JS that contain non-rounded values. It could\r\n    // be possible to utilize the getBoundingClientRect if only it's data wasn't\r\n    // affected by CSS transformations let alone paddings, borders and scroll bars.\r\n    var width = toFloat(styles.width), height = toFloat(styles.height);\r\n    // Width & height include paddings and borders when the 'border-box' box\r\n    // model is applied (except for IE).\r\n    if (styles.boxSizing === 'border-box') {\r\n        // Following conditions are required to handle Internet Explorer which\r\n        // doesn't include paddings and borders to computed CSS dimensions.\r\n        //\r\n        // We can say that if CSS dimensions + paddings are equal to the \"client\"\r\n        // properties then it's either IE, and thus we don't need to subtract\r\n        // anything, or an element merely doesn't have paddings/borders styles.\r\n        if (Math.round(width + horizPad) !== clientWidth) {\r\n            width -= getBordersSize(styles, 'left', 'right') + horizPad;\r\n        }\r\n        if (Math.round(height + vertPad) !== clientHeight) {\r\n            height -= getBordersSize(styles, 'top', 'bottom') + vertPad;\r\n        }\r\n    }\r\n    // Following steps can't be applied to the document's root element as its\r\n    // client[Width/Height] properties represent viewport area of the window.\r\n    // Besides, it's as well not necessary as the  itself neither has\r\n    // rendered scroll bars nor it can be clipped.\r\n    if (!isDocumentElement(target)) {\r\n        // In some browsers (only in Firefox, actually) CSS width & height\r\n        // include scroll bars size which can be removed at this step as scroll\r\n        // bars are the only difference between rounded dimensions + paddings\r\n        // and \"client\" properties, though that is not always true in Chrome.\r\n        var vertScrollbar = Math.round(width + horizPad) - clientWidth;\r\n        var horizScrollbar = Math.round(height + vertPad) - clientHeight;\r\n        // Chrome has a rather weird rounding of \"client\" properties.\r\n        // E.g. for an element with content width of 314.2px it sometimes gives\r\n        // the client width of 315px and for the width of 314.7px it may give\r\n        // 314px. And it doesn't happen all the time. So just ignore this delta\r\n        // as a non-relevant.\r\n        if (Math.abs(vertScrollbar) !== 1) {\r\n            width -= vertScrollbar;\r\n        }\r\n        if (Math.abs(horizScrollbar) !== 1) {\r\n            height -= horizScrollbar;\r\n        }\r\n    }\r\n    return createRectInit(paddings.left, paddings.top, width, height);\r\n}\r\n/**\r\n * Checks whether provided element is an instance of the SVGGraphicsElement.\r\n *\r\n * @param {Element} target - Element to be checked.\r\n * @returns {boolean}\r\n */\r\nvar isSVGGraphicsElement = (function () {\r\n    // Some browsers, namely IE and Edge, don't have the SVGGraphicsElement\r\n    // interface.\r\n    if (typeof SVGGraphicsElement !== 'undefined') {\r\n        return function (target) { return target instanceof getWindowOf(target).SVGGraphicsElement; };\r\n    }\r\n    // If it's so, then check that element is at least an instance of the\r\n    // SVGElement and that it has the \"getBBox\" method.\r\n    // eslint-disable-next-line no-extra-parens\r\n    return function (target) { return (target instanceof getWindowOf(target).SVGElement &&\r\n        typeof target.getBBox === 'function'); };\r\n})();\r\n/**\r\n * Checks whether provided element is a document element ().\r\n *\r\n * @param {Element} target - Element to be checked.\r\n * @returns {boolean}\r\n */\r\nfunction isDocumentElement(target) {\r\n    return target === getWindowOf(target).document.documentElement;\r\n}\r\n/**\r\n * Calculates an appropriate content rectangle for provided html or svg element.\r\n *\r\n * @param {Element} target - Element content rectangle of which needs to be calculated.\r\n * @returns {DOMRectInit}\r\n */\r\nfunction getContentRect(target) {\r\n    if (!isBrowser) {\r\n        return emptyRect;\r\n    }\r\n    if (isSVGGraphicsElement(target)) {\r\n        return getSVGContentRect(target);\r\n    }\r\n    return getHTMLElementContentRect(target);\r\n}\r\n/**\r\n * Creates rectangle with an interface of the DOMRectReadOnly.\r\n * Spec: https://drafts.fxtf.org/geometry/#domrectreadonly\r\n *\r\n * @param {DOMRectInit} rectInit - Object with rectangle's x/y coordinates and dimensions.\r\n * @returns {DOMRectReadOnly}\r\n */\r\nfunction createReadOnlyRect(_a) {\r\n    var x = _a.x, y = _a.y, width = _a.width, height = _a.height;\r\n    // If DOMRectReadOnly is available use it as a prototype for the rectangle.\r\n    var Constr = typeof DOMRectReadOnly !== 'undefined' ? DOMRectReadOnly : Object;\r\n    var rect = Object.create(Constr.prototype);\r\n    // Rectangle's properties are not writable and non-enumerable.\r\n    defineConfigurable(rect, {\r\n        x: x, y: y, width: width, height: height,\r\n        top: y,\r\n        right: x + width,\r\n        bottom: height + y,\r\n        left: x\r\n    });\r\n    return rect;\r\n}\r\n/**\r\n * Creates DOMRectInit object based on the provided dimensions and the x/y coordinates.\r\n * Spec: https://drafts.fxtf.org/geometry/#dictdef-domrectinit\r\n *\r\n * @param {number} x - X coordinate.\r\n * @param {number} y - Y coordinate.\r\n * @param {number} width - Rectangle's width.\r\n * @param {number} height - Rectangle's height.\r\n * @returns {DOMRectInit}\r\n */\r\nfunction createRectInit(x, y, width, height) {\r\n    return { x: x, y: y, width: width, height: height };\r\n}\n\n/**\r\n * Class that is responsible for computations of the content rectangle of\r\n * provided DOM element and for keeping track of it's changes.\r\n */\r\nvar ResizeObservation = /** @class */ (function () {\r\n    /**\r\n     * Creates an instance of ResizeObservation.\r\n     *\r\n     * @param {Element} target - Element to be observed.\r\n     */\r\n    function ResizeObservation(target) {\r\n        /**\r\n         * Broadcasted width of content rectangle.\r\n         *\r\n         * @type {number}\r\n         */\r\n        this.broadcastWidth = 0;\r\n        /**\r\n         * Broadcasted height of content rectangle.\r\n         *\r\n         * @type {number}\r\n         */\r\n        this.broadcastHeight = 0;\r\n        /**\r\n         * Reference to the last observed content rectangle.\r\n         *\r\n         * @private {DOMRectInit}\r\n         */\r\n        this.contentRect_ = createRectInit(0, 0, 0, 0);\r\n        this.target = target;\r\n    }\r\n    /**\r\n     * Updates content rectangle and tells whether it's width or height properties\r\n     * have changed since the last broadcast.\r\n     *\r\n     * @returns {boolean}\r\n     */\r\n    ResizeObservation.prototype.isActive = function () {\r\n        var rect = getContentRect(this.target);\r\n        this.contentRect_ = rect;\r\n        return (rect.width !== this.broadcastWidth ||\r\n            rect.height !== this.broadcastHeight);\r\n    };\r\n    /**\r\n     * Updates 'broadcastWidth' and 'broadcastHeight' properties with a data\r\n     * from the corresponding properties of the last observed content rectangle.\r\n     *\r\n     * @returns {DOMRectInit} Last observed content rectangle.\r\n     */\r\n    ResizeObservation.prototype.broadcastRect = function () {\r\n        var rect = this.contentRect_;\r\n        this.broadcastWidth = rect.width;\r\n        this.broadcastHeight = rect.height;\r\n        return rect;\r\n    };\r\n    return ResizeObservation;\r\n}());\n\nvar ResizeObserverEntry = /** @class */ (function () {\r\n    /**\r\n     * Creates an instance of ResizeObserverEntry.\r\n     *\r\n     * @param {Element} target - Element that is being observed.\r\n     * @param {DOMRectInit} rectInit - Data of the element's content rectangle.\r\n     */\r\n    function ResizeObserverEntry(target, rectInit) {\r\n        var contentRect = createReadOnlyRect(rectInit);\r\n        // According to the specification following properties are not writable\r\n        // and are also not enumerable in the native implementation.\r\n        //\r\n        // Property accessors are not being used as they'd require to define a\r\n        // private WeakMap storage which may cause memory leaks in browsers that\r\n        // don't support this type of collections.\r\n        defineConfigurable(this, { target: target, contentRect: contentRect });\r\n    }\r\n    return ResizeObserverEntry;\r\n}());\n\nvar ResizeObserverSPI = /** @class */ (function () {\r\n    /**\r\n     * Creates a new instance of ResizeObserver.\r\n     *\r\n     * @param {ResizeObserverCallback} callback - Callback function that is invoked\r\n     *      when one of the observed elements changes it's content dimensions.\r\n     * @param {ResizeObserverController} controller - Controller instance which\r\n     *      is responsible for the updates of observer.\r\n     * @param {ResizeObserver} callbackCtx - Reference to the public\r\n     *      ResizeObserver instance which will be passed to callback function.\r\n     */\r\n    function ResizeObserverSPI(callback, controller, callbackCtx) {\r\n        /**\r\n         * Collection of resize observations that have detected changes in dimensions\r\n         * of elements.\r\n         *\r\n         * @private {Array}\r\n         */\r\n        this.activeObservations_ = [];\r\n        /**\r\n         * Registry of the ResizeObservation instances.\r\n         *\r\n         * @private {Map}\r\n         */\r\n        this.observations_ = new MapShim();\r\n        if (typeof callback !== 'function') {\r\n            throw new TypeError('The callback provided as parameter 1 is not a function.');\r\n        }\r\n        this.callback_ = callback;\r\n        this.controller_ = controller;\r\n        this.callbackCtx_ = callbackCtx;\r\n    }\r\n    /**\r\n     * Starts observing provided element.\r\n     *\r\n     * @param {Element} target - Element to be observed.\r\n     * @returns {void}\r\n     */\r\n    ResizeObserverSPI.prototype.observe = function (target) {\r\n        if (!arguments.length) {\r\n            throw new TypeError('1 argument required, but only 0 present.');\r\n        }\r\n        // Do nothing if current environment doesn't have the Element interface.\r\n        if (typeof Element === 'undefined' || !(Element instanceof Object)) {\r\n            return;\r\n        }\r\n        if (!(target instanceof getWindowOf(target).Element)) {\r\n            throw new TypeError('parameter 1 is not of type \"Element\".');\r\n        }\r\n        var observations = this.observations_;\r\n        // Do nothing if element is already being observed.\r\n        if (observations.has(target)) {\r\n            return;\r\n        }\r\n        observations.set(target, new ResizeObservation(target));\r\n        this.controller_.addObserver(this);\r\n        // Force the update of observations.\r\n        this.controller_.refresh();\r\n    };\r\n    /**\r\n     * Stops observing provided element.\r\n     *\r\n     * @param {Element} target - Element to stop observing.\r\n     * @returns {void}\r\n     */\r\n    ResizeObserverSPI.prototype.unobserve = function (target) {\r\n        if (!arguments.length) {\r\n            throw new TypeError('1 argument required, but only 0 present.');\r\n        }\r\n        // Do nothing if current environment doesn't have the Element interface.\r\n        if (typeof Element === 'undefined' || !(Element instanceof Object)) {\r\n            return;\r\n        }\r\n        if (!(target instanceof getWindowOf(target).Element)) {\r\n            throw new TypeError('parameter 1 is not of type \"Element\".');\r\n        }\r\n        var observations = this.observations_;\r\n        // Do nothing if element is not being observed.\r\n        if (!observations.has(target)) {\r\n            return;\r\n        }\r\n        observations.delete(target);\r\n        if (!observations.size) {\r\n            this.controller_.removeObserver(this);\r\n        }\r\n    };\r\n    /**\r\n     * Stops observing all elements.\r\n     *\r\n     * @returns {void}\r\n     */\r\n    ResizeObserverSPI.prototype.disconnect = function () {\r\n        this.clearActive();\r\n        this.observations_.clear();\r\n        this.controller_.removeObserver(this);\r\n    };\r\n    /**\r\n     * Collects observation instances the associated element of which has changed\r\n     * it's content rectangle.\r\n     *\r\n     * @returns {void}\r\n     */\r\n    ResizeObserverSPI.prototype.gatherActive = function () {\r\n        var _this = this;\r\n        this.clearActive();\r\n        this.observations_.forEach(function (observation) {\r\n            if (observation.isActive()) {\r\n                _this.activeObservations_.push(observation);\r\n            }\r\n        });\r\n    };\r\n    /**\r\n     * Invokes initial callback function with a list of ResizeObserverEntry\r\n     * instances collected from active resize observations.\r\n     *\r\n     * @returns {void}\r\n     */\r\n    ResizeObserverSPI.prototype.broadcastActive = function () {\r\n        // Do nothing if observer doesn't have active observations.\r\n        if (!this.hasActive()) {\r\n            return;\r\n        }\r\n        var ctx = this.callbackCtx_;\r\n        // Create ResizeObserverEntry instance for every active observation.\r\n        var entries = this.activeObservations_.map(function (observation) {\r\n            return new ResizeObserverEntry(observation.target, observation.broadcastRect());\r\n        });\r\n        this.callback_.call(ctx, entries, ctx);\r\n        this.clearActive();\r\n    };\r\n    /**\r\n     * Clears the collection of active observations.\r\n     *\r\n     * @returns {void}\r\n     */\r\n    ResizeObserverSPI.prototype.clearActive = function () {\r\n        this.activeObservations_.splice(0);\r\n    };\r\n    /**\r\n     * Tells whether observer has active observations.\r\n     *\r\n     * @returns {boolean}\r\n     */\r\n    ResizeObserverSPI.prototype.hasActive = function () {\r\n        return this.activeObservations_.length > 0;\r\n    };\r\n    return ResizeObserverSPI;\r\n}());\n\n// Registry of internal observers. If WeakMap is not available use current shim\r\n// for the Map collection as it has all required methods and because WeakMap\r\n// can't be fully polyfilled anyway.\r\nvar observers = typeof WeakMap !== 'undefined' ? new WeakMap() : new MapShim();\r\n/**\r\n * ResizeObserver API. Encapsulates the ResizeObserver SPI implementation\r\n * exposing only those methods and properties that are defined in the spec.\r\n */\r\nvar ResizeObserver = /** @class */ (function () {\r\n    /**\r\n     * Creates a new instance of ResizeObserver.\r\n     *\r\n     * @param {ResizeObserverCallback} callback - Callback that is invoked when\r\n     *      dimensions of the observed elements change.\r\n     */\r\n    function ResizeObserver(callback) {\r\n        if (!(this instanceof ResizeObserver)) {\r\n            throw new TypeError('Cannot call a class as a function.');\r\n        }\r\n        if (!arguments.length) {\r\n            throw new TypeError('1 argument required, but only 0 present.');\r\n        }\r\n        var controller = ResizeObserverController.getInstance();\r\n        var observer = new ResizeObserverSPI(callback, controller, this);\r\n        observers.set(this, observer);\r\n    }\r\n    return ResizeObserver;\r\n}());\r\n// Expose public methods of ResizeObserver.\r\n[\r\n    'observe',\r\n    'unobserve',\r\n    'disconnect'\r\n].forEach(function (method) {\r\n    ResizeObserver.prototype[method] = function () {\r\n        var _a;\r\n        return (_a = observers.get(this))[method].apply(_a, arguments);\r\n    };\r\n});\n\nvar index = (function () {\r\n    // Export existing implementation if available.\r\n    if (typeof global$1.ResizeObserver !== 'undefined') {\r\n        return global$1.ResizeObserver;\r\n    }\r\n    return ResizeObserver;\r\n})();\n\nexport default index;\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport ResizeObserver from \"resize-observer-polyfill\"\nimport {\n  NEVER,\n  Observable,\n  Subject,\n  defer,\n  filter,\n  finalize,\n  map,\n  merge,\n  of,\n  shareReplay,\n  startWith,\n  switchMap,\n  tap\n} from \"rxjs\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Element offset\n */\nexport interface ElementSize {\n  width: number                        /* Element width */\n  height: number                       /* Element height */\n}\n\n/* ----------------------------------------------------------------------------\n * Data\n * ------------------------------------------------------------------------- */\n\n/**\n * Resize observer entry subject\n */\nconst entry$ = new Subject()\n\n/**\n * Resize observer observable\n *\n * This observable will create a `ResizeObserver` on the first subscription\n * and will automatically terminate it when there are no more subscribers.\n * It's quite important to centralize observation in a single `ResizeObserver`,\n * as the performance difference can be quite dramatic, as the link shows.\n *\n * @see https://bit.ly/3iIYfEm - Google Groups on performance\n */\nconst observer$ = defer(() => of(\n  new ResizeObserver(entries => {\n    for (const entry of entries)\n      entry$.next(entry)\n  })\n))\n  .pipe(\n    switchMap(observer => merge(NEVER, of(observer))\n      .pipe(\n        finalize(() => observer.disconnect())\n      )\n    ),\n    shareReplay(1)\n  )\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Retrieve element size\n *\n * @param el - Element\n *\n * @returns Element size\n */\nexport function getElementSize(\n  el: HTMLElement\n): ElementSize {\n  return {\n    width:  el.offsetWidth,\n    height: el.offsetHeight\n  }\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Watch element size\n *\n * This function returns an observable that subscribes to a single internal\n * instance of `ResizeObserver` upon subscription, and emit resize events until\n * termination. Note that this function should not be called with the same\n * element twice, as the first unsubscription will terminate observation.\n *\n * Sadly, we can't use the `DOMRect` objects returned by the observer, because\n * we need the emitted values to be consistent with `getElementSize`, which will\n * return the used values (rounded) and not actual values (unrounded). Thus, we\n * use the `offset*` properties. See the linked GitHub issue.\n *\n * @see https://bit.ly/3m0k3he - GitHub issue\n *\n * @param el - Element\n *\n * @returns Element size observable\n */\nexport function watchElementSize(\n  el: HTMLElement\n): Observable {\n  return observer$\n    .pipe(\n      tap(observer => observer.observe(el)),\n      switchMap(observer => entry$\n        .pipe(\n          filter(({ target }) => target === el),\n          finalize(() => observer.unobserve(el)),\n          map(() => getElementSize(el))\n        )\n      ),\n      startWith(getElementSize(el))\n    )\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { ElementSize } from \"../_\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Retrieve element content size (= scroll width and height)\n *\n * @param el - Element\n *\n * @returns Element content size\n */\nexport function getElementContentSize(\n  el: HTMLElement\n): ElementSize {\n  return {\n    width:  el.scrollWidth,\n    height: el.scrollHeight\n  }\n}\n\n/**\n * Retrieve the overflowing container of an element, if any\n *\n * @param el - Element\n *\n * @returns Overflowing container or nothing\n */\nexport function getElementContainer(\n  el: HTMLElement\n): HTMLElement | undefined {\n  let parent = el.parentElement\n  while (parent)\n    if (\n      el.scrollWidth <= parent.scrollWidth &&\n      el.scrollHeight <= parent.scrollHeight\n    )\n      parent = (el = parent).parentElement\n    else\n      break\n\n  /* Return overflowing container */\n  return parent ? el : undefined\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n  NEVER,\n  Observable,\n  Subject,\n  defer,\n  distinctUntilChanged,\n  filter,\n  finalize,\n  map,\n  merge,\n  of,\n  shareReplay,\n  switchMap,\n  tap\n} from \"rxjs\"\n\nimport {\n  getElementContentSize,\n  getElementSize,\n  watchElementContentOffset\n} from \"~/browser\"\n\n/* ----------------------------------------------------------------------------\n * Data\n * ------------------------------------------------------------------------- */\n\n/**\n * Intersection observer entry subject\n */\nconst entry$ = new Subject()\n\n/**\n * Intersection observer observable\n *\n * This observable will create an `IntersectionObserver` on first subscription\n * and will automatically terminate it when there are no more subscribers.\n *\n * @see https://bit.ly/3iIYfEm - Google Groups on performance\n */\nconst observer$ = defer(() => of(\n  new IntersectionObserver(entries => {\n    for (const entry of entries)\n      entry$.next(entry)\n  }, {\n    threshold: 0\n  })\n))\n  .pipe(\n    switchMap(observer => merge(NEVER, of(observer))\n      .pipe(\n        finalize(() => observer.disconnect())\n      )\n    ),\n    shareReplay(1)\n  )\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch element visibility\n *\n * @param el - Element\n *\n * @returns Element visibility observable\n */\nexport function watchElementVisibility(\n  el: HTMLElement\n): Observable {\n  return observer$\n    .pipe(\n      tap(observer => observer.observe(el)),\n      switchMap(observer => entry$\n        .pipe(\n          filter(({ target }) => target === el),\n          finalize(() => observer.unobserve(el)),\n          map(({ isIntersecting }) => isIntersecting)\n        )\n      )\n    )\n}\n\n/**\n * Watch element boundary\n *\n * This function returns an observable which emits whether the bottom content\n * boundary (= scroll offset) of an element is within a certain threshold.\n *\n * @param el - Element\n * @param threshold - Threshold\n *\n * @returns Element boundary observable\n */\nexport function watchElementBoundary(\n  el: HTMLElement, threshold = 16\n): Observable {\n  return watchElementContentOffset(el)\n    .pipe(\n      map(({ y }) => {\n        const visible = getElementSize(el)\n        const content = getElementContentSize(el)\n        return y >= (\n          content.height - visible.height - threshold\n        )\n      }),\n      distinctUntilChanged()\n    )\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n  Observable,\n  fromEvent,\n  map,\n  startWith\n} from \"rxjs\"\n\nimport { getElement } from \"../element\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Toggle\n */\nexport type Toggle =\n  | \"drawer\"                           /* Toggle for drawer */\n  | \"search\"                           /* Toggle for search */\n\n/* ----------------------------------------------------------------------------\n * Data\n * ------------------------------------------------------------------------- */\n\n/**\n * Toggle map\n */\nconst toggles: Record = {\n  drawer: getElement(\"[data-md-toggle=drawer]\"),\n  search: getElement(\"[data-md-toggle=search]\")\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Retrieve the value of a toggle\n *\n * @param name - Toggle\n *\n * @returns Toggle value\n */\nexport function getToggle(name: Toggle): boolean {\n  return toggles[name].checked\n}\n\n/**\n * Set toggle\n *\n * Simulating a click event seems to be the most cross-browser compatible way\n * of changing the value while also emitting a `change` event. Before, Material\n * used `CustomEvent` to programmatically change the value of a toggle, but this\n * is a much simpler and cleaner solution which doesn't require a polyfill.\n *\n * @param name - Toggle\n * @param value - Toggle value\n */\nexport function setToggle(name: Toggle, value: boolean): void {\n  if (toggles[name].checked !== value)\n    toggles[name].click()\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Watch toggle\n *\n * @param name - Toggle\n *\n * @returns Toggle value observable\n */\nexport function watchToggle(name: Toggle): Observable {\n  const el = toggles[name]\n  return fromEvent(el, \"change\")\n    .pipe(\n      map(() => el.checked),\n      startWith(el.checked)\n    )\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n  Observable,\n  filter,\n  fromEvent,\n  map,\n  share\n} from \"rxjs\"\n\nimport { getActiveElement } from \"../element\"\nimport { getToggle } from \"../toggle\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Keyboard mode\n */\nexport type KeyboardMode =\n  | \"global\"                           /* Global */\n  | \"search\"                           /* Search is open */\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Keyboard\n */\nexport interface Keyboard {\n  mode: KeyboardMode                   /* Keyboard mode */\n  type: string                         /* Key type */\n  claim(): void                        /* Key claim */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Check whether an element may receive keyboard input\n *\n * @param el - Element\n * @param type - Key type\n *\n * @returns Test result\n */\nfunction isSusceptibleToKeyboard(\n  el: HTMLElement, type: string\n): boolean {\n  switch (el.constructor) {\n\n    /* Input elements */\n    case HTMLInputElement:\n      /* @ts-expect-error - omit unnecessary type cast */\n      if (el.type === \"radio\")\n        return /^Arrow/.test(type)\n      else\n        return true\n\n    /* Select element and textarea */\n    case HTMLSelectElement:\n    case HTMLTextAreaElement:\n      return true\n\n    /* Everything else */\n    default:\n      return el.isContentEditable\n  }\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch keyboard\n *\n * @returns Keyboard observable\n */\nexport function watchKeyboard(): Observable {\n  return fromEvent(window, \"keydown\")\n    .pipe(\n      filter(ev => !(ev.metaKey || ev.ctrlKey)),\n      map(ev => ({\n        mode: getToggle(\"search\") ? \"search\" : \"global\",\n        type: ev.key,\n        claim() {\n          ev.preventDefault()\n          ev.stopPropagation()\n        }\n      } as Keyboard)),\n      filter(({ mode, type }) => {\n        if (mode === \"global\") {\n          const active = getActiveElement()\n          if (typeof active !== \"undefined\")\n            return !isSusceptibleToKeyboard(active, type)\n        }\n        return true\n      }),\n      share()\n    )\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Subject } from \"rxjs\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Retrieve location\n *\n * This function returns a `URL` object (and not `Location`) to normalize the\n * typings across the application. Furthermore, locations need to be tracked\n * without setting them and `Location` is a singleton which represents the\n * current location.\n *\n * @returns URL\n */\nexport function getLocation(): URL {\n  return new URL(location.href)\n}\n\n/**\n * Set location\n *\n * @param url - URL to change to\n */\nexport function setLocation(url: URL): void {\n  location.href = url.href\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Watch location\n *\n * @returns Location subject\n */\nexport function watchLocation(): Subject {\n  return new Subject()\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { JSX as JSXInternal } from \"preact\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * HTML attributes\n */\ntype Attributes =\n  & JSXInternal.HTMLAttributes\n  & JSXInternal.SVGAttributes\n  & Record\n\n/**\n * Child element\n */\ntype Child =\n  | HTMLElement\n  | Text\n  | string\n  | number\n\n/* ----------------------------------------------------------------------------\n * Helper functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Append a child node to an element\n *\n * @param el - Element\n * @param child - Child node(s)\n */\nfunction appendChild(el: HTMLElement, child: Child | Child[]): void {\n\n  /* Handle primitive types (including raw HTML) */\n  if (typeof child === \"string\" || typeof child === \"number\") {\n    el.innerHTML += child.toString()\n\n  /* Handle nodes */\n  } else if (child instanceof Node) {\n    el.appendChild(child)\n\n  /* Handle nested children */\n  } else if (Array.isArray(child)) {\n    for (const node of child)\n      appendChild(el, node)\n  }\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * JSX factory\n *\n * @template T - Element type\n *\n * @param tag - HTML tag\n * @param attributes - HTML attributes\n * @param children - Child elements\n *\n * @returns Element\n */\nexport function h(\n  tag: T, attributes?: Attributes | null, ...children: Child[]\n): HTMLElementTagNameMap[T]\n\nexport function h(\n  tag: string, attributes?: Attributes | null, ...children: Child[]\n): T\n\nexport function h(\n  tag: string, attributes?: Attributes | null, ...children: Child[]\n): T {\n  const el = document.createElement(tag)\n\n  /* Set attributes, if any */\n  if (attributes)\n    for (const attr of Object.keys(attributes)) {\n      if (typeof attributes[attr] === \"undefined\")\n        continue\n\n      /* Set default attribute or boolean */\n      if (typeof attributes[attr] !== \"boolean\")\n        el.setAttribute(attr, attributes[attr])\n      else\n        el.setAttribute(attr, \"\")\n    }\n\n  /* Append child nodes */\n  for (const child of children)\n    appendChild(el, child)\n\n  /* Return element */\n  return el as T\n}\n\n/* ----------------------------------------------------------------------------\n * Namespace\n * ------------------------------------------------------------------------- */\n\nexport declare namespace h {\n  namespace JSX {\n    type Element = HTMLElement\n    type IntrinsicElements = JSXInternal.IntrinsicElements\n  }\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Truncate a string after the given number of characters\n *\n * This is not a very reasonable approach, since the summaries kind of suck.\n * It would be better to create something more intelligent, highlighting the\n * search occurrences and making a better summary out of it, but this note was\n * written three years ago, so who knows if we'll ever fix it.\n *\n * @param value - Value to be truncated\n * @param n - Number of characters\n *\n * @returns Truncated value\n */\nexport function truncate(value: string, n: number): string {\n  let i = n\n  if (value.length > i) {\n    while (value[i] !== \" \" && --i > 0) { /* keep eating */ }\n    return `${value.substring(0, i)}...`\n  }\n  return value\n}\n\n/**\n * Round a number for display with repository facts\n *\n * This is a reverse-engineered version of GitHub's weird rounding algorithm\n * for stars, forks and all other numbers. While all numbers below `1,000` are\n * returned as-is, bigger numbers are converted to fixed numbers:\n *\n * - `1,049` => `1k`\n * - `1,050` => `1.1k`\n * - `1,949` => `1.9k`\n * - `1,950` => `2k`\n *\n * @param value - Original value\n *\n * @returns Rounded value\n */\nexport function round(value: number): string {\n  if (value > 999) {\n    const digits = +((value - 950) % 1000 > 99)\n    return `${((value + 0.000001) / 1000).toFixed(digits)}k`\n  } else {\n    return value.toString()\n  }\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n  Observable,\n  filter,\n  fromEvent,\n  map,\n  shareReplay,\n  startWith\n} from \"rxjs\"\n\nimport { getOptionalElement } from \"~/browser\"\nimport { h } from \"~/utilities\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Retrieve location hash\n *\n * @returns Location hash\n */\nexport function getLocationHash(): string {\n  return location.hash.substring(1)\n}\n\n/**\n * Set location hash\n *\n * Setting a new fragment identifier via `location.hash` will have no effect\n * if the value doesn't change. When a new fragment identifier is set, we want\n * the browser to target the respective element at all times, which is why we\n * use this dirty little trick.\n *\n * @param hash - Location hash\n */\nexport function setLocationHash(hash: string): void {\n  const el = h(\"a\", { href: hash })\n  el.addEventListener(\"click\", ev => ev.stopPropagation())\n  el.click()\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Watch location hash\n *\n * @returns Location hash observable\n */\nexport function watchLocationHash(): Observable {\n  return fromEvent(window, \"hashchange\")\n    .pipe(\n      map(getLocationHash),\n      startWith(getLocationHash()),\n      filter(hash => hash.length > 0),\n      shareReplay(1)\n    )\n}\n\n/**\n * Watch location target\n *\n * @returns Location target observable\n */\nexport function watchLocationTarget(): Observable {\n  return watchLocationHash()\n    .pipe(\n      map(id => getOptionalElement(`[id=\"${id}\"]`)!),\n      filter(el => typeof el !== \"undefined\")\n    )\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n  EMPTY,\n  Observable,\n  fromEvent,\n  fromEventPattern,\n  map,\n  merge,\n  startWith,\n  switchMap\n} from \"rxjs\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch media query\n *\n * Note that although `MediaQueryList.addListener` is deprecated we have to\n * use it, because it's the only way to ensure proper downward compatibility.\n *\n * @see https://bit.ly/3dUBH2m - GitHub issue\n *\n * @param query - Media query\n *\n * @returns Media observable\n */\nexport function watchMedia(query: string): Observable {\n  const media = matchMedia(query)\n  return fromEventPattern(next => (\n    media.addListener(() => next(media.matches))\n  ))\n    .pipe(\n      startWith(media.matches)\n    )\n}\n\n/**\n * Watch print mode\n *\n * @returns Print observable\n */\nexport function watchPrint(): Observable {\n  const media = matchMedia(\"print\")\n  return merge(\n    fromEvent(window, \"beforeprint\").pipe(map(() => true)),\n    fromEvent(window, \"afterprint\").pipe(map(() => false))\n  )\n    .pipe(\n      startWith(media.matches)\n    )\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Toggle an observable with a media observable\n *\n * @template T - Data type\n *\n * @param query$ - Media observable\n * @param factory - Observable factory\n *\n * @returns Toggled observable\n */\nexport function at(\n  query$: Observable, factory: () => Observable\n): Observable {\n  return query$\n    .pipe(\n      switchMap(active => active ? factory() : EMPTY)\n    )\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n  EMPTY,\n  Observable,\n  catchError,\n  from,\n  map,\n  of,\n  shareReplay,\n  switchMap,\n  throwError\n} from \"rxjs\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Fetch the given URL\n *\n * If the request fails (e.g. when dispatched from `file://` locations), the\n * observable will complete without emitting a value.\n *\n * @param url - Request URL\n * @param options - Options\n *\n * @returns Response observable\n */\nexport function request(\n  url: URL | string, options: RequestInit = { credentials: \"same-origin\" }\n): Observable {\n  return from(fetch(`${url}`, options))\n    .pipe(\n      catchError(() => EMPTY),\n      switchMap(res => res.status !== 200\n        ? throwError(() => new Error(res.statusText))\n        : of(res)\n      )\n    )\n}\n\n/**\n * Fetch JSON from the given URL\n *\n * @template T - Data type\n *\n * @param url - Request URL\n * @param options - Options\n *\n * @returns Data observable\n */\nexport function requestJSON(\n  url: URL | string, options?: RequestInit\n): Observable {\n  return request(url, options)\n    .pipe(\n      switchMap(res => res.json()),\n      shareReplay(1)\n    )\n}\n\n/**\n * Fetch XML from the given URL\n *\n * @param url - Request URL\n * @param options - Options\n *\n * @returns Data observable\n */\nexport function requestXML(\n  url: URL | string, options?: RequestInit\n): Observable {\n  const dom = new DOMParser()\n  return request(url, options)\n    .pipe(\n      switchMap(res => res.text()),\n      map(res => dom.parseFromString(res, \"text/xml\")),\n      shareReplay(1)\n    )\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n  Observable,\n  defer,\n  finalize,\n  fromEvent,\n  map,\n  merge,\n  switchMap,\n  take,\n  throwError\n} from \"rxjs\"\n\nimport { h } from \"~/utilities\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Create and load a `script` element\n *\n * This function returns an observable that will emit when the script was\n * successfully loaded, or throw an error if it didn't.\n *\n * @param src - Script URL\n *\n * @returns Script observable\n */\nexport function watchScript(src: string): Observable {\n  const script = h(\"script\", { src })\n  return defer(() => {\n    document.head.appendChild(script)\n    return merge(\n      fromEvent(script, \"load\"),\n      fromEvent(script, \"error\")\n        .pipe(\n          switchMap(() => (\n            throwError(() => new ReferenceError(`Invalid script: ${src}`))\n          ))\n        )\n    )\n      .pipe(\n        map(() => undefined),\n        finalize(() => document.head.removeChild(script)),\n        take(1)\n      )\n  })\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n  Observable,\n  fromEvent,\n  map,\n  merge,\n  startWith\n} from \"rxjs\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Viewport offset\n */\nexport interface ViewportOffset {\n  x: number                            /* Horizontal offset */\n  y: number                            /* Vertical offset */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Retrieve viewport offset\n *\n * On iOS Safari, viewport offset can be negative due to overflow scrolling.\n * As this may induce strange behaviors downstream, we'll just limit it to 0.\n *\n * @returns Viewport offset\n */\nexport function getViewportOffset(): ViewportOffset {\n  return {\n    x: Math.max(0, scrollX),\n    y: Math.max(0, scrollY)\n  }\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Watch viewport offset\n *\n * @returns Viewport offset observable\n */\nexport function watchViewportOffset(): Observable {\n  return merge(\n    fromEvent(window, \"scroll\", { passive: true }),\n    fromEvent(window, \"resize\", { passive: true })\n  )\n    .pipe(\n      map(getViewportOffset),\n      startWith(getViewportOffset())\n    )\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n  Observable,\n  fromEvent,\n  map,\n  startWith\n} from \"rxjs\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Viewport size\n */\nexport interface ViewportSize {\n  width: number                        /* Viewport width */\n  height: number                       /* Viewport height */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Retrieve viewport size\n *\n * @returns Viewport size\n */\nexport function getViewportSize(): ViewportSize {\n  return {\n    width:  innerWidth,\n    height: innerHeight\n  }\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Watch viewport size\n *\n * @returns Viewport size observable\n */\nexport function watchViewportSize(): Observable {\n  return fromEvent(window, \"resize\", { passive: true })\n    .pipe(\n      map(getViewportSize),\n      startWith(getViewportSize())\n    )\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n  Observable,\n  combineLatest,\n  map,\n  shareReplay\n} from \"rxjs\"\n\nimport {\n  ViewportOffset,\n  watchViewportOffset\n} from \"../offset\"\nimport {\n  ViewportSize,\n  watchViewportSize\n} from \"../size\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Viewport\n */\nexport interface Viewport {\n  offset: ViewportOffset               /* Viewport offset */\n  size: ViewportSize                   /* Viewport size */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch viewport\n *\n * @returns Viewport observable\n */\nexport function watchViewport(): Observable {\n  return combineLatest([\n    watchViewportOffset(),\n    watchViewportSize()\n  ])\n    .pipe(\n      map(([offset, size]) => ({ offset, size })),\n      shareReplay(1)\n    )\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n  Observable,\n  combineLatest,\n  distinctUntilKeyChanged,\n  map\n} from \"rxjs\"\n\nimport { Header } from \"~/components\"\n\nimport { getElementOffset } from \"../../element\"\nimport { Viewport } from \"../_\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch options\n */\ninterface WatchOptions {\n  viewport$: Observable      /* Viewport observable */\n  header$: Observable
/* Header observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch viewport relative to element\n *\n * @param el - Element\n * @param options - Options\n *\n * @returns Viewport observable\n */\nexport function watchViewportAt(\n el: HTMLElement, { viewport$, header$ }: WatchOptions\n): Observable {\n const size$ = viewport$\n .pipe(\n distinctUntilKeyChanged(\"size\")\n )\n\n /* Compute element offset */\n const offset$ = combineLatest([size$, header$])\n .pipe(\n map(() => getElementOffset(el))\n )\n\n /* Compute relative viewport, return hot observable */\n return combineLatest([header$, viewport$, offset$])\n .pipe(\n map(([{ height }, { offset, size }, { x, y }]) => ({\n offset: {\n x: offset.x - x,\n y: offset.y - y + height\n },\n size\n }))\n )\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { getElement, getLocation } from \"~/browser\"\nimport { Version } from \"~/templates/version\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Feature flag\n */\nexport type Flag =\n | \"announce.dismiss\" /* Dismissable announcement bar */\n | \"content.code.annotate\" /* Code annotations */\n | \"content.lazy\" /* Lazy content elements */\n | \"content.tabs.link\" /* Link content tabs */\n | \"header.autohide\" /* Hide header */\n | \"navigation.expand\" /* Automatic expansion */\n | \"navigation.indexes\" /* Section pages */\n | \"navigation.instant\" /* Instant loading */\n | \"navigation.sections\" /* Section navigation */\n | \"navigation.tabs\" /* Tabs navigation */\n | \"navigation.tabs.sticky\" /* Tabs navigation (sticky) */\n | \"navigation.top\" /* Back-to-top button */\n | \"navigation.tracking\" /* Anchor tracking */\n | \"search.highlight\" /* Search highlighting */\n | \"search.share\" /* Search sharing */\n | \"search.suggest\" /* Search suggestions */\n | \"toc.follow\" /* Following table of contents */\n | \"toc.integrate\" /* Integrated table of contents */\n | \"toc.sticky\" /* sphinx-immaterial: sticky toc headings */\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Translation\n */\nexport type Translation =\n | \"clipboard.copy\" /* Copy to clipboard */\n | \"clipboard.copied\" /* Copied to clipboard */\n | \"search.config.lang\" /* Search language */\n | \"search.config.pipeline\" /* Search pipeline */\n | \"search.config.separator\" /* Search separator */\n | \"search.placeholder\" /* Search */\n | \"search.result.placeholder\" /* Type to start searching */\n | \"search.result.none\" /* No matching documents */\n | \"search.result.one\" /* 1 matching document */\n | \"search.result.other\" /* # matching documents */\n | \"search.result.more.one\" /* 1 more on this page */\n | \"search.result.more.other\" /* # more on this page */\n | \"search.result.term.missing\" /* Missing */\n | \"select.version.title\" /* Version selector */\n\n/**\n * Translations\n */\nexport type Translations = Record\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Versioning\n */\nexport interface Versioning {\n provider: \"mike\" /* Version provider */\n staticVersions?: Version[] /* Static version list to use */\n versionPath?: string /* Base-relative path to versions.json */\n default?: string /* Default version */\n}\n\n/**\n * Configuration\n */\nexport interface Config {\n base: string /* Base URL */\n features: Flag[] /* Feature flags */\n translations: Translations /* Translations */\n tags?: Record /* Tags mapping */\n version?: Versioning /* Versioning */\n}\n\n/* ----------------------------------------------------------------------------\n * Data\n * ------------------------------------------------------------------------- */\n\n/**\n * Retrieve global configuration and make base URL absolute\n */\nconst script = getElement(\"#__config\")\nconst config: Config = JSON.parse(script.textContent!)\nconfig.base = `${new URL(config.base, getLocation())}`\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Retrieve global configuration\n *\n * @returns Global configuration\n */\nexport function configuration(): Config {\n return config\n}\n\n/**\n * Check whether a feature flag is enabled\n *\n * @param flag - Feature flag\n *\n * @returns Test result\n */\nexport function feature(flag: Flag): boolean {\n return config.features.includes(flag)\n}\n\n/**\n * Retrieve the translation for the given key\n *\n * @param key - Key to be translated\n * @param value - Positional value, if any\n *\n * @returns Translation\n */\nexport function translation(\n key: Translation, value?: string | number\n): string {\n return typeof value !== \"undefined\"\n ? config.translations[key].replace(\"#\", value.toString())\n : config.translations[key]\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { getElement, getElements } from \"~/browser\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Component type\n */\nexport type ComponentType =\n | \"announce\" /* Announcement bar */\n | \"container\" /* Container */\n | \"consent\" /* Consent */\n | \"content\" /* Content */\n | \"dialog\" /* Dialog */\n | \"header\" /* Header */\n | \"header-title\" /* Header title */\n | \"header-topic\" /* Header topic */\n | \"main\" /* Main area */\n | \"outdated\" /* Version warning */\n | \"palette\" /* Color palette */\n | \"search\" /* Search */\n | \"search-query\" /* Search input */\n | \"search-result\" /* Search results */\n | \"search-share\" /* Search sharing */\n | \"search-suggest\" /* Search suggestions */\n | \"sidebar\" /* Sidebar */\n | \"skip\" /* Skip link */\n | \"source\" /* Repository information */\n | \"tabs\" /* Navigation tabs */\n | \"toc\" /* Table of contents */\n | \"top\" /* Back-to-top button */\n\n/**\n * Component\n *\n * @template T - Component type\n * @template U - Reference type\n */\nexport type Component<\n T extends {} = {},\n U extends HTMLElement = HTMLElement\n> =\n T & {\n ref: U /* Component reference */\n }\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Component type map\n */\ninterface ComponentTypeMap {\n \"announce\": HTMLElement /* Announcement bar */\n \"container\": HTMLElement /* Container */\n \"consent\": HTMLElement /* Consent */\n \"content\": HTMLElement /* Content */\n \"dialog\": HTMLElement /* Dialog */\n \"header\": HTMLElement /* Header */\n \"header-title\": HTMLElement /* Header title */\n \"header-topic\": HTMLElement /* Header topic */\n \"main\": HTMLElement /* Main area */\n \"outdated\": HTMLElement /* Version warning */\n \"palette\": HTMLElement /* Color palette */\n \"search\": HTMLElement /* Search */\n \"search-query\": HTMLInputElement /* Search input */\n \"search-result\": HTMLElement /* Search results */\n \"search-share\": HTMLAnchorElement /* Search sharing */\n \"search-suggest\": HTMLElement /* Search suggestions */\n \"sidebar\": HTMLElement /* Sidebar */\n \"skip\": HTMLAnchorElement /* Skip link */\n \"source\": HTMLAnchorElement /* Repository information */\n \"tabs\": HTMLElement /* Navigation tabs */\n \"toc\": HTMLElement /* Table of contents */\n \"top\": HTMLAnchorElement /* Back-to-top button */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Retrieve the element for a given component or throw a reference error\n *\n * @template T - Component type\n *\n * @param type - Component type\n * @param node - Node of reference\n *\n * @returns Element\n */\nexport function getComponentElement(\n type: T, node: ParentNode = document\n): ComponentTypeMap[T] {\n return getElement(`[data-md-component=${type}]`, node)\n}\n\n/**\n * Retrieve all elements for a given component\n *\n * @template T - Component type\n *\n * @param type - Component type\n * @param node - Node of reference\n *\n * @returns Elements\n */\nexport function getComponentElements(\n type: T, node: ParentNode = document\n): ComponentTypeMap[T][] {\n return getElements(`[data-md-component=${type}]`, node)\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n EMPTY,\n Observable,\n Subject,\n defer,\n finalize,\n fromEvent,\n map,\n startWith,\n tap\n} from \"rxjs\"\n\nimport { feature } from \"~/_\"\nimport { getElement } from \"~/browser\"\n\nimport { Component } from \"../_\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Announcement bar\n */\nexport interface Announce {\n hash: number /* Content hash */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch announcement bar\n *\n * @param el - Announcement bar element\n *\n * @returns Announcement bar observable\n */\nexport function watchAnnounce(\n el: HTMLElement\n): Observable {\n const button = getElement(\".md-typeset > :first-child\", el)\n return fromEvent(button, \"click\", { once: true })\n .pipe(\n map(() => getElement(\".md-typeset\", el)),\n map(content => ({ hash: __md_hash(content.innerHTML) }))\n )\n}\n\n/**\n * Mount announcement bar\n *\n * @param el - Announcement bar element\n *\n * @returns Announcement bar component observable\n */\nexport function mountAnnounce(\n el: HTMLElement\n): Observable> {\n if (!feature(\"announce.dismiss\") || !el.childElementCount)\n return EMPTY\n\n /* Mount component on subscription */\n return defer(() => {\n const push$ = new Subject()\n push$\n .pipe(\n startWith({ hash: __md_get(\"__announce\") })\n )\n .subscribe(({ hash }) => {\n if (hash && hash === (__md_get(\"__announce\") ?? hash)) {\n el.hidden = true\n\n /* Persist preference in local storage */\n __md_set(\"__announce\", hash)\n }\n })\n\n /* Create and return component */\n return watchAnnounce(el)\n .pipe(\n tap(state => push$.next(state)),\n finalize(() => push$.complete()),\n map(state => ({ ref: el, ...state }))\n )\n })\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n Observable,\n Subject,\n finalize,\n map,\n tap\n} from \"rxjs\"\n\nimport { Component } from \"../_\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Consent\n */\nexport interface Consent {\n hidden: boolean /* Consent is hidden */\n}\n\n/**\n * Consent defaults\n */\nexport interface ConsentDefaults {\n analytics?: boolean /* Consent for Analytics */\n github?: boolean /* Consent for GitHub */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch options\n */\ninterface WatchOptions {\n target$: Observable /* Target observable */\n}\n\n/**\n * Mount options\n */\ninterface MountOptions {\n target$: Observable /* Target observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch consent\n *\n * @param el - Consent element\n * @param options - Options\n *\n * @returns Consent observable\n */\nexport function watchConsent(\n el: HTMLElement, { target$ }: WatchOptions\n): Observable {\n return target$\n .pipe(\n map(target => ({ hidden: target !== el }))\n )\n}\n\n/* ------------------------------------------------------------------------- */\n\n/**\n * Mount consent\n *\n * @param el - Consent element\n * @param options - Options\n *\n * @returns Consent component observable\n */\nexport function mountConsent(\n el: HTMLElement, options: MountOptions\n): Observable> {\n const internal$ = new Subject()\n internal$.subscribe(({ hidden }) => {\n el.hidden = hidden\n })\n\n /* Create and return component */\n return watchConsent(el, options)\n .pipe(\n tap(state => internal$.next(state)),\n finalize(() => internal$.complete()),\n map(state => ({ ref: el, ...state }))\n )\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport ClipboardJS from \"clipboard\"\nimport {\n EMPTY,\n Observable,\n Subject,\n defer,\n distinctUntilChanged,\n distinctUntilKeyChanged,\n filter,\n finalize,\n map,\n mergeWith,\n switchMap,\n take,\n tap\n} from \"rxjs\"\n\nimport { feature } from \"~/_\"\nimport {\n getElementContentSize,\n watchElementSize,\n watchElementVisibility\n} from \"~/browser\"\nimport { renderClipboardButton } from \"~/templates\"\n\nimport { Component } from \"../../../_\"\nimport {\n Annotation,\n mountAnnotationList\n} from \"../../annotation\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Code block\n */\nexport interface CodeBlock {\n scrollable: boolean /* Code block overflows */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount options\n */\ninterface MountOptions {\n target$: Observable /* Location target observable */\n print$: Observable /* Media print observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Data\n * ------------------------------------------------------------------------- */\n\n/**\n * Global sequence number for code blocks\n */\nlet sequence = 0\n\n/* ----------------------------------------------------------------------------\n * Helper functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Find candidate list element directly following a code block\n *\n * @param el - Code block element\n *\n * @returns List element or nothing\n */\nfunction findCandidateList(el: HTMLElement): HTMLElement | undefined {\n if (el.nextElementSibling) {\n const sibling = el.nextElementSibling as HTMLElement\n if (sibling.tagName === \"OL\")\n return sibling\n\n /* Skip empty paragraphs - see https://bit.ly/3r4ZJ2O */\n else if (sibling.tagName === \"P\" && !sibling.children.length)\n return findCandidateList(sibling)\n }\n\n /* Everything else */\n return undefined\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch code block\n *\n * This function monitors size changes of the viewport, as well as switches of\n * content tabs with embedded code blocks, as both may trigger overflow.\n *\n * @param el - Code block element\n *\n * @returns Code block observable\n */\nexport function watchCodeBlock(\n el: HTMLElement\n): Observable {\n return watchElementSize(el)\n .pipe(\n map(({ width }) => {\n const content = getElementContentSize(el)\n return {\n scrollable: content.width > width\n }\n }),\n distinctUntilKeyChanged(\"scrollable\")\n )\n}\n\n/**\n * Mount code block\n *\n * This function ensures that an overflowing code block is focusable through\n * keyboard, so it can be scrolled without a mouse to improve on accessibility.\n * Furthermore, if code annotations are enabled, they are mounted if and only\n * if the code block is currently visible, e.g., not in a hidden content tab.\n *\n * Note that code blocks may be mounted eagerly or lazily. If they're mounted\n * lazily (on first visibility), code annotation anchor links will not work,\n * as they are evaluated on initial page load, and code annotations in general\n * might feel a little bumpier.\n *\n * @param el - Code block element\n * @param options - Options\n *\n * @returns Code block and annotation component observable\n */\nexport function mountCodeBlock(\n el: HTMLElement, options: MountOptions\n): Observable> {\n const { matches: hover } = matchMedia(\"(hover)\")\n\n /* Defer mounting of code block - see https://bit.ly/3vHVoVD */\n const factory$ = defer(() => {\n const push$ = new Subject()\n push$.subscribe(({ scrollable }) => {\n if (scrollable && hover)\n el.setAttribute(\"tabindex\", \"0\")\n else\n el.removeAttribute(\"tabindex\")\n })\n\n /* Render button for Clipboard.js integration */\n if (ClipboardJS.isSupported()) {\n const parent = el.closest(\"pre\")!\n parent.id = `__code_${++sequence}`\n parent.insertBefore(\n renderClipboardButton(parent.id),\n el\n )\n }\n\n /* Handle code annotations */\n const container = el.closest(\".highlight\")\n if (container instanceof HTMLElement) {\n const list = findCandidateList(container)\n\n /* Mount code annotations, if enabled */\n if (typeof list !== \"undefined\" && (\n container.classList.contains(\"annotate\") ||\n feature(\"content.code.annotate\")\n )) {\n const annotations$ = mountAnnotationList(list, el, options)\n\n /* Create and return component */\n return watchCodeBlock(el)\n .pipe(\n tap(state => push$.next(state)),\n finalize(() => push$.complete()),\n map(state => ({ ref: el, ...state })),\n mergeWith(\n watchElementSize(container)\n .pipe(\n map(({ width, height }) => width && height),\n distinctUntilChanged(),\n switchMap(active => active ? annotations$ : EMPTY)\n )\n )\n )\n }\n }\n\n /* Create and return component */\n return watchCodeBlock(el)\n .pipe(\n tap(state => push$.next(state)),\n finalize(() => push$.complete()),\n map(state => ({ ref: el, ...state }))\n )\n })\n\n /* Mount code block lazily */\n if (feature(\"content.lazy\"))\n return watchElementVisibility(el)\n .pipe(\n filter(visible => visible),\n take(1),\n switchMap(() => factory$)\n )\n\n /* Mount code block */\n return factory$\n}\n", "/*\n * Copyright (c) 2016-2021 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { h } from \"~/utilities\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Render a tooltip\n *\n * @param id - Tooltip identifier\n *\n * @returns Element\n */\nexport function renderTooltip(id?: string): HTMLElement {\n return (\n
\n
\n
\n )\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { h } from \"~/utilities\"\n\nimport { renderTooltip } from \"../tooltip\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Render an annotation\n *\n * @param id - Annotation identifier\n * @param prefix - Tooltip identifier prefix\n *\n * @returns Element\n */\nexport function renderAnnotation(\n id: string | number, prefix?: string\n): HTMLElement {\n prefix = prefix ? `${prefix}_annotation_${id}` : undefined\n\n /* Render tooltip with anchor, if given */\n if (prefix) {\n const anchor = prefix ? `#${prefix}` : undefined\n return (\n \n )\n } else {\n return (\n \n )\n }\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { translation } from \"~/_\"\nimport { h } from \"~/utilities\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Render a 'copy-to-clipboard' button\n *\n * @param id - Unique identifier\n *\n * @returns Element\n */\nexport function renderClipboardButton(id: string): HTMLElement {\n return (\n code`}\n >\n )\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { ComponentChild } from \"preact\"\n\nimport { configuration, feature, translation } from \"~/_\"\nimport {\n SearchDocument,\n SearchMetadata,\n SearchResultItem\n} from \"~/integrations/search\"\nimport { h, truncate } from \"~/utilities\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Render flag\n */\nconst enum Flag {\n TEASER = 1, /* Render teaser */\n PARENT = 2 /* Render as parent */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper function\n * ------------------------------------------------------------------------- */\n\n/**\n * Render a search document\n *\n * @param document - Search document\n * @param flag - Render flags\n *\n * @returns Element\n */\nfunction renderSearchDocument(\n document: SearchDocument & SearchMetadata, flag: Flag\n): HTMLElement {\n const parent = flag & Flag.PARENT\n const teaser = flag & Flag.TEASER\n\n /* Render missing query terms */\n const missing = Object.keys(document.terms)\n .filter(key => !document.terms[key])\n .reduce((list, key) => [\n ...list, {key}, \" \"\n ], [])\n .slice(0, -1)\n\n /* Assemble query string for highlighting */\n const url = new URL(document.location)\n if (feature(\"search.highlight\"))\n url.searchParams.set(\"h\", Object.entries(document.terms)\n .filter(([, match]) => match)\n .reduce((highlight, [value]) => `${highlight} ${value}`.trim(), \"\")\n )\n\n /* Render article or section, depending on flags */\n const { tags } = configuration()\n return (\n \n \n {parent > 0 &&
}\n

{document.title}

\n {teaser > 0 && document.text.length > 0 &&\n

\n {truncate(document.text, 320)}\n

\n }\n {document.tags && (\n
\n {document.tags.map(tag => {\n const id = tag.replace(/<[^>]+>/g, \"\")\n const type = tags\n ? id in tags\n ? `md-tag-icon md-tag-icon--${tags[id]}`\n : \"md-tag-icon\"\n : \"\"\n return (\n {tag}\n )\n })}\n
\n )}\n {teaser > 0 && missing.length > 0 &&\n

\n {translation(\"search.result.term.missing\")}: {...missing}\n

\n }\n \n
\n )\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Render a search result\n *\n * @param result - Search result\n *\n * @returns Element\n */\nexport function renderSearchResultItem(\n result: SearchResultItem\n): HTMLElement {\n const threshold = result[0].score\n const docs = [...result]\n\n /* Find and extract parent article */\n const parent = docs.findIndex(doc => !doc.location.includes(\"#\"))\n const [article] = docs.splice(parent === -1 ? 0 : parent, 1)\n\n /* Determine last index above threshold */\n let index = docs.findIndex(doc => doc.score < threshold)\n if (index === -1)\n index = docs.length\n\n /* Partition sections */\n const best = docs.slice(0, index)\n const more = docs.slice(index)\n\n /* Render children */\n const children = [\n renderSearchDocument(article, Flag.PARENT | Flag.TEASER),\n ...best.map(section => renderSearchDocument(section, Flag.TEASER)),\n ...more.length ? [\n
\n \n {more.length > 0 && more.length === 1\n ? translation(\"search.result.more.one\")\n : translation(\"search.result.more.other\", more.length)\n }\n \n {...more.map(section => renderSearchDocument(section, Flag.TEASER))}\n
\n ] : []\n ]\n\n /* Render search result */\n return (\n
  • \n {children}\n
  • \n )\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { SourceFacts } from \"~/components\"\nimport { h, round } from \"~/utilities\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Render repository facts\n *\n * @param facts - Repository facts\n *\n * @returns Element\n */\nexport function renderSourceFacts(facts: SourceFacts): HTMLElement {\n return (\n
      \n {Object.entries(facts).map(([key, value]) => (\n
    • \n {typeof value === \"number\" ? round(value) : value}\n
    • \n ))}\n
    \n )\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { h } from \"~/utilities\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Tabbed control type\n */\ntype TabbedControlType =\n | \"prev\"\n | \"next\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Render control for content tabs\n *\n * @param type - Control type\n *\n * @returns Element\n */\nexport function renderTabbedControl(\n type: TabbedControlType\n): HTMLElement {\n const classes = `tabbed-control tabbed-control--${type}`\n return (\n \n )\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { h } from \"~/utilities\"\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Render a table inside a wrapper to improve scrolling on mobile\n *\n * @param table - Table element\n *\n * @returns Element\n */\nexport function renderTable(table: HTMLElement): HTMLElement {\n return (\n
    \n
    \n {table}\n
    \n
    \n )\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { configuration, translation } from \"~/_\"\nimport { h } from \"~/utilities\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Version\n */\nexport interface Version {\n version: string /* Version identifier */\n title: string /* Version title */\n aliases: string[] /* Version aliases */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Render a version\n *\n * @param version - Version\n *\n * @returns Element\n */\nfunction renderVersion(version: Version): HTMLElement {\n const config = configuration()\n\n /* Ensure trailing slash, see https://bit.ly/3rL5u3f */\n const url = new URL(`${version.version}/`, new URL(\"../\", config.base))\n return (\n
  • \n \n {version.title}\n \n
  • \n )\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Render a version selector\n *\n * @param versions - Versions\n * @param active - Active version\n *\n * @returns Element\n */\nexport function renderVersionSelector(\n versions: Version[], active: Version\n): HTMLElement {\n return (\n
    \n \n {active.title}\n \n
      \n {versions.map(renderVersion)}\n
    \n
    \n )\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n Observable,\n Subject,\n animationFrameScheduler,\n auditTime,\n combineLatest,\n debounceTime,\n defer,\n delay,\n filter,\n finalize,\n fromEvent,\n map,\n merge,\n switchMap,\n take,\n takeLast,\n takeUntil,\n tap,\n throttleTime,\n withLatestFrom\n} from \"rxjs\"\n\nimport {\n ElementOffset,\n getActiveElement,\n getElementSize,\n watchElementContentOffset,\n watchElementFocus,\n watchElementOffset,\n watchElementVisibility\n} from \"~/browser\"\n\nimport { Component } from \"../../../_\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Annotation\n */\nexport interface Annotation {\n active: boolean /* Annotation is active */\n offset: ElementOffset /* Annotation offset */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount options\n */\ninterface MountOptions {\n target$: Observable /* Location target observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch annotation\n *\n * @param el - Annotation element\n * @param container - Containing element\n *\n * @returns Annotation observable\n */\nexport function watchAnnotation(\n el: HTMLElement, container: HTMLElement\n): Observable {\n const offset$ = defer(() => combineLatest([\n watchElementOffset(el),\n watchElementContentOffset(container)\n ]))\n .pipe(\n map(([{ x, y }, scroll]): ElementOffset => {\n const { width, height } = getElementSize(el)\n return ({\n x: x - scroll.x + width / 2,\n y: y - scroll.y + height / 2\n })\n })\n )\n\n /* Actively watch annotation on focus */\n return watchElementFocus(el)\n .pipe(\n switchMap(active => offset$\n .pipe(\n map(offset => ({ active, offset })),\n take(+!active || Infinity)\n )\n )\n )\n}\n\n/**\n * Mount annotation\n *\n * @param el - Annotation element\n * @param container - Containing element\n * @param options - Options\n *\n * @returns Annotation component observable\n */\nexport function mountAnnotation(\n el: HTMLElement, container: HTMLElement, { target$ }: MountOptions\n): Observable> {\n const [tooltip, index] = Array.from(el.children)\n\n /* Mount component on subscription */\n return defer(() => {\n const push$ = new Subject()\n const done$ = push$.pipe(takeLast(1))\n push$.subscribe({\n\n /* Handle emission */\n next({ offset }) {\n el.style.setProperty(\"--md-tooltip-x\", `${offset.x}px`)\n el.style.setProperty(\"--md-tooltip-y\", `${offset.y}px`)\n },\n\n /* Handle complete */\n complete() {\n el.style.removeProperty(\"--md-tooltip-x\")\n el.style.removeProperty(\"--md-tooltip-y\")\n }\n })\n\n /* Start animation only when annotation is visible */\n watchElementVisibility(el)\n .pipe(\n takeUntil(done$)\n )\n .subscribe(visible => {\n el.toggleAttribute(\"data-md-visible\", visible)\n })\n\n /* Toggle tooltip presence to mitigate empty lines when copying */\n merge(\n push$.pipe(filter(({ active }) => active)),\n push$.pipe(debounceTime(250), filter(({ active }) => !active))\n )\n .subscribe({\n\n /* Handle emission */\n next({ active }) {\n if (active)\n el.prepend(tooltip)\n else\n tooltip.remove()\n },\n\n /* Handle complete */\n complete() {\n el.prepend(tooltip)\n }\n })\n\n /* Toggle tooltip visibility */\n push$\n .pipe(\n auditTime(16, animationFrameScheduler)\n )\n .subscribe(({ active }) => {\n tooltip.classList.toggle(\"md-tooltip--active\", active)\n })\n\n /* Track relative origin of tooltip */\n push$\n .pipe(\n throttleTime(125, animationFrameScheduler),\n filter(() => !!el.offsetParent),\n map(() => el.offsetParent!.getBoundingClientRect()),\n map(({ x }) => x)\n )\n .subscribe({\n\n /* Handle emission */\n next(origin) {\n if (origin)\n el.style.setProperty(\"--md-tooltip-0\", `${-origin}px`)\n else\n el.style.removeProperty(\"--md-tooltip-0\")\n },\n\n /* Handle complete */\n complete() {\n el.style.removeProperty(\"--md-tooltip-0\")\n }\n })\n\n /* Allow to copy link without scrolling to anchor */\n fromEvent(index, \"click\")\n .pipe(\n takeUntil(done$),\n filter(ev => !(ev.metaKey || ev.ctrlKey))\n )\n .subscribe(ev => ev.preventDefault())\n\n /* Allow to open link in new tab or blur on close */\n fromEvent(index, \"mousedown\")\n .pipe(\n takeUntil(done$),\n withLatestFrom(push$)\n )\n .subscribe(([ev, { active }]) => {\n\n /* Open in new tab */\n if (ev.button !== 0 || ev.metaKey || ev.ctrlKey) {\n ev.preventDefault()\n\n /* Close annotation */\n } else if (active) {\n ev.preventDefault()\n\n /* Focus parent annotation, if any */\n const parent = el.parentElement!.closest(\".md-annotation\")\n if (parent instanceof HTMLElement)\n parent.focus()\n else\n getActiveElement()?.blur()\n }\n })\n\n /* Open and focus annotation on location target */\n target$\n .pipe(\n takeUntil(done$),\n filter(target => target === tooltip),\n delay(125)\n )\n .subscribe(() => el.focus())\n\n /* Create and return component */\n return watchAnnotation(el, container)\n .pipe(\n tap(state => push$.next(state)),\n finalize(() => push$.complete()),\n map(state => ({ ref: el, ...state }))\n )\n })\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n EMPTY,\n Observable,\n Subject,\n defer,\n finalize,\n merge,\n share,\n takeLast,\n takeUntil\n} from \"rxjs\"\n\nimport {\n getElement,\n getElements,\n getOptionalElement\n} from \"~/browser\"\nimport { renderAnnotation } from \"~/templates\"\n\nimport { Component } from \"../../../_\"\nimport {\n Annotation,\n mountAnnotation\n} from \"../_\"\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount options\n */\ninterface MountOptions {\n target$: Observable /* Location target observable */\n print$: Observable /* Media print observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Find all annotation markers in the given code block\n *\n * @param container - Containing element\n *\n * @returns Annotation markers\n */\nfunction findAnnotationMarkers(container: HTMLElement): Text[] {\n const markers: Text[] = []\n for (const el of getElements(\".c, .c1, .cm\", container)) {\n const nodes: Text[] = []\n\n /* Find all text nodes in current element */\n const it = document.createNodeIterator(el, NodeFilter.SHOW_TEXT)\n for (let node = it.nextNode(); node; node = it.nextNode())\n nodes.push(node as Text)\n\n /* Find all markers in each text node */\n for (let text of nodes) {\n let match: RegExpExecArray | null\n\n /* Split text at marker and add to list */\n while ((match = /(\\(\\d+\\))(!)?/.exec(text.textContent!))) {\n const [, id, force] = match\n if (typeof force === \"undefined\") {\n const marker = text.splitText(match.index)\n text = marker.splitText(id.length)\n markers.push(marker)\n\n /* Replace entire text with marker */\n } else {\n text.textContent = id\n markers.push(text)\n break\n }\n }\n }\n }\n return markers\n}\n\n/**\n * Swap the child nodes of two elements\n *\n * @param source - Source element\n * @param target - Target element\n */\nfunction swap(source: HTMLElement, target: HTMLElement): void {\n target.append(...Array.from(source.childNodes))\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount annotation list\n *\n * This function analyzes the containing code block and checks for markers\n * referring to elements in the given annotation list. If no markers are found,\n * the list is left untouched. Otherwise, list elements are rendered as\n * annotations inside the code block.\n *\n * @param el - Annotation list element\n * @param container - Containing element\n * @param options - Options\n *\n * @returns Annotation component observable\n */\nexport function mountAnnotationList(\n el: HTMLElement, container: HTMLElement, { target$, print$ }: MountOptions\n): Observable> {\n\n /* Compute prefix for tooltip anchors */\n const parent = container.closest(\"[id]\")\n const prefix = parent?.id\n\n /* Find and replace all markers with empty annotations */\n const annotations = new Map()\n for (const marker of findAnnotationMarkers(container)) {\n const [, id] = marker.textContent!.match(/\\((\\d+)\\)/)!\n if (getOptionalElement(`li:nth-child(${id})`, el)) {\n annotations.set(id, renderAnnotation(id, prefix))\n marker.replaceWith(annotations.get(id)!)\n }\n }\n\n /* Keep list if there are no annotations to render */\n if (annotations.size === 0)\n return EMPTY\n\n /* Mount component on subscription */\n return defer(() => {\n const done$ = new Subject()\n\n /* Retrieve container pairs for swapping */\n const pairs: [HTMLElement, HTMLElement][] = []\n for (const [id, annotation] of annotations)\n pairs.push([\n getElement(\".md-typeset\", annotation),\n getElement(`li:nth-child(${id})`, el)\n ])\n\n /* Handle print mode - see https://bit.ly/3rgPdpt */\n print$\n .pipe(\n takeUntil(done$.pipe(takeLast(1)))\n )\n .subscribe(active => {\n el.hidden = !active\n\n /* Show annotations in code block or list (print) */\n for (const [inner, child] of pairs)\n if (!active)\n swap(child, inner)\n else\n swap(inner, child)\n })\n\n /* Create and return component */\n return merge(...[...annotations]\n .map(([, annotation]) => (\n mountAnnotation(annotation, container, { target$ })\n ))\n )\n .pipe(\n finalize(() => done$.complete()),\n share()\n )\n })\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n Observable,\n map,\n of,\n shareReplay,\n tap\n} from \"rxjs\"\n\nimport { configuration } from \"~/_\"\nimport { watchScript } from \"~/browser\"\nimport { h } from \"~/utilities\"\n\nimport { Component } from \"../../../_\"\n\nimport themeCSS from \"./index.css\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Mermaid diagram\n */\nexport interface Mermaid {}\n\n/* ----------------------------------------------------------------------------\n * Data\n * ------------------------------------------------------------------------- */\n\n/**\n * Mermaid instance observable\n */\nlet mermaid$: Observable\n\n/**\n * Global sequence number for diagrams\n */\nlet sequence = 0\n\n/**\n * The config used to get a base url.\n */\nconst config = configuration()\n\n/* ----------------------------------------------------------------------------\n * Helper functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Fetch Mermaid script\n *\n * @returns Mermaid scripts observable\n */\nfunction fetchScripts(): Observable {\n return typeof mermaid === \"undefined\" || mermaid instanceof Element\n ? watchScript(`${config.base}_static/mermaid/mermaid.min.js`) // sphinx-immaterial uses cached dist\n : of(undefined)\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount Mermaid diagram\n *\n * @param el - Code block element\n *\n * @returns Mermaid diagram component observable\n */\nexport function mountMermaid(\n el: HTMLElement\n): Observable> {\n el.classList.remove(\"mermaid\") // Hack: mitigate https://bit.ly/3CiN6Du\n mermaid$ ||= fetchScripts()\n .pipe(\n tap(() => mermaid.initialize({\n startOnLoad: false,\n themeCSS,\n sequence: {\n actorFontSize: \"16px\", // Hack: mitigate https://bit.ly/3y0NEi3\n messageFontSize: \"16px\",\n noteFontSize: \"16px\"\n }\n })),\n map(() => undefined),\n shareReplay(1)\n )\n\n /* Render diagram */\n mermaid$.subscribe(() => {\n el.classList.add(\"mermaid\") // Hack: mitigate https://bit.ly/3CiN6Du\n const id = `__mermaid_${sequence++}`\n const host = h(\"div\", { class: \"mermaid\" })\n mermaid.mermaidAPI.render(id, el.textContent, (svg: string) => {\n\n /* Create a shadow root and inject diagram */\n const shadow = host.attachShadow({ mode: \"closed\" })\n shadow.innerHTML = svg\n\n /* Replace code block with diagram */\n el.replaceWith(host)\n })\n })\n\n /* Create and return component */\n return mermaid$\n .pipe(\n map(() => ({ ref: el }))\n )\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n Observable,\n Subject,\n defer,\n filter,\n finalize,\n map,\n merge,\n tap\n} from \"rxjs\"\n\nimport { Component } from \"../../_\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Details\n */\nexport interface Details {\n action: \"open\" | \"close\" /* Details state */\n reveal?: boolean /* Details is revealed */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch options\n */\ninterface WatchOptions {\n target$: Observable /* Location target observable */\n print$: Observable /* Media print observable */\n}\n\n/**\n * Mount options\n */\ninterface MountOptions {\n target$: Observable /* Location target observable */\n print$: Observable /* Media print observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch details\n *\n * @param el - Details element\n * @param options - Options\n *\n * @returns Details observable\n */\nexport function watchDetails(\n el: HTMLDetailsElement, { target$, print$ }: WatchOptions\n): Observable
    {\n let open = true\n return merge(\n\n /* Open and focus details on location target */\n target$\n .pipe(\n map(target => target.closest(\"details:not([open])\")!),\n filter(details => el === details),\n map(() => ({\n action: \"open\", reveal: true\n }) as Details)\n ),\n\n /* Open details on print and close afterwards */\n print$\n .pipe(\n filter(active => active || !open),\n tap(() => open = el.open),\n map(active => ({\n action: active ? \"open\" : \"close\"\n }) as Details)\n )\n )\n}\n\n/**\n * Mount details\n *\n * This function ensures that `details` tags are opened on anchor jumps and\n * prior to printing, so the whole content of the page is visible.\n *\n * @param el - Details element\n * @param options - Options\n *\n * @returns Details component observable\n */\nexport function mountDetails(\n el: HTMLDetailsElement, options: MountOptions\n): Observable> {\n return defer(() => {\n const push$ = new Subject
    ()\n push$.subscribe(({ action, reveal }) => {\n el.toggleAttribute(\"open\", action === \"open\")\n if (reveal)\n el.scrollIntoView()\n })\n\n /* Create and return component */\n return watchDetails(el, options)\n .pipe(\n tap(state => push$.next(state)),\n finalize(() => push$.complete()),\n map(state => ({ ref: el, ...state }))\n )\n })\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, of } from \"rxjs\"\n\nimport { renderTable } from \"~/templates\"\nimport { h } from \"~/utilities\"\n\nimport { Component } from \"../../_\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Data table\n */\nexport interface DataTable {}\n\n/* ----------------------------------------------------------------------------\n * Data\n * ------------------------------------------------------------------------- */\n\n/**\n * Sentinel for replacement\n */\nconst sentinel = h(\"table\")\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount data table\n *\n * This function wraps a data table in another scrollable container, so it can\n * be smoothly scrolled on smaller screen sizes and won't break the layout.\n *\n * @param el - Data table element\n *\n * @returns Data table component observable\n */\nexport function mountDataTable(\n el: HTMLElement\n): Observable> {\n el.replaceWith(sentinel)\n sentinel.replaceWith(renderTable(el))\n\n /* Create and return component */\n return of({ ref: el })\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n Observable,\n Subject,\n animationFrameScheduler,\n asyncScheduler,\n auditTime,\n combineLatest,\n defer,\n finalize,\n fromEvent,\n map,\n merge,\n skip,\n startWith,\n subscribeOn,\n takeLast,\n takeUntil,\n tap,\n withLatestFrom\n} from \"rxjs\"\n\nimport { feature } from \"~/_\"\nimport {\n Viewport,\n getElement,\n getElementContentOffset,\n getElementContentSize,\n getElementOffset,\n getElementSize,\n getElements,\n watchElementContentOffset,\n watchElementSize\n} from \"~/browser\"\nimport { renderTabbedControl } from \"~/templates\"\n\nimport { Component } from \"../../_\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Content tabs\n */\nexport interface ContentTabs {\n active: HTMLLabelElement /* Active tab label */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount options\n */\ninterface MountOptions {\n viewport$: Observable /* Viewport observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch content tabs\n *\n * @param el - Content tabs element\n *\n * @returns Content tabs observable\n */\nexport function watchContentTabs(\n el: HTMLElement\n): Observable {\n const inputs = getElements(\":scope > input\", el)\n const initial = inputs.find(input => input.checked) || inputs[0]\n return merge(...inputs.map(input => fromEvent(input, \"change\")\n .pipe(\n map(() => getElement(`label[for=\"${input.id}\"]`))\n )\n ))\n .pipe(\n startWith(getElement(`label[for=\"${initial.id}\"]`)),\n map(active => ({ active }))\n )\n}\n\n/**\n * Mount content tabs\n *\n * This function scrolls the active tab into view. While this functionality is\n * provided by browsers as part of `scrollInfoView`, browsers will always also\n * scroll the vertical axis, which we do not want. Thus, we decided to provide\n * this functionality ourselves.\n *\n * @param el - Content tabs element\n * @param options - Options\n *\n * @returns Content tabs component observable\n */\nexport function mountContentTabs(\n el: HTMLElement, { viewport$ }: MountOptions\n): Observable> {\n\n /* Render content tab previous button for pagination */\n const prev = renderTabbedControl(\"prev\")\n el.append(prev)\n\n /* Render content tab next button for pagination */\n const next = renderTabbedControl(\"next\")\n el.append(next)\n\n /* Mount component on subscription */\n const container = getElement(\".tabbed-labels\", el)\n return defer(() => {\n const push$ = new Subject()\n const done$ = push$.pipe(takeLast(1))\n combineLatest([push$, watchElementSize(el)])\n .pipe(\n auditTime(1, animationFrameScheduler),\n takeUntil(done$)\n )\n .subscribe({\n\n /* Handle emission */\n next([{ active }, size]) {\n const offset = getElementOffset(active)\n const { width } = getElementSize(active)\n\n /* Set tab indicator offset and width */\n el.style.setProperty(\"--md-indicator-x\", `${offset.x}px`)\n el.style.setProperty(\"--md-indicator-width\", `${width}px`)\n\n /* Scroll container to active content tab */\n const content = getElementContentOffset(container)\n if (\n offset.x < content.x ||\n offset.x + width > content.x + size.width\n )\n container.scrollTo({\n left: Math.max(0, offset.x - 16),\n behavior: \"smooth\"\n })\n },\n\n /* Handle complete */\n complete() {\n el.style.removeProperty(\"--md-indicator-x\")\n el.style.removeProperty(\"--md-indicator-width\")\n }\n })\n\n /* Hide content tab buttons on borders */\n combineLatest([\n watchElementContentOffset(container),\n watchElementSize(container)\n ])\n .pipe(\n takeUntil(done$)\n )\n .subscribe(([offset, size]) => {\n const content = getElementContentSize(container)\n prev.hidden = offset.x < 16\n next.hidden = offset.x > content.width - size.width - 16\n })\n\n /* Paginate content tab container on click */\n merge(\n fromEvent(prev, \"click\").pipe(map(() => -1)),\n fromEvent(next, \"click\").pipe(map(() => +1))\n )\n .pipe(\n takeUntil(done$)\n )\n .subscribe(direction => {\n const { width } = getElementSize(container)\n container.scrollBy({\n left: width * direction,\n behavior: \"smooth\"\n })\n })\n\n /* Set up linking of content tabs, if enabled */\n if (feature(\"content.tabs.link\"))\n push$.pipe(\n skip(1),\n withLatestFrom(viewport$)\n )\n .subscribe(([{ active }, { offset }]) => {\n const tab = active.innerText.trim()\n if (active.hasAttribute(\"data-md-switching\")) {\n active.removeAttribute(\"data-md-switching\")\n\n /* Determine viewport offset of active tab */\n } else {\n const y = el.offsetTop - offset.y\n\n /* Passively activate other tabs */\n for (const set of getElements(\"[data-tabs]\"))\n for (const input of getElements(\n \":scope > input\", set\n )) {\n const label = getElement(`label[for=\"${input.id}\"]`)\n if (\n label !== active &&\n label.innerText.trim() === tab\n ) {\n label.setAttribute(\"data-md-switching\", \"\")\n input.click()\n break\n }\n }\n\n /* Bring active tab into view */\n window.scrollTo({\n top: el.offsetTop - y\n })\n\n /* Persist active tabs in local storage */\n const tabs = __md_get(\"__tabs\") || []\n __md_set(\"__tabs\", [...new Set([tab, ...tabs])])\n }\n })\n\n /* Create and return component */\n return watchContentTabs(el)\n .pipe(\n tap(state => push$.next(state)),\n finalize(() => push$.complete()),\n map(state => ({ ref: el, ...state }))\n )\n })\n .pipe(\n subscribeOn(asyncScheduler)\n )\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport { Observable, merge } from \"rxjs\"\n\nimport { Viewport, getElements } from \"~/browser\"\n\nimport { Component } from \"../../_\"\nimport { Annotation } from \"../annotation\"\nimport {\n CodeBlock,\n Mermaid,\n mountCodeBlock,\n mountMermaid\n} from \"../code\"\nimport {\n Details,\n mountDetails\n} from \"../details\"\nimport {\n DataTable,\n mountDataTable\n} from \"../table\"\nimport {\n ContentTabs,\n mountContentTabs\n} from \"../tabs\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Content\n */\nexport type Content =\n | Annotation\n | ContentTabs\n | CodeBlock\n | Mermaid\n | DataTable\n | Details\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount options\n */\ninterface MountOptions {\n viewport$: Observable /* Viewport observable */\n target$: Observable /* Location target observable */\n print$: Observable /* Media print observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Mount content\n *\n * This function mounts all components that are found in the content of the\n * actual article, including code blocks, data tables and details.\n *\n * @param el - Content element\n * @param options - Options\n *\n * @returns Content component observable\n */\nexport function mountContent(\n el: HTMLElement, { viewport$, target$, print$ }: MountOptions\n): Observable> {\n return merge(\n\n /* Code blocks */\n ...getElements(\"pre:not(.mermaid) > code\", el)\n .map(child => mountCodeBlock(child, { target$, print$ })),\n\n /* Mermaid diagrams */\n ...getElements(\"pre.mermaid\", el)\n .map(child => mountMermaid(child)),\n\n /* Data tables */\n ...getElements(\"table:not([class])\", el)\n .map(child => mountDataTable(child)),\n\n /* Details */\n ...getElements(\"details\", el)\n .map(child => mountDetails(child, { target$, print$ })),\n\n /* Content tabs */\n ...getElements(\"[data-tabs]\", el)\n .map(child => mountContentTabs(child, { viewport$ }))\n )\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n Observable,\n Subject,\n defer,\n delay,\n finalize,\n map,\n merge,\n of,\n switchMap,\n tap\n} from \"rxjs\"\n\nimport { getElement } from \"~/browser\"\n\nimport { Component } from \"../_\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Dialog\n */\nexport interface Dialog {\n message: string /* Dialog message */\n active: boolean /* Dialog is active */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch options\n */\ninterface WatchOptions {\n alert$: Subject /* Alert subject */\n}\n\n/**\n * Mount options\n */\ninterface MountOptions {\n alert$: Subject /* Alert subject */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch dialog\n *\n * @param _el - Dialog element\n * @param options - Options\n *\n * @returns Dialog observable\n */\nexport function watchDialog(\n _el: HTMLElement, { alert$ }: WatchOptions\n): Observable {\n return alert$\n .pipe(\n switchMap(message => merge(\n of(true),\n of(false).pipe(delay(2000))\n )\n .pipe(\n map(active => ({ message, active }))\n )\n )\n )\n}\n\n/**\n * Mount dialog\n *\n * This function reveals the dialog in the right corner when a new alert is\n * emitted through the subject that is passed as part of the options.\n *\n * @param el - Dialog element\n * @param options - Options\n *\n * @returns Dialog component observable\n */\nexport function mountDialog(\n el: HTMLElement, options: MountOptions\n): Observable> {\n const inner = getElement(\".md-typeset\", el)\n return defer(() => {\n const push$ = new Subject()\n push$.subscribe(({ message, active }) => {\n el.classList.toggle(\"md-dialog--active\", active)\n inner.textContent = message\n })\n\n /* Create and return component */\n return watchDialog(el, options)\n .pipe(\n tap(state => push$.next(state)),\n finalize(() => push$.complete()),\n map(state => ({ ref: el, ...state }))\n )\n })\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n Observable,\n Subject,\n bufferCount,\n combineLatest,\n combineLatestWith,\n defer,\n distinctUntilChanged,\n distinctUntilKeyChanged,\n filter,\n map,\n of,\n shareReplay,\n startWith,\n switchMap,\n takeLast,\n takeUntil\n} from \"rxjs\"\n\nimport { feature } from \"~/_\"\nimport {\n Viewport,\n watchElementSize,\n watchToggle\n} from \"~/browser\"\n\nimport { Component } from \"../../_\"\nimport { Main } from \"../../main\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Header\n */\nexport interface Header {\n height: number /* Header visible height */\n hidden: boolean /* Header is hidden */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch options\n */\ninterface WatchOptions {\n viewport$: Observable /* Viewport observable */\n}\n\n/**\n * Mount options\n */\ninterface MountOptions {\n viewport$: Observable /* Viewport observable */\n header$: Observable
    /* Header observable */\n main$: Observable
    /* Main area observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Compute whether the header is hidden\n *\n * If the user scrolls past a certain threshold, the header can be hidden when\n * scrolling down, and shown when scrolling up.\n *\n * @param options - Options\n *\n * @returns Toggle observable\n */\nfunction isHidden({ viewport$ }: WatchOptions): Observable {\n if (!feature(\"header.autohide\"))\n return of(false)\n\n /* Compute direction and turning point */\n const direction$ = viewport$\n .pipe(\n map(({ offset: { y } }) => y),\n bufferCount(2, 1),\n map(([a, b]) => [a < b, b] as const),\n distinctUntilKeyChanged(0)\n )\n\n /* Compute whether header should be hidden */\n const hidden$ = combineLatest([viewport$, direction$])\n .pipe(\n filter(([{ offset }, [, y]]) => Math.abs(y - offset.y) > 100),\n map(([, [direction]]) => direction),\n distinctUntilChanged()\n )\n\n /* Compute threshold for hiding */\n const search$ = watchToggle(\"search\")\n return combineLatest([viewport$, search$])\n .pipe(\n map(([{ offset }, search]) => offset.y > 400 && !search),\n distinctUntilChanged(),\n switchMap(active => active ? hidden$ : of(false)),\n startWith(false)\n )\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch header\n *\n * @param el - Header element\n * @param options - Options\n *\n * @returns Header observable\n */\nexport function watchHeader(\n el: HTMLElement, options: WatchOptions\n): Observable
    {\n return defer(() => combineLatest([\n watchElementSize(el),\n isHidden(options)\n ]))\n .pipe(\n map(([{ height }, hidden]) => ({\n height,\n hidden\n })),\n distinctUntilChanged((a, b) => (\n a.height === b.height &&\n a.hidden === b.hidden\n )),\n shareReplay(1)\n )\n}\n\n/**\n * Mount header\n *\n * This function manages the different states of the header, i.e. whether it's\n * hidden or rendered with a shadow. This depends heavily on the main area.\n *\n * @param el - Header element\n * @param options - Options\n *\n * @returns Header component observable\n */\nexport function mountHeader(\n el: HTMLElement, { header$, main$ }: MountOptions\n): Observable> {\n return defer(() => {\n const push$ = new Subject
    ()\n const done$ = push$.pipe(takeLast(1))\n push$\n .pipe(\n distinctUntilKeyChanged(\"active\"),\n combineLatestWith(header$)\n )\n .subscribe(([{ active }, { hidden }]) => {\n el.classList.toggle(\"md-header--shadow\", active && !hidden)\n el.hidden = hidden\n })\n\n /* Link to main area */\n main$.subscribe(push$)\n\n /* Create and return component */\n return header$\n .pipe(\n takeUntil(done$),\n map(state => ({ ref: el, ...state }))\n )\n })\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n EMPTY,\n Observable,\n Subject,\n defer,\n distinctUntilKeyChanged,\n finalize,\n map,\n tap\n} from \"rxjs\"\n\nimport {\n Viewport,\n getElementSize,\n getOptionalElement,\n watchViewportAt\n} from \"~/browser\"\n\nimport { Component } from \"../../_\"\nimport { Header } from \"../_\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Header\n */\nexport interface HeaderTitle {\n active: boolean /* Header title is active */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch options\n */\ninterface WatchOptions {\n viewport$: Observable /* Viewport observable */\n header$: Observable
    /* Header observable */\n}\n\n/**\n * Mount options\n */\ninterface MountOptions {\n viewport$: Observable /* Viewport observable */\n header$: Observable
    /* Header observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch header title\n *\n * @param el - Heading element\n * @param options - Options\n *\n * @returns Header title observable\n */\nexport function watchHeaderTitle(\n el: HTMLElement, { viewport$, header$ }: WatchOptions\n): Observable {\n return watchViewportAt(el, { viewport$, header$ })\n .pipe(\n map(({ offset: { y } }) => {\n const { height } = getElementSize(el)\n return {\n active: y >= height\n }\n }),\n distinctUntilKeyChanged(\"active\")\n )\n}\n\n/**\n * Mount header title\n *\n * This function swaps the header title from the site title to the title of the\n * current page when the user scrolls past the first headline.\n *\n * @param el - Header title element\n * @param options - Options\n *\n * @returns Header title component observable\n */\nexport function mountHeaderTitle(\n el: HTMLElement, options: MountOptions\n): Observable> {\n return defer(() => {\n const push$ = new Subject()\n push$.subscribe(({ active }) => {\n el.classList.toggle(\"md-header__title--active\", active)\n })\n\n /* Obtain headline, if any */\n /* sphinx-immaterial: treat first object description as title if there is no h1 */\n const heading = getOptionalElement(\"article h1, .objdesc > dt .descname\")\n if (typeof heading === \"undefined\")\n return EMPTY\n\n /* Create and return component */\n return watchHeaderTitle(heading, options)\n .pipe(\n tap(state => push$.next(state)),\n finalize(() => push$.complete()),\n map(state => ({ ref: el, ...state }))\n )\n })\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n Observable,\n combineLatest,\n distinctUntilChanged,\n distinctUntilKeyChanged,\n map,\n switchMap\n} from \"rxjs\"\n\nimport {\n Viewport,\n watchElementSize\n} from \"~/browser\"\n\nimport { Header } from \"../header\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Main area\n */\nexport interface Main {\n offset: number /* Main area top offset */\n height: number /* Main area visible height */\n active: boolean /* Main area is active */\n}\n\n/* ----------------------------------------------------------------------------\n * Helper types\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch options\n */\ninterface WatchOptions {\n viewport$: Observable /* Viewport observable */\n header$: Observable
    /* Header observable */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch main area\n *\n * This function returns an observable that computes the visual parameters of\n * the main area which depends on the viewport vertical offset and height, as\n * well as the height of the header element, if the header is fixed.\n *\n * @param el - Main area element\n * @param options - Options\n *\n * @returns Main area observable\n */\nexport function watchMain(\n el: HTMLElement, { viewport$, header$ }: WatchOptions\n): Observable
    {\n\n /* Compute necessary adjustment for header */\n const adjust$ = header$\n .pipe(\n map(({ height }) => height),\n distinctUntilChanged()\n )\n\n /* Compute the main area's top and bottom borders */\n const border$ = adjust$\n .pipe(\n switchMap(() => watchElementSize(el)\n .pipe(\n map(({ height }) => ({\n top: el.offsetTop,\n bottom: el.offsetTop + height\n })),\n distinctUntilKeyChanged(\"bottom\")\n )\n )\n )\n\n /* Compute the main area's offset, visible height and if we scrolled past */\n return combineLatest([adjust$, border$, viewport$])\n .pipe(\n map(([header, { top, bottom }, { offset: { y }, size: { height } }]) => {\n height = Math.max(0, height\n - Math.max(0, top - y, header)\n - Math.max(0, height + y - bottom)\n )\n return {\n offset: top - header,\n height,\n active: top - header <= y\n }\n }),\n distinctUntilChanged((a, b) => (\n a.offset === b.offset &&\n a.height === b.height &&\n a.active === b.active\n ))\n )\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n Observable,\n Subject,\n asyncScheduler,\n defer,\n finalize,\n fromEvent,\n map,\n mergeMap,\n observeOn,\n of,\n shareReplay,\n startWith,\n tap\n} from \"rxjs\"\n\nimport { getElements } from \"~/browser\"\n\nimport { Component } from \"../_\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Palette colors\n */\nexport interface PaletteColor {\n scheme?: string /* Color scheme */\n primary?: string /* Primary color */\n accent?: string /* Accent color */\n}\n\n/**\n * Palette\n */\nexport interface Palette {\n index: number /* Palette index */\n color: PaletteColor /* Palette colors */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch color palette\n *\n * @param inputs - Color palette element\n *\n * @returns Color palette observable\n */\nexport function watchPalette(\n inputs: HTMLInputElement[]\n): Observable {\n const current = __md_get(\"__palette\") || {\n index: inputs.findIndex(input => matchMedia(\n input.getAttribute(\"data-md-color-media\")!\n ).matches)\n }\n\n /* Emit changes in color palette */\n return of(...inputs)\n .pipe(\n mergeMap(input => fromEvent(input, \"change\")\n .pipe(\n map(() => input)\n )\n ),\n startWith(inputs[Math.max(0, current.index)]),\n map(input => ({\n index: inputs.indexOf(input),\n color: {\n scheme: input.getAttribute(\"data-md-color-scheme\"),\n primary: input.getAttribute(\"data-md-color-primary\"),\n accent: input.getAttribute(\"data-md-color-accent\")\n }\n } as Palette)),\n shareReplay(1)\n )\n}\n\n/**\n * Mount color palette\n *\n * @param el - Color palette element\n *\n * @returns Color palette component observable\n */\nexport function mountPalette(\n el: HTMLElement\n): Observable> {\n return defer(() => {\n const push$ = new Subject()\n push$.subscribe(palette => {\n document.body.setAttribute(\"data-md-color-switching\", \"\")\n\n /* Set color palette */\n for (const [key, value] of Object.entries(palette.color))\n document.body.setAttribute(`data-md-color-${key}`, value)\n\n /* Toggle visibility */\n for (let index = 0; index < inputs.length; index++) {\n const label = inputs[index].nextElementSibling\n if (label instanceof HTMLElement)\n label.hidden = palette.index !== index\n }\n\n /* Persist preference in local storage */\n __md_set(\"__palette\", palette)\n })\n\n /* Revert transition durations after color switch */\n push$.pipe(observeOn(asyncScheduler))\n .subscribe(() => {\n document.body.removeAttribute(\"data-md-color-switching\")\n })\n\n /* Create and return component */\n const inputs = getElements(\"input\", el)\n return watchPalette(inputs)\n .pipe(\n tap(state => push$.next(state)),\n finalize(() => push$.complete()),\n map(state => ({ ref: el, ...state }))\n )\n })\n}\n", "/*\n * Copyright (c) 2016-2022 Martin Donath \n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\nimport {\n Observable,\n Subject,\n combineLatest,\n delay,\n distinctUntilChanged,\n distinctUntilKeyChanged,\n filter,\n finalize,\n fromEvent,\n map,\n merge,\n of,\n share,\n shareReplay,\n startWith,\n take,\n takeLast,\n takeUntil,\n tap\n} from \"rxjs\"\n\nimport { translation } from \"~/_\"\nimport {\n getLocation,\n setToggle,\n watchElementFocus,\n watchToggle\n} from \"~/browser\"\n\nimport { Component } from \"../../_\"\n\n/* ----------------------------------------------------------------------------\n * Types\n * ------------------------------------------------------------------------- */\n\n/**\n * Search query\n */\nexport interface SearchQuery {\n value: string /* Query value */\n focus: boolean /* Query focus */\n}\n\n/* ----------------------------------------------------------------------------\n * Functions\n * ------------------------------------------------------------------------- */\n\n/**\n * Watch search query\n *\n * Note that the focus event which triggers re-reading the current query value\n * is delayed by `1ms` so the input's empty state is allowed to propagate.\n *\n * @param el - Search query element\n *\n * @returns Search query observable\n */\nexport function watchSearchQuery(\n el: HTMLInputElement\n): Observable {\n const fn = (value: string) => value.trim()\n\n /* Immediately show search dialog */\n const { searchParams } = getLocation()\n let param$: Observable\n if (searchParams.has(\"q\")) {\n setToggle(\"search\", true)\n const value = searchParams.get(\"q\")!\n param$ = of(value)\n } else {\n param$ = of()\n }\n\n /* Remove query parameter when search is closed */\n watchToggle(\"search\")\n .pipe(\n filter(active => !active),\n take(1)\n )\n .subscribe(() => {\n const url = new URL(location.href)\n url.searchParams.delete(\"q\")\n history.replaceState({}, \"\", `${url}`)\n })\n\n /* Set query from parameter */\n param$.subscribe(value => { // TODO: not ideal - find a better way\n if (value) {\n el.value = value\n el.focus()\n }\n })\n\n /* Intercept focus and input events */\n const focus$ = watchElementFocus(el)\n const value$ = merge(\n fromEvent(el, \"keyup\"),\n fromEvent(el, \"focus\").pipe(delay(1)),\n param$\n )\n .pipe(\n map(() => fn(el.value)),\n startWith(\"\"),\n distinctUntilChanged(),\n )\n\n /* Combine into single observable */\n return combineLatest([value$, focus$])\n .pipe(\n map(([value, focus]) => ({ value, focus })),\n shareReplay(1)\n )\n}\n\n/**\n * Mount search query\n *\n * @param el - Search query element\n *\n * @returns Search query component observable\n */\nexport function mountSearchQuery(\n el: HTMLInputElement,\n): Observable> {\n const push$ = new Subject()\n const done$ = push$.pipe(takeLast(1))\n\n /* Handle focus changes */\n push$\n .pipe(\n distinctUntilKeyChanged(\"focus\")\n )\n .subscribe(({ focus }) => {\n if (focus) {\n setToggle(\"search\", focus)\n el.placeholder = \"\"\n } else {\n el.placeholder = translation(\"search.placeholder\")\n }\n })\n\n /* Handle reset */\n fromEvent(el.form!, \"reset\")\n .pipe(\n takeUntil(done$)\n )\n .subscribe(() => el.focus())\n\n /* Create and return component */\n return watchSearchQuery(el)\n .pipe(\n tap(state => push$.next(state)),\n finalize(() => push$.complete()),\n map(state => ({ ref: el, ...state })),\n share()\n )\n}\n", "// Derived from searchtools.js in sphinx.\n//\n// :copyright: Copyright 2007-2021 by the Sphinx team, see AUTHORS.\n// :license: BSD, see LICENSE for details.\n\nimport escapeHTML from \"escape-html\"\n\nimport { configuration } from \"~/_\"\n\nimport { SearchResultItem } from \"./integrations/search/_\"\n\ninterface SphinxSearchResult {\n docurl: string\n title: string\n anchor: string | 0 | 1\n objectLabel: string | null\n synopsis: string | null\n score: number\n}\n\nconst config = configuration()\n\n/**\n * Returns a URL for a given path relative to the documentation root.\n *\n * @param path - Path relative to documentation root.\n * @returns The full URL.\n */\nfunction getAbsoluteUrl(path: string): string {\n return `${config.base}${path}`\n}\n\nlet searchIndexLoaded: Promise | undefined\n\n/**\n * Loads a script by adding a ` @@ -633,7 +633,7 @@

    LicenseLicense{"base": "..", "features": ["navigation.expand", "navigation.tabs", "toc.integrate", "navigation.sections", "navigation.instant", "header.autohide", "navigation.top", "navigation.tracking", "search.highlight", "search.share", "toc.follow", "toc.sticky", "content.tabs.link", "announce.dismiss"], "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.config.lang": "en", "search.config.pipeline": "trimmer, stopWordFilter", "search.config.separator": "[\\s\\-]+", "search.placeholder": "Search", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version.title": "Select version"}} - + diff --git a/auto_examples/api_tutorial.html b/auto_examples/api_tutorial.html index 683a665..747f9e8 100644 --- a/auto_examples/api_tutorial.html +++ b/auto_examples/api_tutorial.html @@ -33,7 +33,7 @@ - + @@ -1088,7 +1088,7 @@

    {"base": "..", "features": ["navigation.expand", "navigation.tabs", "toc.integrate", "navigation.sections", "navigation.instant", "header.autohide", "navigation.top", "navigation.tracking", "search.highlight", "search.share", "toc.follow", "toc.sticky", "content.tabs.link", "announce.dismiss"], "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.config.lang": "en", "search.config.pipeline": "trimmer, stopWordFilter", "search.config.separator": "[\\s\\-]+", "search.placeholder": "Search", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version.title": "Select version"}} - + diff --git a/auto_examples/index.html b/auto_examples/index.html index a7776a7..bf85c44 100644 --- a/auto_examples/index.html +++ b/auto_examples/index.html @@ -33,7 +33,7 @@ - + @@ -660,7 +660,7 @@

    API Examples Last update: - Oct 23, 2023 + Jan 27, 2024

    @@ -772,7 +772,7 @@

    API Examples{"base": "..", "features": ["navigation.expand", "navigation.tabs", "toc.integrate", "navigation.sections", "navigation.instant", "header.autohide", "navigation.top", "navigation.tracking", "search.highlight", "search.share", "toc.follow", "toc.sticky", "content.tabs.link", "announce.dismiss"], "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.config.lang": "en", "search.config.pipeline": "trimmer, stopWordFilter", "search.config.separator": "[\\s\\-]+", "search.placeholder": "Search", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version.title": "Select version"}} - + diff --git a/auto_examples/sg_execution_times.html b/auto_examples/sg_execution_times.html index 3bd2e55..4d7788a 100644 --- a/auto_examples/sg_execution_times.html +++ b/auto_examples/sg_execution_times.html @@ -33,7 +33,7 @@ - + @@ -483,7 +483,7 @@

    Last update: - Oct 23, 2023 + Jan 27, 2024

    @@ -559,7 +559,7 @@

    - + diff --git a/contributing.html b/contributing.html index 28805a0..94e6fc0 100644 --- a/contributing.html +++ b/contributing.html @@ -33,7 +33,7 @@ - + @@ -532,7 +532,7 @@

    Pull Request ProcessPull Request Process{"base": ".", "features": ["navigation.expand", "navigation.tabs", "toc.integrate", "navigation.sections", "navigation.instant", "header.autohide", "navigation.top", "navigation.tracking", "search.highlight", "search.share", "toc.follow", "toc.sticky", "content.tabs.link", "announce.dismiss"], "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.config.lang": "en", "search.config.pipeline": "trimmer, stopWordFilter", "search.config.separator": "[\\s\\-]+", "search.placeholder": "Search", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version.title": "Select version"}} - + diff --git a/genindex.html b/genindex.html index 4ddef93..4e15d79 100644 --- a/genindex.html +++ b/genindex.html @@ -33,7 +33,7 @@ - + @@ -473,7 +473,7 @@ Last update: - Oct 23, 2023 + Jan 27, 2024

    @@ -549,7 +549,7 @@ - + diff --git a/getting_started/api.html b/getting_started/api.html index 46b908c..ed08456 100644 --- a/getting_started/api.html +++ b/getting_started/api.html @@ -33,7 +33,7 @@ - + @@ -779,7 +779,7 @@

    GET Last update: - Oct 23, 2023 + Jan 27, 2024

    @@ -891,7 +891,7 @@

    GET {"base": "..", "features": ["navigation.expand", "navigation.tabs", "toc.integrate", "navigation.sections", "navigation.instant", "header.autohide", "navigation.top", "navigation.tracking", "search.highlight", "search.share", "toc.follow", "toc.sticky", "content.tabs.link", "announce.dismiss"], "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.config.lang": "en", "search.config.pipeline": "trimmer, stopWordFilter", "search.config.separator": "[\\s\\-]+", "search.placeholder": "Search", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version.title": "Select version"}} - + diff --git a/getting_started/developer-guide.html b/getting_started/developer-guide.html index 6a18283..0e9defd 100644 --- a/getting_started/developer-guide.html +++ b/getting_started/developer-guide.html @@ -33,7 +33,7 @@ - + @@ -785,6 +785,7 @@

    Docker
    🍓 Require auth: True
    +🍓  Server mode: single-user
     🍓   Secret key ***********
     🍓    Flux user: ********
     🍓   Flux token: *****
    @@ -831,8 +832,8 @@ 

    2. Start Service
    $ flux start --test-size=4
    -$ uvicorn app.main:app --host=0.0.0.0 --port=5000
    +
    flux start --test-size=4
    +uvicorn app.main:app --host=0.0.0.0 --port=5000
     

    For the latter, you can also use the Makefile:

    @@ -921,7 +922,7 @@

    Environment FLUX_NUMBER_NODES -The number of nodes available in the cluster +The number of nodes available (exposed) in the cluster 1 @@ -1097,7 +1098,7 @@

    DocstringsDocstrings{"base": "..", "features": ["navigation.expand", "navigation.tabs", "toc.integrate", "navigation.sections", "navigation.instant", "header.autohide", "navigation.top", "navigation.tracking", "search.highlight", "search.share", "toc.follow", "toc.sticky", "content.tabs.link", "announce.dismiss"], "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.config.lang": "en", "search.config.pipeline": "trimmer, stopWordFilter", "search.config.separator": "[\\s\\-]+", "search.placeholder": "Search", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version.title": "Select version"}} - + diff --git a/getting_started/index.html b/getting_started/index.html index 04c63d8..e8329f5 100644 --- a/getting_started/index.html +++ b/getting_started/index.html @@ -33,7 +33,7 @@ - + @@ -579,7 +579,7 @@

    Documentation Last update: - Oct 23, 2023 + Jan 27, 2024

    @@ -691,7 +691,7 @@

    Documentation{"base": "..", "features": ["navigation.expand", "navigation.tabs", "toc.integrate", "navigation.sections", "navigation.instant", "header.autohide", "navigation.top", "navigation.tracking", "search.highlight", "search.share", "toc.follow", "toc.sticky", "content.tabs.link", "announce.dismiss"], "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.config.lang": "en", "search.config.pipeline": "trimmer, stopWordFilter", "search.config.separator": "[\\s\\-]+", "search.placeholder": "Search", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version.title": "Select version"}} - + diff --git a/getting_started/interface.html b/getting_started/interface.html index 8bb1aa6..83651be 100644 --- a/getting_started/interface.html +++ b/getting_started/interface.html @@ -33,7 +33,7 @@ - + @@ -703,7 +703,7 @@

    G Last update: - Oct 23, 2023 + Jan 27, 2024

    @@ -815,7 +815,7 @@

    G - + diff --git a/getting_started/user-guide.html b/getting_started/user-guide.html index cd58782..b909474 100644 --- a/getting_started/user-guide.html +++ b/getting_started/user-guide.html @@ -33,7 +33,7 @@ - + @@ -767,6 +767,16 @@

    Modes
    # This is the default
    +export FLUX_SERVER_MODE=single-user
    +
    +# This will have the flux user attempt to sign the payload with sudo
    +export FLUX_SERVER_MODE=multi-user
    +
    +

    +

    Note that the majority of our use cases use single-user mode, so you can expect more bugs / work to be +done with multi-user.

    Authentication

    If you choose to deploy without authentication, this is a ⚠️ proceed at your own risk ⚠️ sort of deal. We call this the “single-user” case, and it means that you are submitting jobs as the instance owner, @@ -1055,7 +1065,7 @@

    Go Last update: - Oct 23, 2023 + Jan 27, 2024

    @@ -1167,7 +1177,7 @@

    Go{"base": "..", "features": ["navigation.expand", "navigation.tabs", "toc.integrate", "navigation.sections", "navigation.instant", "header.autohide", "navigation.top", "navigation.tracking", "search.highlight", "search.share", "toc.follow", "toc.sticky", "content.tabs.link", "announce.dismiss"], "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.config.lang": "en", "search.config.pipeline": "trimmer, stopWordFilter", "search.config.separator": "[\\s\\-]+", "search.placeholder": "Search", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version.title": "Select version"}} - + diff --git a/index.html b/index.html index dd56ce0..72bd445 100644 --- a/index.html +++ b/index.html @@ -33,7 +33,7 @@ - + @@ -534,7 +534,7 @@

    Flux RESTFul APIFlux RESTFul API{"base": ".", "features": ["navigation.expand", "navigation.tabs", "toc.integrate", "navigation.sections", "navigation.instant", "header.autohide", "navigation.top", "navigation.tracking", "search.highlight", "search.share", "toc.follow", "toc.sticky", "content.tabs.link", "announce.dismiss"], "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.config.lang": "en", "search.config.pipeline": "trimmer, stopWordFilter", "search.config.separator": "[\\s\\-]+", "search.placeholder": "Search", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version.title": "Select version"}} - + diff --git a/objects.inv b/objects.inv index 17081a8..43c89dc 100644 Binary files a/objects.inv and b/objects.inv differ diff --git a/py-modindex.html b/py-modindex.html index 9ebc745..acfa601 100644 --- a/py-modindex.html +++ b/py-modindex.html @@ -33,7 +33,7 @@ - + @@ -476,7 +476,7 @@ Last update: - Oct 23, 2023 + Jan 27, 2024

    @@ -552,7 +552,7 @@ - + diff --git a/searchindex.js b/searchindex.js index 9c049ec..d969713 100644 --- a/searchindex.js +++ b/searchindex.js @@ -1 +1 @@ -Search.setIndex({"titles": ["License", "Introductory example - using the API", "Tutorials", "Computation times", "Contributing", "API", "Developer Guide", "Documentation", "Interface", "User Guide", "Flux RESTFul API", "app package", "app.core package", "app.crud package", "app.db package", "app.library package", "app.models package", "app.routers package", "app.schemas package", "app", "Container Tutorial", "Tutorials", "Local Install"], "terms": {"gnu": 0, "lesser": 0, "gener": [0, 1, 2, 4, 5, 6, 9, 12, 13, 17, 20], "public": 0, "version": [0, 5, 9, 22], "3": [0, 1, 9], "29": 0, "june": 0, "2007": 0, "copyright": [0, 4], "c": [0, 6], "free": 0, "softwar": [0, 20], "foundat": 0, "inc": 0, "http": [0, 6, 9, 10, 15, 20, 22], "fsf": 0, "org": 0, "everyon": 0, "i": [0, 1, 2, 4, 5, 6, 7, 8, 9, 10, 12, 13, 15, 20, 21, 22], "permit": 0, "copi": 0, "distribut": 0, "verbatim": 0, "thi": [0, 1, 2, 4, 5, 6, 7, 8, 10, 12, 15, 18, 20, 21, 22], "document": [0, 4, 9, 10], "chang": [0, 4, 6], "allow": [0, 5], "incorpor": 0, "term": 0, "condit": 0, "supplement": 0, "addit": [0, 8, 9, 10, 21], "permiss": 0, "list": [0, 1, 5, 10, 12, 13, 14, 22], "below": [0, 6, 9, 10, 20], "definit": 0, "As": [0, 6, 9], "us": [0, 2, 3, 4, 5, 6, 9, 10, 12, 14, 20, 21, 22], "herein": 0, "refer": 0, "gpl": 0, "The": [0, 1, 4, 5, 6, 7, 8, 9, 10, 12, 21, 22], "librari": [0, 11, 19], "cover": 0, "work": [0, 5, 6, 7, 20, 22], "govern": 0, "other": [0, 4, 7, 20], "than": [0, 6, 10], "an": [0, 1, 4, 5, 6, 9, 10, 12, 20, 21], "applic": [0, 5, 6, 7, 21], "combin": 0, "defin": [0, 6, 9, 12, 18], "ani": [0, 4, 6, 7, 12, 13, 16, 21], "make": [0, 6, 7, 8, 9, 21, 22], "interfac": [0, 6, 7, 10, 20], "provid": [0, 4, 5, 6, 7, 8, 9, 10, 12, 21], "which": [0, 5, 6, 9, 12], "otherwis": 0, "base": [0, 5, 6, 9, 11, 12, 16, 18, 19, 20], "subclass": 0, "class": [0, 12, 13, 16, 18], "deem": 0, "mode": [0, 6, 21, 22], "A": [0, 5, 9, 15], "produc": [0, 22], "link": [0, 4, 10, 14], "particular": 0, "wa": [0, 6, 9], "made": 0, "also": [0, 1, 4, 6, 9, 21, 22], "call": [0, 9], "minim": 0, "correspond": 0, "sourc": [0, 1, 2, 4, 6, 9, 12, 13, 14, 15, 16, 17, 18, 22], "mean": [0, 6, 9, 10, 12], "exclud": 0, "code": [0, 1, 2, 4, 7, 9], "portion": 0, "consid": 0, "isol": 0, "ar": [0, 1, 5, 6, 8, 9, 10, 14, 20, 22], "object": [0, 13, 18], "includ": [0, 4, 5, 6, 7, 21], "data": [0, 1, 5, 6], "util": 0, "program": 0, "need": [0, 1, 5, 6, 9, 20, 22], "reproduc": 0, "from": [0, 1, 2, 5, 6, 8, 9, 12, 13, 15, 17, 18, 20, 22], "system": [0, 6, 9], "except": [0, 1, 8, 22], "section": 0, "you": [0, 1, 4, 5, 6, 7, 8, 9, 10, 20, 21, 22], "mai": 0, "convei": 0, "under": [0, 6], "4": [0, 1, 6], "without": [0, 6, 8, 9], "being": 0, "bound": [0, 9], "modifi": 0, "If": [0, 1, 4, 6, 7, 8, 9, 20, 21], "your": [0, 1, 4, 6, 7, 9, 20, 21, 22], "modif": 0, "facil": 0, "function": [0, 6, 12, 13, 14], "suppli": 0, "argument": [0, 6, 9, 15], "pass": [0, 6], "when": [0, 4, 8, 9, 22], "invok": 0, "good": [0, 8], "faith": 0, "effort": 0, "ensur": [0, 6, 20], "event": [0, 10], "doe": [0, 7, 8], "still": 0, "oper": [0, 5, 9, 10, 21], "perform": 0, "whatev": 0, "part": [0, 6], "its": 0, "purpos": 0, "remain": 0, "meaning": 0, "b": 0, "none": [0, 5, 6, 12, 13, 14, 15, 18], "materi": 0, "header": [0, 4, 9], "file": [0, 3, 4, 6, 9, 15], "form": [0, 19], "choic": 0, "limit": [0, 5, 13], "numer": 0, "paramet": [0, 5], "structur": 0, "layout": 0, "accessor": 0, "small": [0, 1, 9, 10], "macro": 0, "inlin": 0, "templat": [0, 6], "ten": 0, "fewer": 0, "line": [0, 5, 6, 20, 21], "length": [0, 1, 5, 12], "do": [0, 1, 5, 6, 8, 9, 20, 22], "both": [0, 9], "follow": [0, 4, 5, 6, 8, 9, 20], "give": [0, 6], "promin": 0, "notic": [0, 8], "each": [0, 9], "accompani": 0, "taken": [0, 9], "togeth": 0, "effect": 0, "restrict": 0, "contain": [0, 6, 9, 21], "revers": 0, "engin": 0, "debug": 0, "For": [0, 4, 6, 8], "displai": 0, "dure": 0, "execut": [0, 3, 20], "among": 0, "well": 0, "direct": 0, "user": [0, 1, 5, 6, 7, 8, 10, 11, 12, 14, 15, 17, 19, 21, 22], "d": [0, 6, 8, 22], "one": [0, 6, 8, 9, 10, 12, 20], "0": [0, 1, 3, 5, 6, 9, 13, 20, 22], "suitabl": 0, "recombin": 0, "relink": 0, "manner": 0, "specifi": [0, 6], "6": [0, 1, 6], "1": [0, 1, 5, 9, 12, 22], "share": [0, 6, 12], "mechan": 0, "run": [0, 1, 5, 9, 20, 22], "time": [0, 1, 20, 22], "alreadi": [0, 9, 22], "present": 0, "": [0, 1, 4, 6, 8, 9, 12, 15, 20, 22], "comput": 0, "properli": [0, 4], "compat": 0, "e": [0, 5, 6, 9, 22], "instal": [0, 10, 20, 21], "inform": [0, 9], "onli": [0, 6, 8, 9, 20], "would": [0, 1, 6, 9, 10], "requir": [0, 1, 5, 6, 9, 12, 18, 20, 22], "extent": 0, "necessari": [0, 4, 8, 14], "option": [0, 1, 5, 9, 12], "4d0": 0, "must": [0, 4, 5, 6], "4d1": 0, "place": 0, "side": 0, "singl": [0, 6, 7, 8, 9, 10, 14, 21, 22], "same": [0, 6, 9, 12, 20, 22], "uncombin": 0, "explain": [0, 4], "where": [0, 9, 22], "find": [0, 22], "revis": [0, 6, 22], "publish": 0, "new": [0, 4, 5, 13], "Such": 0, "similar": [0, 5, 20], "spirit": 0, "differ": [0, 9, 12], "detail": [0, 1, 5, 15], "address": 0, "problem": 0, "concern": 0, "given": [0, 9, 14], "distinguish": 0, "number": [0, 5, 6, 9, 22], "receiv": 0, "certain": 0, "later": [0, 6], "appli": [0, 5], "have": [0, 4, 6, 7, 8, 9, 10, 20, 21, 22], "either": [0, 6, 9, 12], "choos": [0, 7, 9], "ever": 0, "proxi": 0, "can": [0, 1, 4, 6, 8, 9, 10, 12, 14, 17, 20, 22], "decid": 0, "whether": [0, 9], "futur": 0, "shall": 0, "statement": 0, "accept": 0, "perman": 0, "author": [0, 9], "click": [1, 8, 20], "here": [1, 4, 5, 6, 9, 12, 20], "download": [1, 2], "full": 1, "tutori": [1, 9, 10, 22], "walk": [1, 21], "through": [1, 21], "basic": [1, 6, 8, 12, 15], "most": [1, 6, 9], "thing": [1, 8, 22], "submit": [1, 10, 20, 22], "job": [1, 6, 7, 10, 11, 15, 19, 20, 22], "get": [1, 4, 9, 11, 12, 13, 15, 17, 21], "status": 1, "cancel": 1, "we": [1, 4, 6, 7, 8, 9, 10, 12, 17, 20, 21, 22], "our": [1, 2, 4, 6, 9, 20, 22], "client": [1, 6, 7, 20, 21, 22], "import": [1, 4, 6, 9, 22], "json": 1, "o": [1, 12], "sy": [1, 9], "matplotlib": 1, "pyplot": 1, "plt": 1, "flux_restful_cli": [1, 9, 22], "main": [1, 4, 6, 14, 19, 22], "get_client": [1, 9, 22], "expect": 1, "render": [1, 2, 5, 6], "doc": [1, 6, 20], "root": [1, 4, 6, 15], "path": [1, 6, 9, 12, 20], "dirnam": 1, "abspath": 1, "getcwd": 1, "nice": [1, 22], "thumbnail": 1, "imag": [1, 20], "imread": 1, "join": [1, 4], "logo": 1, "png": 1, "fig": 1, "imshow": 1, "axi": 1, "off": [1, 6, 9, 14], "show": [1, 6, 8, 9, 22], "instanti": 1, "authent": [1, 8, 10, 11, 13, 15, 17], "take": 1, "token": [1, 6, 9, 10, 11, 12, 15, 17, 19, 22], "deriv": [1, 6, 15, 22], "flux_us": [1, 6, 9, 11, 12, 22], "flux_token": [1, 6, 9, 11, 12, 22], "environ": [1, 5, 7, 12, 22], "cli": [1, 9, 22], "let": [1, 7, 9, 21, 22], "node": [1, 6, 7, 22], "cluster": [1, 5, 6, 7, 9, 10, 21, 22], "print": 1, "re": [1, 8, 22], "list_nod": 1, "dump": 1, "indent": 1, "57d0f60fce2e": 1, "now": [1, 8, 22], "flux": [1, 2, 4, 5, 7, 8, 9, 11, 12, 14, 19, 20, 21, 22], "sleep": [1, 9], "60": [1, 9], "command": [1, 5, 6, 8, 20, 21], "indic": [1, 9], "someth": [1, 20], "went": 1, "wrong": 1, "ha": [1, 6, 15], "error": [1, 12], "exit": [1, 5, 6, 9], "To": [1, 6, 8, 9, 10, 20], "auth": [1, 6, 9, 11, 19], "server": [1, 5, 6, 8, 9, 10, 12, 14, 20], "should": [1, 4, 6, 12, 18, 20], "startup": [1, 6], "variabl": [1, 5, 6, 9, 12, 22], "first": [1, 4, 6, 8, 9, 22], "two": [1, 6, 9], "found": [1, 8, 9], "export": [1, 6, 9, 22], "fluxus": [1, 6, 9, 12], "12345": [1, 6, 9], "flux_require_auth": [1, 6], "true": [1, 5, 6, 9, 12, 14, 15, 18, 22], "And": [1, 6, 8, 17, 20, 22], "final": [1, 4, 6, 22], "info": [1, 6, 8], "id": [1, 5, 8, 9, 11, 13, 14, 16, 18, 22], "361295786278912": 1, "userid": [1, 9, 22], "urgenc": [1, 9, 22], "16": [1, 9, 22], "prioriti": [1, 9, 22], "t_submit": [1, 9, 22], "1668305924": 1, "5898263": 1, "t_depend": [1, 9, 22], "t_run": [1, 9, 22], "6036532": 1, "state": [1, 9, 22], "name": [1, 6, 8, 9, 11, 12, 13, 15, 16, 18, 22], "ntask": [1, 9, 22], "ncore": [1, 22], "durat": [1, 22], "nnode": [1, 9, 22], "rank": [1, 9, 22], "nodelist": [1, 9, 22], "expir": [1, 6, 9, 17, 22], "4821905924": 1, "result": [1, 8, 9, 22], "returncod": [1, 22], "runtim": [1, 5, 22], "4636096954345703": 1, "waitstatu": [1, 9, 22], "occur": [1, 22], "sever": [1, 21, 22], "type": [1, 13, 22], "log": [1, 8, 11, 19, 22], "ad": [1, 6, 9, 10], "echo": [1, 20], "pancak": [1, 9, 20], "realli": [1, 8], "just": [1, 6, 9, 20, 22], "morn": 1, "cake": 1, "5": [1, 6], "output": [1, 9, 11, 16, 18, 20, 22], "n": [1, 22], "three": [1, 10], "unison": 1, "so": [1, 6, 8, 9, 10, 12, 17, 22], "them": [1, 6, 8], "back": [1, 9, 10, 12, 22], "second": [1, 6], "10": [1, 6], "20": 1, "30": 1, "361393211572224": 1, "361392691478528": 1, "361392037167104": 1, "360411408891904": 1, "361304158109696": 1, "360500059701248": 1, "360499539607552": 1, "360499053068288": 1, "360502072967168": 1, "360412012871680": 1, "356049030742016": 1, "356053023719424": 1, "356051731873792": 1, "356051111116800": 1, "356054131015680": 1, "356049668276224": 1, "323743595364352": 1, "323754819321856": 1, "323754148233216": 1, "323752906719232": 1, "323756681592832": 1, "323752151744512": 1, "322373450465280": 1, "322377242116096": 1, "322376034156544": 1, "322375480508416": 1, "322379221827584": 1, "322374071222272": 1, "314610330632192": 1, "314609810538496": 1, "313911777689600": 1, "314609307222016": 1, "314380113674240": 1, "310431579111424": 1, "310434615787520": 1, "310434011807744": 1, "310433458159616": 1, "310443658706944": 1, "310432183091200": 1, "306433887305728": 1, "306436286447616": 1, "305828548575232": 1, "306435061710848": 1, "306434508062720": 1, "306436873650176": 1, "244509770252288": [1, 9], "116794505297920": 1, "39064489164800": 1, "38133571780608": 1, "36512691388416": 1, "30820953751552": 1, "26132493631488": 1, "how": [1, 6, 7], "search": 1, "start": [1, 5, 20, 21], "queri": [1, 5], "2": [1, 9, 22], "1668305930": 1, "3657866": 1, "3788106": 1, "4821905930": 1, "09533405303955078": 1, "331216": 1, "3446293": 1, "13027596473693848": 1, "draw": [1, 5], "recordstot": [1, 5], "53": 1, "recordsfilt": [1, 5], "intend": [1, 5], "request": [1, 5, 6, 8, 9, 10], "messag": [1, 9, 22], "361395661045760": 1, "stop": [1, 6], "servic": [1, 7], "stop_servic": 1, "total": [1, 3, 5], "script": [1, 2, 9, 22], "minut": [1, 6], "262": [1, 3], "python": [1, 2, 5, 6, 7, 8, 10, 21], "api_tutori": [1, 3], "py": [1, 3, 6], "jupyt": [1, 2], "notebook": [1, 2], "ipynb": 1, "galleri": [1, 2], "sphinx": [1, 2, 6], "rest": [2, 4, 5, 6, 7, 8, 9, 12, 14, 20, 21, 22], "consist": 2, "introductori": [2, 3], "all": [2, 4, 5, 6, 8, 9, 22], "auto_examples_python": 2, "zip": 2, "auto_examples_jupyt": 2, "00": 3, "06": 3, "auto_exampl": 3, "exampl": [3, 6, 7, 8, 9, 20, 21, 22], "api": [3, 4, 6, 7, 11, 12, 19, 20, 21, 22], "mb": 3, "te": 4, "commun": [4, 6], "gist": 4, "simpl": [4, 5, 6, 9, 10], "editori": 4, "fix": [4, 6], "simpli": 4, "within": [4, 6], "github": [4, 9, 10, 22], "pr": 4, "suffic": 4, "But": [4, 20], "larger": 4, "enhanc": 4, "discuss": [4, 9], "project": 4, "leader": 4, "develop": [4, 7, 9, 10, 22], "u": [4, 6, 7, 21], "framework": [4, 6, 9, 10, 20, 22], "slack": 4, "contact": 4, "inviti": 4, "go": [4, 7, 8, 10, 20], "branch": [4, 6], "exist": [4, 9, 13], "style": 4, "preced": 4, "test": [4, 14, 20, 22], "lint": [4, 7], "help": [4, 9, 21], "black": [4, 6], "isort": [4, 6], "flake8": [4, 6], "local": [4, 7, 20, 21], "step": 4, "review": 4, "default": [4, 5, 6, 9, 10, 12, 18], "been": [4, 6, 9], "major": 4, "changelog": 4, "md": [4, 6, 15], "repositori": [4, 6, 9], "updat": [4, 6, 9, 11, 13], "readm": 4, "merg": 4, "done": [4, 6, 9, 22], "owner": [4, 6, 9, 11, 16, 22], "see": [4, 6, 8, 9, 13, 20, 22], "guid": [4, 7, 10], "question": [4, 7, 21], "pleas": [4, 7, 10, 21], "don": [4, 6, 9, 20], "t": [4, 6, 9, 12, 14, 20], "hesit": 4, "open": [4, 6, 10, 20], "issu": [4, 7, 10, 21], "spec": 5, "endpoint": [5, 6, 7, 8, 10, 20, 21], "g": [5, 6, 9, 22], "view": [5, 8, 11, 19, 20], "like": [5, 6, 8, 9, 10, 20, 22], "programmat": 5, "abil": 5, "end": [5, 6, 9], "thu": 5, "bring": 5, "down": 5, "mini": [5, 22], "own": [5, 6, 9, 10, 20, 21, 22], "executor": 5, "current": [5, 6, 7, 8, 9, 17, 21], "By": 5, "return": [5, 9, 22], "dict": [5, 12, 13, 18], "bool": [5, 12, 13, 18], "want": [5, 6, 8, 9, 10, 20, 22], "complet": [5, 6, 9, 22], "metadata": [5, 6, 12, 18], "int": [5, 12, 13, 18], "maximum": 5, "retriev": [5, 10], "custom": [5, 6, 9], "It": [5, 8], "intern": 5, "site": 5, "tabl": [5, 6, 8, 10, 22], "after": [5, 6, 9], "string": 5, "attribut": 5, "avail": [5, 6, 8, 9, 22], "fitler": 5, "integ": [5, 12, 15], "jqueri": 5, "datat": 5, "unlimit": 5, "workdir": [5, 9, 15], "str": [5, 12, 13, 17, 18], "directori": [5, 6, 9, 22], "unset": [5, 6], "envar": [5, 6, 9, 15], "set": [5, 6, 9, 11, 12, 21], "kei": [5, 6, 9, 12, 15], "valu": [5, 6, 9, 12], "pair": [5, 9, 12], "add": [5, 6, 7, 9, 10, 14], "num_task": [5, 9], "task": [5, 9], "cores_per_task": [5, 9], "core": [5, 9, 11, 19], "per": [5, 9], "gpus_per_task": [5, 9], "gpu": [5, 6, 9], "num_nod": [5, 9], "exclus": [5, 9], "fals": [5, 6, 9, 12, 14, 18, 22], "specif": [5, 9, 22], "identifi": 5, "instruct": 6, "up": [6, 9], "vscode": 6, "recip": 6, "easi": [6, 7, 10, 21], "spin": [6, 9], "wai": [6, 9, 12], "continu": [6, 9], "demo": [6, 20], "ghcr": [6, 20], "io": [6, 20], "arg": 6, "use_auth": 6, "Or": [6, 9, 22], "extra": [6, 12], "usernam": [6, 9, 13, 14], "support": [6, 8, 10], "descript": 6, "password": [6, 8, 9, 11, 12, 13, 14, 18], "turn": [6, 9], "port": [6, 9, 22], "expos": [6, 9, 10], "5000": [6, 9, 20], "host": [6, 10, 22], "probabl": [6, 9], "shouldn": 6, "worker": [6, 22], "uvicorn": [6, 22], "gt": 6, "process": [6, 10], "ve": [6, 8, 9, 22], "correctli": 6, "rm": 6, "p": [6, 20], "secret": [6, 9, 10, 12], "collect": 6, "item": 6, "72": 6, "wait": 6, "press": 6, "ctrl": 6, "quit": [6, 8], "detach": 6, "ci": 6, "push": 6, "registri": 6, "env": [6, 9, 11, 19, 22], "install_branch": 6, "featur": [6, 10], "install_repo": 6, "setup": [6, 9], "dev": 6, "clone": [6, 9, 22], "m": [6, 8, 9, 22], "venv": [6, 9, 22], "bin": [6, 9, 22], "activ": [6, 9, 13, 17, 22], "note": [6, 8, 10, 12, 20, 22], "isn": 6, "cannot": 6, "pip": [6, 9, 20, 22], "r": [6, 22], "txt": [6, 22], "bug": 6, "fastapi": [6, 7, 10, 21], "some": [6, 9, 15], "outsid": 6, "pydant": [6, 12, 18], "11": 6, "There": [6, 9, 10], "app": [6, 10, 22], "entri": 6, "separ": 6, "size": 6, "latter": 6, "makefil": [6, 22], "approach": [6, 9], "won": 6, "live": [6, 10], "sudo": 6, "usr": 6, "broker": [6, 10], "config": [6, 11, 18, 19], "etc": [6, 22], "conf": 6, "scron": 6, "cron": 6, "srundir": 6, "sstatedir": 6, "state_directori": 6, "var": 6, "lib": 6, "slocal": 6, "uri": 6, "slog": 6, "stderr": 6, "level": [6, 10], "sbroker": 6, "rc2_none": 6, "quorum": 6, "timeout": 6, "norestart": 6, "42": 6, "scontent": 6, "restor": 6, "auto": 6, "mung": 6, "befor": [6, 20], "flux_uri": 6, "tell": 6, "123456": 6, "altern": 6, "enabl": [6, 9], "pam": [6, 9, 10], "account": [6, 9, 10, 14], "flux_enable_pam": 6, "too": 6, "multi": [6, 9, 10, 21], "instanc": [6, 9, 21, 22], "actual": 6, "regardless": 6, "127": [6, 9, 22], "veri": [6, 22], "openapi": 6, "soon": [6, 7, 9], "onc": 6, "wherev": 6, "control": 6, "via": [6, 7, 8, 9, 10, 17, 21, 22], "flux_has_gpu": 6, "flux_number_nod": 6, "flux_option_flag": 6, "format": 6, "flux_secret_kei": [6, 9], "between": 6, "flux_access_token_expires_minut": 6, "access": [6, 9, 12, 20], "600": [6, 12], "flux_restful_host": [6, 22], "wide": 6, "fly": [6, 10], "over": 6, "ride": 6, "ompi": 6, "openmpi": 6, "translat": 6, "fluxjob": 6, "jobspecv1": 6, "from_command": 6, "kwarg": [6, 15, 16], "setattr_shell_opt": 6, "mpi": 6, "easili": 6, "more": [6, 9, 10], "okei": 6, "pre": 6, "commit": 6, "handl": [6, 9], "larg": [6, 9, 22], "tool": [6, 22], "prepar": [6, 9, 22], "manual": 6, "check": [6, 9, 10, 13, 15], "case": [6, 9, 10, 14, 21], "conflict": 6, "trim": 6, "trail": 6, "whitespac": 6, "mix": [6, 9], "hook": 6, "recommend": [6, 20], "never": 6, "flaw": 6, "creat": [6, 9, 10, 11, 12, 13, 14, 22], "alemb": [6, 22], "init": [6, 22], "migrat": 6, "At": [6, 22], "point": [6, 22], "edit": [6, 9], "could": [6, 9, 22], "model": [6, 11, 12, 13, 18, 19], "db": [6, 11, 12, 13, 15, 17, 19], "noqa": 6, "target_metadata": 6, "initi": 6, "empti": 6, "autogener": [6, 22], "intit": [6, 22], "upgrad": [6, 22], "head": [6, 22], "super": 6, "init_db": [6, 11, 19, 22], "__main__": 6, "peenut": 6, "entrypoint": 6, "sh": [6, 22], "alwai": [6, 8], "fresh": 6, "superus": [6, 9, 10, 13, 14, 17], "shown": 6, "abov": [6, 9], "folder": [6, 7, 9, 21], "content": [6, 19, 20], "might": [6, 9], "getting_start": 6, "eas": 6, "contribut": [6, 10], "contributor": 6, "mostli": 6, "everyth": 6, "modul": [6, 19], "written": 6, "markdown": 6, "toctre": 6, "newlin": 6, "space": 6, "index": 6, "instead": [6, 8], "rst": 6, "restructur": 6, "syntax": 6, "easier": 6, "reason": 6, "becaus": [6, 9, 22], "unauthent": 6, "anoth": [6, 9, 22], "termin": [6, 22], "built": 6, "cd": [6, 9, 22], "_build": 6, "html": 6, "enter": [6, 9], "web": 6, "9999": 6, "browser": [6, 20], "localhost": [6, 9], "alongsid": [6, 9, 10], "pytest": 6, "x": 6, "test_api": 6, "keep": 6, "demand": 6, "apidoc": 6, "remov": [6, 9, 11, 13], "ora": 6, "interact": [7, 8, 9, 10, 21], "while": [7, 9], "implement": 7, "know": [7, 21], "what": 7, "devcontain": 7, "docker": [7, 20], "databas": [7, 9, 13, 14, 17, 21], "home": [7, 9], "deploi": [8, 9, 10, 21], "page": [8, 15], "behind": 8, "ask": [8, 9, 20, 22], "ll": [8, 9], "abl": 8, "distinct": 8, "thei": 8, "prefix": [8, 12], "v1": [8, 12, 18], "screen": 8, "portal": 8, "useless": 8, "asid": 8, "sai": [8, 22], "hello": 8, "ye": 8, "bore": 8, "even": 8, "progress": 8, "checkbox": 8, "launcher": [8, 9, 11, 19], "nextflow": [8, 9, 12], "snakemak": [8, 9, 12], "essenti": 8, "multipl": 8, "mani": [8, 9], "latest": [8, 20], "refresh": 8, "mayb": 8, "somedai": 8, "fanci": 8, "shmanci": 8, "automat": 8, "rather": 8, "longer": 8, "welcom": [9, 10], "come": 9, "assum": 9, "deploy": 9, "describ": 9, "along": 9, "quick": [9, 20], "encod": [9, 15], "payload": [9, 15], "success": [9, 22], "behalf": 9, "proce": 9, "risk": 9, "sort": 9, "deal": 9, "typic": 9, "group": 9, "trust": 9, "friend": 9, "ok": 9, "happen": 9, "flux_secrey_kei": 9, "everi": 9, "known": [9, 15], "hash": [9, 12], "decod": 9, "valid": 9, "subsequ": 9, "few": [9, 14], "credenti": [9, 15, 22], "driver": 9, "randomli": 9, "miniclust": [9, 10], "In": [9, 10], "necessarili": 9, "forward": 9, "fall": [9, 12], "origin": 9, "401": 9, "statu": [9, 10], "www": 9, "receipt": 9, "until": 9, "worri": 9, "about": [9, 10, 12, 18], "complex": 9, "sdk": 9, "anyth": 9, "product": [9, 10], "context": [9, 17], "learn": 9, "itself": 9, "paylod": 9, "notsecrethoo": 9, "read": 9, "languag": 9, "snippet": 9, "virtual": 9, "directli": 9, "git": [9, 22], "com": [9, 10, 22], "although": 9, "write": 9, "usag": 9, "h": 9, "is_launch": 9, "pipeline_var": 9, "superhero": 9, "batman": 9, "superhero_nam": 9, "manbat": 9, "12402053611520": 9, "confirm": 9, "jobid": 9, "posit": 9, "1234": 9, "1667941663": 9, "3324268": 9, "3549669": 9, "t_cleanup": [9, 22], "1667941723": 9, "4129763": 9, "t_inact": [9, 22], "4203393": 9, "64": 9, "sampl": 9, "exception_occur": [9, 22], "1668546463": 9, "annot": [9, 12, 18], "sched": 9, "queue": 9, "block": 9, "stream": 9, "doesn": [9, 14], "usual": 9, "didn": 9, "22883485089792": 9, "insid": 9, "plai": 9, "next": 9, "out": [9, 10, 22], "method": 9, "fluxrestfulcli": 9, "initus": 9, "central": 9, "param": 9, "configur": [9, 12, 18], "subkei": 9, "sure": 9, "creation": 9, "set_basic_auth": 9, "hostnam": 9, "sooner": 9, "upon": 9, "container": 10, "With": 10, "eventu": [10, 14], "subscrib": 10, "oauth2": 10, "flow": 10, "potenti": 10, "No": 10, "danger": 10, "serv": 10, "light": 10, "wrapper": [10, 12], "much": 10, "assumpt": 10, "entir": [10, 22], "match": 10, "vsoch": 10, "thought": 10, "deepli": 10, "yet": [10, 14], "ping": 10, "me": 10, "idea": 10, "extern": 10, "pull": 10, "licens": 10, "access_token_expires_minut": [11, 12], "api_vers": [11, 12], "app_nam": [11, 12], "db_file": [11, 12], "flux_nod": [11, 12], "has_gpu": [11, 12], "known_launch": [11, 12], "model_config": [11, 12, 18], "model_field": [11, 12, 18], "option_flag": [11, 12], "require_auth": [11, 12], "secret_kei": [11, 12, 16], "generate_secret_kei": [11, 12], "get_bool_envar": [11, 12], "get_int_envar": [11, 12], "get_option_flag": [11, 12], "parse_option_flag": [11, 12], "init_logg": [11, 12], "secur": [11, 19], "create_access_token": [11, 12], "get_password_hash": [11, 12], "verify_password": [11, 12], "crud": [11, 19], "modelbas": [11, 13], "get_multi": [11, 13], "usermodel": [11, 13], "get_by_usernam": [11, 13], "is_act": [11, 13, 14, 16, 18], "is_superus": [11, 13, 16, 18], "base_class": [11, 19], "add_us": [11, 14], "get_pars": [11, 14], "list_us": [11, 14], "session": [11, 13, 15, 17, 19], "alert_auth": [11, 15], "check_auth": [11, 15], "get_basic_head": [11, 15], "not_authent": [11, 15], "helper": [11, 19], "get_int_arg": [11, 15], "get_pag": [11, 15], "has_boolean_arg": [11, 15], "read_json": [11, 15], "launch": [11, 15], "owner_id": [11, 16, 18], "hashed_password": [11, 12, 16, 18], "user_nam": [11, 13, 16, 18], "router": [11, 19], "depend": [11, 15, 19], "get_current_active_superus": [11, 17], "get_current_active_us": [11, 17], "get_current_us": [11, 17], "get_db": [11, 15, 17], "schema": [11, 19], "jobbas": [11, 18], "jobcreat": [11, 18], "jobindb": [11, 18], "jobindbbas": [11, 18], "jobupd": [11, 18], "access_token": [11, 18], "token_typ": [11, 18], "tokenpayload": [11, 18], "sub": [11, 18], "userbas": [11, 18], "usercr": [11, 13, 18], "userindb": [11, 18], "userindbbas": [11, 18], "userupd": [11, 13, 18], "_case_sensit": 12, "_env_prefix": 12, "_env_fil": 12, "dotenvtyp": 12, "posixpath": 12, "_env_file_encod": 12, "_env_nested_delimit": 12, "_secrets_dir": 12, "sqlite": 12, "2ilr3uh8brprel3nbbaifuonfhjxgitk": 12, "baseset": 12, "classvar": [12, 18], "settingsconfigdict": 12, "arbitrary_types_allow": 12, "case_sensit": 12, "env_fil": 12, "env_file_encod": 12, "env_nested_delimit": 12, "env_prefix": 12, "forbid": 12, "protected_namespac": 12, "model_": 12, "settings_": 12, "secrets_dir": 12, "validate_default": 12, "dictionari": [12, 18], "conform": [12, 18], "configdict": [12, 18], "fieldinfo": [12, 18], "union": [12, 18], "nonetyp": [12, 18], "field": [12, 18], "map": [12, 18], "replac": [12, 18], "__fields__": [12, 18], "32": 12, "encrypt": 12, "boolean": 12, "pars": [12, 15], "around": 12, "flag": 12, "ui": 12, "logger_nam": 12, "analysi": 12, "subject": 12, "expires_delta": 12, "timedelta": 12, "jwt": [12, 17], "aren": 12, "salt": 12, "plain_password": 12, "verifi": 12, "modeltyp": 13, "createschematyp": 13, "updateschematyp": 13, "obj_in": 13, "skip": 13, "100": 13, "db_obj": 13, "wrap": 13, "determin": [13, 15], "courtesi": 13, "One": 14, "These": 14, "associ": 14, "That": 14, "seem": 14, "primarili": 14, "httpbasiccredenti": 15, "httpbasic": 15, "base64": 15, "async": 15, "incorrect": 15, "attempt": 15, "fallback": 15, "filenam": 15, "current_us": 17, "oauth2passwordbear": 17, "fail": 17, "close": 17, "orm_mod": 18, "basemodel": 18, "packag": 19, "subpackag": 19, "submodul": 19, "Then": 20, "those": 20, "adventur": 20, "fact": 20, "navig": 20, "explor": 20, "build": 20, "heart": 20, "pokemon": 20, "ascii": 20, "art": 20, "yai": 20, "serious": 20, "real": 20, "scienc": 20, "dinosaur": [20, 22], "alloc": 21, "arguabl": 22, "unnecessari": 22, "demonstr": 22, "possibl": 22, "older": 22, "depth": 22, "desir": 22, "inspect": 22, "16798": 22, "shell": 22, "easiest": 22, "quickli": 22, "ssh": 22, "corona194": 22, "ipython": 22, "again": 22, "whoami": 22, "8245884223488": 22, "34633": 22, "1678216131": 22, "163": 22, "1762564": 22, "234502": 22, "2362921": 22, "inact": 22, "4831816131": 22, "05824565887451172": 22, "dinosaur1": 22, "successfulli": 22, "cours": 22, "yourself": 22, "1944496111616": 22, "1678217369": 22, "1978858": 22, "211171": 22, "2724185": 22, "2742176": 22, "4831817369": 22, "06124758720397949": 22, "sinc": 22, "proof": 22, "concept": 22}, "objects": {"": [[11, 0, 0, 1, "app", ""]], "app": [[12, 0, 0, 1, "core", ""], [13, 0, 0, 1, "crud", ""], [14, 0, 0, 1, "db", ""], [15, 0, 0, 1, "library", ""], [16, 0, 0, 1, "models", ""], [17, 0, 0, 1, "routers", ""], [18, 0, 0, 1, "schemas", ""]], "app.core": [[12, 0, 0, 1, "config", ""], [12, 0, 0, 1, "logging", ""], [12, 0, 0, 1, "security", ""]], "app.core.config": [[12, 1, 1, 0, "Settings", "Bases: BaseSettings"], [12, 3, 1, 0, "generate_secret_key", "Generate a secret key to encrypt, if one not provided."], [12, 3, 1, 0, "get_bool_envar", "Get a boolean from the environment, meaning the value is set."], [12, 3, 1, 0, "get_int_envar", "Get (and parse) an integer environment variable"], [12, 3, 1, 0, "get_option_flags", "Wrapper around parse_option_flags to get from environment."], [12, 3, 1, 0, "parse_option_flags", "Parse key value pairs (optionally with a prefix) from the environment."]], "app.core.config.Settings": [[12, 2, 1, 0, "access_token_expires_minutes", ""], [12, 2, 1, 0, "api_version", ""], [12, 2, 1, 0, "app_name", ""], [12, 2, 1, 0, "db_file", ""], [12, 2, 1, 0, "flux_nodes", ""], [12, 2, 1, 0, "flux_token", ""], [12, 2, 1, 0, "flux_user", ""], [12, 2, 1, 0, "has_gpus", ""], [12, 2, 1, 0, "known_launchers", ""], [12, 2, 1, 0, "model_config", "Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict]."], [12, 2, 1, 0, "model_fields", "Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo]."], [12, 2, 1, 0, "option_flags", ""], [12, 2, 1, 0, "require_auth", ""], [12, 2, 1, 0, "secret_key", ""]], "app.core.logging": [[12, 3, 1, 0, "init_loggers", ""]], "app.core.security": [[12, 3, 1, 0, "create_access_token", "Create a jwt access token."], [12, 3, 1, 0, "get_password_hash", "Note we aren't providing a salt here, so the same password can generate different."], [12, 3, 1, 0, "verify_password", "Verify the password"]], "app.crud": [[13, 0, 0, 1, "base", ""], [13, 0, 0, 1, "user", ""]], "app.crud.base": [[13, 1, 1, 0, "ModelBase", "Bases: Generic[ModelType, CreateSchemaType, UpdateSchemaType]"]], "app.crud.base.ModelBase": [[13, 4, 1, 0, "create", ""], [13, 4, 1, 0, "get", ""], [13, 4, 1, 0, "get_multi", ""], [13, 4, 1, 0, "remove", ""], [13, 4, 1, 0, "update", ""]], "app.crud.user": [[13, 1, 1, 0, "UserModel", "Bases: ModelBase[User, UserCreate, UserUpdate]"]], "app.crud.user.UserModel": [[13, 4, 1, 0, "authenticate", "Determine if a user exists by the user name and checking the password."], [13, 4, 1, 0, "create", "Create a new user object."], [13, 4, 1, 0, "get_by_username", "Get a user by username from the database."], [13, 4, 1, 0, "is_active", "Courtesy function to see if user is active."], [13, 4, 1, 0, "is_superuser", "Courtesy function to check if a user is a superuser."], [13, 4, 1, 0, "update", "Update a user."]], "app.db": [[14, 0, 0, 1, "base", ""], [14, 0, 0, 1, "base_class", ""], [14, 0, 0, 1, "init_db", ""], [14, 0, 0, 1, "session", ""]], "app.db.init_db": [[14, 3, 1, 0, "add_user", "One off function to add a user to the database"], [14, 3, 1, 0, "get_parser", ""], [14, 3, 1, 0, "init_db", "Create the Flux Restful Superuser (and testing account)"], [14, 3, 1, 0, "list_users", "List users in the database."], [14, 3, 1, 0, "main", ""]], "app.library": [[15, 0, 0, 1, "auth", ""], [15, 0, 0, 1, "env", ""], [15, 0, 0, 1, "helpers", ""], [15, 0, 0, 1, "launcher", ""]], "app.library.auth": [[15, 3, 1, 0, "alert_auth", ""], [15, 3, 1, 0, "check_auth", "Check base64 encoded auth (this is HTTP Basic auth.)"], [15, 3, 1, 0, "get_basic_header", ""], [15, 3, 1, 0, "not_authenticated", ""]], "app.library.helpers": [[15, 3, 1, 0, "get_int_arg", "Attempt to get (and parse) and integer argument. Fallback to None."], [15, 3, 1, 0, "get_page", "Get a .md file from the app root."], [15, 3, 1, 0, "has_boolean_arg", "A helper to determine if a payload has a key, and it's in some derivation of True"], [15, 3, 1, 0, "read_json", ""]], "app.library.launcher": [[15, 3, 1, 0, "launch", "Launch a job with a known launcher"]], "app.models": [[16, 0, 0, 1, "job", ""], [16, 0, 0, 1, "user", ""]], "app.models.job": [[16, 1, 1, 0, "Job", "Bases: Base"]], "app.models.job.Job": [[16, 2, 1, 0, "id", ""], [16, 2, 1, 0, "name", ""], [16, 2, 1, 0, "output", ""], [16, 2, 1, 0, "owner", ""], [16, 2, 1, 0, "owner_id", ""]], "app.models.user": [[16, 1, 1, 0, "User", "Bases: Base"]], "app.models.user.User": [[16, 2, 1, 0, "hashed_password", ""], [16, 2, 1, 0, "id", ""], [16, 2, 1, 0, "is_active", ""], [16, 2, 1, 0, "is_superuser", ""], [16, 2, 1, 0, "jobs", ""], [16, 2, 1, 0, "secret_key", ""], [16, 2, 1, 0, "user_name", ""]], "app.routers": [[17, 0, 0, 1, "depends", ""]], "app.routers.depends": [[17, 3, 1, 0, "get_current_active_superuser", "Get the currently active superuser."], [17, 3, 1, 0, "get_current_active_user", "Get the currently active user."], [17, 3, 1, 0, "get_current_user", "Get the current user (via the token from the jwt)"], [17, 3, 1, 0, "get_db", "Get the database in a context so we can then close it."]], "app.schemas": [[18, 0, 0, 1, "job", ""], [18, 0, 0, 1, "token", ""], [18, 0, 0, 1, "user", ""]], "app.schemas.job": [[18, 1, 1, 0, "Job", "Bases: JobInDBBase"], [18, 1, 1, 0, "JobBase", "Bases: BaseModel"], [18, 1, 1, 0, "JobCreate", "Bases: JobBase"], [18, 1, 1, 0, "JobInDB", "Bases: JobInDBBase"], [18, 1, 1, 0, "JobInDBBase", "Bases: JobBase"], [18, 1, 1, 0, "JobUpdate", "Bases: JobBase"]], "app.schemas.job.Job": [[18, 2, 1, 0, "model_config", "Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict]."], [18, 2, 1, 0, "model_fields", "Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo]."]], "app.schemas.job.JobBase": [[18, 2, 1, 0, "model_config", "Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict]."], [18, 2, 1, 0, "model_fields", "Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo]."], [18, 2, 1, 0, "name", ""], [18, 2, 1, 0, "output", ""]], "app.schemas.job.JobCreate": [[18, 2, 1, 0, "model_config", "Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict]."], [18, 2, 1, 0, "model_fields", "Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo]."]], "app.schemas.job.JobInDB": [[18, 2, 1, 0, "model_config", "Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict]."], [18, 2, 1, 0, "model_fields", "Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo]."]], "app.schemas.job.JobInDBBase": [[18, 1, 1, 0, "Config", "Bases: object"], [18, 2, 1, 0, "id", ""], [18, 2, 1, 0, "model_config", "Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict]."], [18, 2, 1, 0, "model_fields", "Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo]."], [18, 2, 1, 0, "name", ""], [18, 2, 1, 0, "owner_id", ""]], "app.schemas.job.JobInDBBase.Config": [[18, 2, 1, 0, "orm_mode", ""]], "app.schemas.job.JobUpdate": [[18, 2, 1, 0, "model_config", "Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict]."], [18, 2, 1, 0, "model_fields", "Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo]."]], "app.schemas.token": [[18, 1, 1, 0, "Token", "Bases: BaseModel"], [18, 1, 1, 0, "TokenPayload", "Bases: BaseModel"]], "app.schemas.token.Token": [[18, 2, 1, 0, "access_token", ""], [18, 2, 1, 0, "model_config", "Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict]."], [18, 2, 1, 0, "model_fields", "Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo]."], [18, 2, 1, 0, "token_type", ""]], "app.schemas.token.TokenPayload": [[18, 2, 1, 0, "model_config", "Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict]."], [18, 2, 1, 0, "model_fields", "Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo]."], [18, 2, 1, 0, "sub", ""]], "app.schemas.user": [[18, 1, 1, 0, "User", "Bases: UserInDBBase"], [18, 1, 1, 0, "UserBase", "Bases: BaseModel"], [18, 1, 1, 0, "UserCreate", "Bases: UserBase"], [18, 1, 1, 0, "UserInDB", "Bases: UserInDBBase"], [18, 1, 1, 0, "UserInDBBase", "Bases: UserBase"], [18, 1, 1, 0, "UserUpdate", "Bases: UserBase"]], "app.schemas.user.User": [[18, 2, 1, 0, "model_config", "Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict]."], [18, 2, 1, 0, "model_fields", "Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo]."]], "app.schemas.user.UserBase": [[18, 2, 1, 0, "is_active", ""], [18, 2, 1, 0, "is_superuser", ""], [18, 2, 1, 0, "model_config", "Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict]."], [18, 2, 1, 0, "model_fields", "Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo]."]], "app.schemas.user.UserCreate": [[18, 2, 1, 0, "model_config", "Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict]."], [18, 2, 1, 0, "model_fields", "Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo]."], [18, 2, 1, 0, "password", ""], [18, 2, 1, 0, "user_name", ""]], "app.schemas.user.UserInDB": [[18, 2, 1, 0, "hashed_password", ""], [18, 2, 1, 0, "model_config", "Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict]."], [18, 2, 1, 0, "model_fields", "Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo]."]], "app.schemas.user.UserInDBBase": [[18, 1, 1, 0, "Config", "Bases: object"], [18, 2, 1, 0, "id", ""], [18, 2, 1, 0, "model_config", "Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict]."], [18, 2, 1, 0, "model_fields", "Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo]."]], "app.schemas.user.UserInDBBase.Config": [[18, 2, 1, 0, "orm_mode", ""]], "app.schemas.user.UserUpdate": [[18, 2, 1, 0, "model_config", "Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict]."], [18, 2, 1, 0, "model_fields", "Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo]."], [18, 2, 1, 0, "password", ""]]}, "objtypes": {"0": "py:module", "1": "py:class", "2": "py:attribute", "3": "py:function", "4": "py:method"}, "objnames": {"0": ["py", "module", "Python module"], "1": ["py", "class", "Python class"], "2": ["py", "attribute", "Python attribute"], "3": ["py", "function", "Python function"], "4": ["py", "method", "Python method"]}, "titleterms": {"licens": 0, "note": 1, "introductori": 1, "exampl": [1, 2], "us": 1, "api": [1, 2, 5, 8, 9, 10, 17], "tutori": [2, 20, 21], "comput": 3, "time": 3, "contribut": 4, "pull": 4, "request": 4, "process": 4, "servic": [5, 6], "post": 5, "v1": 5, "stop": 5, "job": [5, 8, 9, 16, 18], "get": [5, 8, 10, 22], "payload": 5, "search": 5, "submit": [5, 8, 9], "uid": 5, "cancel": [5, 9], "output": 5, "node": [5, 9], "develop": 6, "guid": [6, 9], "devcontain": 6, "docker": 6, "local": [6, 22], "1": 6, "instal": [6, 9, 22], "2": 6, "start": [6, 10, 22], "3": 6, "authent": [6, 9], "interact": [6, 22], "environ": [6, 9], "flux": [6, 10, 15], "option": 6, "flag": 6, "code": 6, "lint": 6, "databas": [6, 22], "document": [6, 7], "depend": [6, 17], "build": 6, "preview": 6, "run": 6, "test": 6, "docstr": 6, "interfac": [8, 9], "home": 8, "jobid": 8, "doc": 8, "user": [9, 13, 16, 18], "how": 9, "doe": 9, "work": 9, "mode": 9, "web": 9, "basic": 9, "oauth2": 9, "style": 9, "what": 9, "thi": 9, "includ": 9, "python": [9, 22], "command": [9, 22], "line": [9, 22], "client": 9, "info": 9, "log": [9, 12], "list": 9, "shell": 9, "config": [9, 12], "within": 9, "go": 9, "rest": 10, "app": [11, 12, 13, 14, 15, 16, 17, 18, 19], "packag": [11, 12, 13, 14, 15, 16, 17, 18], "subpackag": 11, "submodul": [11, 12, 13, 14, 15, 16, 17, 18], "form": 11, "modul": [11, 12, 13, 14, 15, 16, 17, 18], "main": 11, "content": [11, 12, 13, 14, 15, 16, 17, 18], "core": 12, "secur": 12, "crud": 13, "base": [13, 14], "db": 14, "base_class": 14, "init_db": 14, "session": 14, "librari": 15, "auth": 15, "env": 15, "helper": 15, "launcher": 15, "model": 16, "router": 17, "view": 17, "schema": 18, "token": 18, "contain": 20, "extern": 21, "an": 22, "alloc": 22}, "envversion": {"sphinx.domains.c": 3, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 9, "sphinx.domains.index": 1, "sphinx.domains.javascript": 3, "sphinx.domains.math": 2, "sphinx.domains.python": 4, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx.ext.intersphinx": 1, "sphinx.ext.todo": 2, "sphinx.ext.viewcode": 1, "nbsphinx": 4, "sphinx": 58}, "alltitles": {"Contributing": [[4, "contributing"]], "Pull Request Process": [[4, "pull-request-process"]], "Tutorials": [[2, "tutorials"], [21, "tutorials"]], "API Examples": [[2, "api-examples"]], "API": [[5, "api"], [8, "api"], [10, null]], "Service": [[5, "service"]], "POST /v1/service/stop": [[5, "post-v1-service-stop"]], "Jobs": [[5, "jobs"], [8, "jobs"]], "GET /v1/jobs": [[5, "get-v1-jobs"]], "Payload": [[5, "payload"], [5, "id1"]], "GET \u2018/v1/jobs/search\u2019": [[5, "get-v1-jobs-search"]], "POST /v1/jobs/submit": [[5, "post-v1-jobs-submit"]], "GET /v1/jobs/{uid}": [[5, "get-v1-jobs-uid"]], "POST /v1/jobs/{uid}/cancel": [[5, "post-v1-jobs-uid-cancel"]], "GET /v1/jobs/{uid}/output": [[5, "get-v1-jobs-uid-output"]], "Nodes": [[5, "nodes"]], "GET /v1/nodes": [[5, "get-v1-nodes"]], "Developer Guide": [[6, "developer-guide"]], "Devcontainer": [[6, "devcontainer"]], "Docker": [[6, "docker"]], "Local": [[6, "local"]], "1. Install": [[6, "install"]], "2. Start Service": [[6, "start-service"]], "3. Authentication": [[6, "authentication"]], "Interactions": [[6, "interactions"]], "Environment": [[6, "environment"], [9, "environment"]], "Flux Option Flags": [[6, "flux-option-flags"]], "Code Linting": [[6, "code-linting"]], "Database": [[6, "database"], [22, "database"]], "Documentation": [[6, "documentation"], [7, "documentation"]], "Install Dependencies and Build": [[6, "install-dependencies-and-build"]], "Preview Documentation": [[6, "preview-documentation"]], "Run Tests": [[6, "run-tests"]], "Docstrings": [[6, "docstrings"]], "Computation times": [[3, "computation-times"]], "Interface": [[8, "interface"]], "Home": [[8, "home"]], "GET /": [[8, "get"]], "GET /jobs/submit": [[8, "get-jobs-submit"]], "GET /jobs": [[8, "get-jobs"]], "GET /jobs/": [[8, "get-jobs-jobid"]], "GET /docs": [[8, "get-docs"]], "License": [[0, "license"]], "User Guide": [[9, "user-guide"]], "How does it work?": [[9, "how-does-it-work"]], "Modes": [[9, "modes"]], "Authentication": [[9, "authentication"]], "Web Interface Basic Authentication": [[9, "web-interface-basic-authentication"]], "API OAuth2 Style Authentication": [[9, "api-oauth2-style-authentication"]], "What does this user-guide include?": [[9, "what-does-this-user-guide-include"]], "Python": [[9, "python"], [22, "python"]], "Installation": [[9, "installation"]], "Command Line Client": [[9, "command-line-client"]], "Submit": [[9, "submit"]], "Cancel": [[9, "cancel"]], "Job Info": [[9, "job-info"]], "Logs": [[9, "logs"]], "List Jobs": [[9, "list-jobs"]], "List Nodes": [[9, "list-nodes"]], "Shell": [[9, "shell"]], "Config": [[9, "config"]], "Within Python": [[9, "within-python"]], "Go": [[9, "go"]], "Note": [[1, null]], "Introductory example - using the API": [[1, "introductory-example-using-the-api"]], "Local Install": [[22, "local-install"]], "Get an Allocation.": [[22, "get-an-allocation"]], "Start": [[22, "start"]], "Interact": [[22, "interact"]], "Command Line": [[22, "command-line"]], "External Tutorials": [[21, "external-tutorials"]], "Container Tutorial": [[20, "container-tutorial"]], "app.library package": [[15, "app-library-package"]], "Submodules": [[15, "submodules"], [18, "submodules"], [13, "submodules"], [16, "submodules"], [17, "submodules"], [11, "submodules"], [12, "submodules"], [14, "submodules"]], "app.library.auth module": [[15, "module-app.library.auth"]], "app.library.env module": [[15, "module-app.library.env"]], "app.library.flux module": [[15, "app-library-flux-module"]], "app.library.helpers module": [[15, "module-app.library.helpers"]], "app.library.launcher module": [[15, "module-app.library.launcher"]], "Module contents": [[15, "module-app.library"], [18, "module-app.schemas"], [13, "module-app.crud"], [16, "module-app.models"], [17, "module-app.routers"], [11, "module-app"], [12, "module-app.core"], [14, "module-app.db"]], "app.schemas package": [[18, "app-schemas-package"]], "app.schemas.job module": [[18, "module-app.schemas.job"]], "app.schemas.token module": [[18, "module-app.schemas.token"]], "app.schemas.user module": [[18, "module-app.schemas.user"]], "app.crud package": [[13, "app-crud-package"]], "app.crud.base module": [[13, "module-app.crud.base"]], "app.crud.user module": [[13, "module-app.crud.user"]], "app.models package": [[16, "app-models-package"]], "app.models.job module": [[16, "module-app.models.job"]], "app.models.user module": [[16, "module-app.models.user"]], "app.routers package": [[17, "app-routers-package"]], "app.routers.api module": [[17, "app-routers-api-module"]], "app.routers.depends module": [[17, "module-app.routers.depends"]], "app.routers.views module": [[17, "app-routers-views-module"]], "app package": [[11, "app-package"]], "Subpackages": [[11, "subpackages"]], "app.forms module": [[11, "app-forms-module"]], "app.main module": [[11, "app-main-module"]], "app.core package": [[12, "app-core-package"]], "app.core.config module": [[12, "module-app.core.config"]], "app.core.logging module": [[12, "module-app.core.logging"]], "app.core.security module": [[12, "module-app.core.security"]], "Flux RESTFul API": [[10, "flux-restful-api"]], "Getting Started": [[10, null]], "app.db package": [[14, "app-db-package"]], "app.db.base module": [[14, "module-app.db.base"]], "app.db.base_class module": [[14, "module-app.db.base_class"]], "app.db.init_db module": [[14, "module-app.db.init_db"]], "app.db.session module": [[14, "module-app.db.session"]], "app": [[19, "app"]]}, "indexentries": {"app": [[11, "module-app"]], "module": [[11, "module-app"], [12, "module-app.core"], [12, "module-app.core.config"], [12, "module-app.core.logging"], [12, "module-app.core.security"], [13, "module-app.crud"], [13, "module-app.crud.base"], [13, "module-app.crud.user"], [14, "module-app.db"], [14, "module-app.db.base"], [14, "module-app.db.base_class"], [14, "module-app.db.init_db"], [14, "module-app.db.session"], [15, "module-app.library"], [15, "module-app.library.auth"], [15, "module-app.library.env"], [15, "module-app.library.helpers"], [15, "module-app.library.launcher"], [16, "module-app.models"], [16, "module-app.models.job"], [16, "module-app.models.user"], [17, "module-app.routers"], [17, "module-app.routers.depends"], [18, "module-app.schemas"], [18, "module-app.schemas.job"], [18, "module-app.schemas.token"], [18, "module-app.schemas.user"]], "settings (class in app.core.config)": [[12, "app.core.config.Settings"]], "access_token_expires_minutes (app.core.config.settings attribute)": [[12, "app.core.config.Settings.access_token_expires_minutes"]], "api_version (app.core.config.settings attribute)": [[12, "app.core.config.Settings.api_version"]], "app.core": [[12, "module-app.core"]], "app.core.config": [[12, "module-app.core.config"]], "app.core.logging": [[12, "module-app.core.logging"]], "app.core.security": [[12, "module-app.core.security"]], "app_name (app.core.config.settings attribute)": [[12, "app.core.config.Settings.app_name"]], "create_access_token() (in module app.core.security)": [[12, "app.core.security.create_access_token"]], "db_file (app.core.config.settings attribute)": [[12, "app.core.config.Settings.db_file"]], "flux_nodes (app.core.config.settings attribute)": [[12, "app.core.config.Settings.flux_nodes"]], "flux_token (app.core.config.settings attribute)": [[12, "app.core.config.Settings.flux_token"]], "flux_user (app.core.config.settings attribute)": [[12, "app.core.config.Settings.flux_user"]], "generate_secret_key() (in module app.core.config)": [[12, "app.core.config.generate_secret_key"]], "get_bool_envar() (in module app.core.config)": [[12, "app.core.config.get_bool_envar"]], "get_int_envar() (in module app.core.config)": [[12, "app.core.config.get_int_envar"]], "get_option_flags() (in module app.core.config)": [[12, "app.core.config.get_option_flags"]], "get_password_hash() (in module app.core.security)": [[12, "app.core.security.get_password_hash"]], "has_gpus (app.core.config.settings attribute)": [[12, "app.core.config.Settings.has_gpus"]], "init_loggers() (in module app.core.logging)": [[12, "app.core.logging.init_loggers"]], "known_launchers (app.core.config.settings attribute)": [[12, "app.core.config.Settings.known_launchers"]], "model_config (app.core.config.settings attribute)": [[12, "app.core.config.Settings.model_config"]], "model_fields (app.core.config.settings attribute)": [[12, "app.core.config.Settings.model_fields"]], "option_flags (app.core.config.settings attribute)": [[12, "app.core.config.Settings.option_flags"]], "parse_option_flags() (in module app.core.config)": [[12, "app.core.config.parse_option_flags"]], "require_auth (app.core.config.settings attribute)": [[12, "app.core.config.Settings.require_auth"]], "secret_key (app.core.config.settings attribute)": [[12, "app.core.config.Settings.secret_key"]], "verify_password() (in module app.core.security)": [[12, "app.core.security.verify_password"]], "modelbase (class in app.crud.base)": [[13, "app.crud.base.ModelBase"]], "usermodel (class in app.crud.user)": [[13, "app.crud.user.UserModel"]], "app.crud": [[13, "module-app.crud"]], "app.crud.base": [[13, "module-app.crud.base"]], "app.crud.user": [[13, "module-app.crud.user"]], "authenticate() (app.crud.user.usermodel method)": [[13, "app.crud.user.UserModel.authenticate"]], "create() (app.crud.base.modelbase method)": [[13, "app.crud.base.ModelBase.create"]], "create() (app.crud.user.usermodel method)": [[13, "app.crud.user.UserModel.create"]], "get() (app.crud.base.modelbase method)": [[13, "app.crud.base.ModelBase.get"]], "get_by_username() (app.crud.user.usermodel method)": [[13, "app.crud.user.UserModel.get_by_username"]], "get_multi() (app.crud.base.modelbase method)": [[13, "app.crud.base.ModelBase.get_multi"]], "is_active() (app.crud.user.usermodel method)": [[13, "app.crud.user.UserModel.is_active"]], "is_superuser() (app.crud.user.usermodel method)": [[13, "app.crud.user.UserModel.is_superuser"]], "remove() (app.crud.base.modelbase method)": [[13, "app.crud.base.ModelBase.remove"]], "update() (app.crud.base.modelbase method)": [[13, "app.crud.base.ModelBase.update"]], "update() (app.crud.user.usermodel method)": [[13, "app.crud.user.UserModel.update"]], "add_user() (in module app.db.init_db)": [[14, "app.db.init_db.add_user"]], "app.db": [[14, "module-app.db"]], "app.db.base": [[14, "module-app.db.base"]], "app.db.base_class": [[14, "module-app.db.base_class"]], "app.db.init_db": [[14, "module-app.db.init_db"]], "app.db.session": [[14, "module-app.db.session"]], "get_parser() (in module app.db.init_db)": [[14, "app.db.init_db.get_parser"]], "init_db() (in module app.db.init_db)": [[14, "app.db.init_db.init_db"]], "list_users() (in module app.db.init_db)": [[14, "app.db.init_db.list_users"]], "main() (in module app.db.init_db)": [[14, "app.db.init_db.main"]], "alert_auth() (in module app.library.auth)": [[15, "app.library.auth.alert_auth"]], "app.library": [[15, "module-app.library"]], "app.library.auth": [[15, "module-app.library.auth"]], "app.library.env": [[15, "module-app.library.env"]], "app.library.helpers": [[15, "module-app.library.helpers"]], "app.library.launcher": [[15, "module-app.library.launcher"]], "check_auth() (in module app.library.auth)": [[15, "app.library.auth.check_auth"]], "get_basic_header() (in module app.library.auth)": [[15, "app.library.auth.get_basic_header"]], "get_int_arg() (in module app.library.helpers)": [[15, "app.library.helpers.get_int_arg"]], "get_page() (in module app.library.helpers)": [[15, "app.library.helpers.get_page"]], "has_boolean_arg() (in module app.library.helpers)": [[15, "app.library.helpers.has_boolean_arg"]], "launch() (in module app.library.launcher)": [[15, "app.library.launcher.launch"]], "not_authenticated() (in module app.library.auth)": [[15, "app.library.auth.not_authenticated"]], "read_json() (in module app.library.helpers)": [[15, "app.library.helpers.read_json"]], "job (class in app.models.job)": [[16, "app.models.job.Job"]], "user (class in app.models.user)": [[16, "app.models.user.User"]], "app.models": [[16, "module-app.models"]], "app.models.job": [[16, "module-app.models.job"]], "app.models.user": [[16, "module-app.models.user"]], "hashed_password (app.models.user.user attribute)": [[16, "app.models.user.User.hashed_password"]], "id (app.models.job.job attribute)": [[16, "app.models.job.Job.id"]], "id (app.models.user.user attribute)": [[16, "app.models.user.User.id"]], "is_active (app.models.user.user attribute)": [[16, "app.models.user.User.is_active"]], "is_superuser (app.models.user.user attribute)": [[16, "app.models.user.User.is_superuser"]], "jobs (app.models.user.user attribute)": [[16, "app.models.user.User.jobs"]], "name (app.models.job.job attribute)": [[16, "app.models.job.Job.name"]], "output (app.models.job.job attribute)": [[16, "app.models.job.Job.output"]], "owner (app.models.job.job attribute)": [[16, "app.models.job.Job.owner"]], "owner_id (app.models.job.job attribute)": [[16, "app.models.job.Job.owner_id"]], "secret_key (app.models.user.user attribute)": [[16, "app.models.user.User.secret_key"]], "user_name (app.models.user.user attribute)": [[16, "app.models.user.User.user_name"]], "app.routers": [[17, "module-app.routers"]], "app.routers.depends": [[17, "module-app.routers.depends"]], "get_current_active_superuser() (in module app.routers.depends)": [[17, "app.routers.depends.get_current_active_superuser"]], "get_current_active_user() (in module app.routers.depends)": [[17, "app.routers.depends.get_current_active_user"]], "get_current_user() (in module app.routers.depends)": [[17, "app.routers.depends.get_current_user"]], "get_db() (in module app.routers.depends)": [[17, "app.routers.depends.get_db"]], "job (class in app.schemas.job)": [[18, "app.schemas.job.Job"]], "jobbase (class in app.schemas.job)": [[18, "app.schemas.job.JobBase"]], "jobcreate (class in app.schemas.job)": [[18, "app.schemas.job.JobCreate"]], "jobindb (class in app.schemas.job)": [[18, "app.schemas.job.JobInDB"]], "jobindbbase (class in app.schemas.job)": [[18, "app.schemas.job.JobInDBBase"]], "jobindbbase.config (class in app.schemas.job)": [[18, "app.schemas.job.JobInDBBase.Config"]], "jobupdate (class in app.schemas.job)": [[18, "app.schemas.job.JobUpdate"]], "token (class in app.schemas.token)": [[18, "app.schemas.token.Token"]], "tokenpayload (class in app.schemas.token)": [[18, "app.schemas.token.TokenPayload"]], "user (class in app.schemas.user)": [[18, "app.schemas.user.User"]], "userbase (class in app.schemas.user)": [[18, "app.schemas.user.UserBase"]], "usercreate (class in app.schemas.user)": [[18, "app.schemas.user.UserCreate"]], "userindb (class in app.schemas.user)": [[18, "app.schemas.user.UserInDB"]], "userindbbase (class in app.schemas.user)": [[18, "app.schemas.user.UserInDBBase"]], "userindbbase.config (class in app.schemas.user)": [[18, "app.schemas.user.UserInDBBase.Config"]], "userupdate (class in app.schemas.user)": [[18, "app.schemas.user.UserUpdate"]], "access_token (app.schemas.token.token attribute)": [[18, "app.schemas.token.Token.access_token"]], "app.schemas": [[18, "module-app.schemas"]], "app.schemas.job": [[18, "module-app.schemas.job"]], "app.schemas.token": [[18, "module-app.schemas.token"]], "app.schemas.user": [[18, "module-app.schemas.user"]], "hashed_password (app.schemas.user.userindb attribute)": [[18, "app.schemas.user.UserInDB.hashed_password"]], "id (app.schemas.job.jobindbbase attribute)": [[18, "app.schemas.job.JobInDBBase.id"]], "id (app.schemas.user.userindbbase attribute)": [[18, "app.schemas.user.UserInDBBase.id"]], "is_active (app.schemas.user.userbase attribute)": [[18, "app.schemas.user.UserBase.is_active"]], "is_superuser (app.schemas.user.userbase attribute)": [[18, "app.schemas.user.UserBase.is_superuser"]], "model_config (app.schemas.job.job attribute)": [[18, "app.schemas.job.Job.model_config"]], "model_config (app.schemas.job.jobbase attribute)": [[18, "app.schemas.job.JobBase.model_config"]], "model_config (app.schemas.job.jobcreate attribute)": [[18, "app.schemas.job.JobCreate.model_config"]], "model_config (app.schemas.job.jobindb attribute)": [[18, "app.schemas.job.JobInDB.model_config"]], "model_config (app.schemas.job.jobindbbase attribute)": [[18, "app.schemas.job.JobInDBBase.model_config"]], "model_config (app.schemas.job.jobupdate attribute)": [[18, "app.schemas.job.JobUpdate.model_config"]], "model_config (app.schemas.token.token attribute)": [[18, "app.schemas.token.Token.model_config"]], "model_config (app.schemas.token.tokenpayload attribute)": [[18, "app.schemas.token.TokenPayload.model_config"]], "model_config (app.schemas.user.user attribute)": [[18, "app.schemas.user.User.model_config"]], "model_config (app.schemas.user.userbase attribute)": [[18, "app.schemas.user.UserBase.model_config"]], "model_config (app.schemas.user.usercreate attribute)": [[18, "app.schemas.user.UserCreate.model_config"]], "model_config (app.schemas.user.userindb attribute)": [[18, "app.schemas.user.UserInDB.model_config"]], "model_config (app.schemas.user.userindbbase attribute)": [[18, "app.schemas.user.UserInDBBase.model_config"]], "model_config (app.schemas.user.userupdate attribute)": [[18, "app.schemas.user.UserUpdate.model_config"]], "model_fields (app.schemas.job.job attribute)": [[18, "app.schemas.job.Job.model_fields"]], "model_fields (app.schemas.job.jobbase attribute)": [[18, "app.schemas.job.JobBase.model_fields"]], "model_fields (app.schemas.job.jobcreate attribute)": [[18, "app.schemas.job.JobCreate.model_fields"]], "model_fields (app.schemas.job.jobindb attribute)": [[18, "app.schemas.job.JobInDB.model_fields"]], "model_fields (app.schemas.job.jobindbbase attribute)": [[18, "app.schemas.job.JobInDBBase.model_fields"]], "model_fields (app.schemas.job.jobupdate attribute)": [[18, "app.schemas.job.JobUpdate.model_fields"]], "model_fields (app.schemas.token.token attribute)": [[18, "app.schemas.token.Token.model_fields"]], "model_fields (app.schemas.token.tokenpayload attribute)": [[18, "app.schemas.token.TokenPayload.model_fields"]], "model_fields (app.schemas.user.user attribute)": [[18, "app.schemas.user.User.model_fields"]], "model_fields (app.schemas.user.userbase attribute)": [[18, "app.schemas.user.UserBase.model_fields"]], "model_fields (app.schemas.user.usercreate attribute)": [[18, "app.schemas.user.UserCreate.model_fields"]], "model_fields (app.schemas.user.userindb attribute)": [[18, "app.schemas.user.UserInDB.model_fields"]], "model_fields (app.schemas.user.userindbbase attribute)": [[18, "app.schemas.user.UserInDBBase.model_fields"]], "model_fields (app.schemas.user.userupdate attribute)": [[18, "app.schemas.user.UserUpdate.model_fields"]], "name (app.schemas.job.jobbase attribute)": [[18, "app.schemas.job.JobBase.name"]], "name (app.schemas.job.jobindbbase attribute)": [[18, "app.schemas.job.JobInDBBase.name"]], "orm_mode (app.schemas.job.jobindbbase.config attribute)": [[18, "app.schemas.job.JobInDBBase.Config.orm_mode"]], "orm_mode (app.schemas.user.userindbbase.config attribute)": [[18, "app.schemas.user.UserInDBBase.Config.orm_mode"]], "output (app.schemas.job.jobbase attribute)": [[18, "app.schemas.job.JobBase.output"]], "owner_id (app.schemas.job.jobindbbase attribute)": [[18, "app.schemas.job.JobInDBBase.owner_id"]], "password (app.schemas.user.usercreate attribute)": [[18, "app.schemas.user.UserCreate.password"]], "password (app.schemas.user.userupdate attribute)": [[18, "app.schemas.user.UserUpdate.password"]], "sub (app.schemas.token.tokenpayload attribute)": [[18, "app.schemas.token.TokenPayload.sub"]], "token_type (app.schemas.token.token attribute)": [[18, "app.schemas.token.Token.token_type"]], "user_name (app.schemas.user.usercreate attribute)": [[18, "app.schemas.user.UserCreate.user_name"]]}, "docurls": ["about/license.html", "auto_examples/api_tutorial.html", "auto_examples/index.html", "auto_examples/sg_execution_times.html", "contributing.html", "getting_started/api.html", "getting_started/developer-guide.html", "getting_started/index.html", "getting_started/interface.html", "getting_started/user-guide.html", "index.html", "source/app.html", "source/app.core.html", "source/app.crud.html", "source/app.db.html", "source/app.library.html", "source/app.models.html", "source/app.routers.html", "source/app.schemas.html", "source/modules.html", "tutorials/container.html", "tutorials/index.html", "tutorials/local.html"]}) \ No newline at end of file +Search.setIndex({"titles": ["License", "Introductory example - using the API", "Tutorials", "Computation times", "Contributing", "API", "Developer Guide", "Documentation", "Interface", "User Guide", "Flux RESTFul API", "app package", "app.core package", "app.crud package", "app.db package", "app.library package", "app.models package", "app.routers package", "app.schemas package", "app", "Container Tutorial", "Tutorials", "Local Install"], "terms": {"gnu": 0, "lesser": 0, "gener": [0, 1, 2, 4, 5, 6, 9, 12, 13, 17, 20], "public": 0, "version": [0, 5, 9, 22], "3": [0, 1, 9], "29": 0, "june": 0, "2007": 0, "copyright": [0, 4], "c": [0, 6], "free": 0, "softwar": [0, 20], "foundat": 0, "inc": 0, "http": [0, 6, 9, 10, 15, 20, 22], "fsf": 0, "org": 0, "everyon": 0, "i": [0, 1, 2, 4, 5, 6, 7, 8, 9, 10, 12, 13, 15, 20, 21, 22], "permit": 0, "copi": 0, "distribut": 0, "verbatim": 0, "thi": [0, 1, 2, 4, 5, 6, 7, 8, 10, 12, 15, 18, 20, 21, 22], "document": [0, 4, 9, 10], "chang": [0, 4, 6], "allow": [0, 5], "incorpor": 0, "term": 0, "condit": 0, "supplement": 0, "addit": [0, 8, 9, 10, 21], "permiss": 0, "list": [0, 1, 5, 10, 12, 13, 14, 22], "below": [0, 6, 9, 10, 20], "definit": 0, "As": [0, 6, 9], "us": [0, 2, 3, 4, 5, 6, 9, 10, 12, 14, 20, 21, 22], "herein": 0, "refer": 0, "gpl": 0, "The": [0, 1, 4, 5, 6, 7, 8, 9, 10, 12, 21, 22], "librari": [0, 11, 19], "cover": 0, "work": [0, 5, 6, 7, 20, 22], "govern": 0, "other": [0, 4, 7, 20], "than": [0, 6, 10], "an": [0, 1, 4, 5, 6, 9, 10, 12, 20, 21], "applic": [0, 5, 6, 7, 21], "combin": 0, "defin": [0, 6, 9, 12, 18], "ani": [0, 4, 6, 7, 12, 13, 16, 21], "make": [0, 6, 7, 8, 9, 21, 22], "interfac": [0, 6, 7, 10, 20], "provid": [0, 4, 5, 6, 7, 8, 9, 10, 12, 21], "which": [0, 5, 6, 9, 12], "otherwis": 0, "base": [0, 5, 6, 9, 11, 12, 16, 18, 19, 20], "subclass": 0, "class": [0, 12, 13, 16, 18], "deem": 0, "mode": [0, 6, 21, 22], "A": [0, 5, 9, 15], "produc": [0, 22], "link": [0, 4, 10, 14], "particular": 0, "wa": [0, 6, 9], "made": 0, "also": [0, 1, 4, 6, 9, 21, 22], "call": [0, 9], "minim": 0, "correspond": 0, "sourc": [0, 1, 2, 4, 6, 9, 12, 13, 14, 15, 16, 17, 18, 22], "mean": [0, 6, 9, 10, 12], "exclud": 0, "code": [0, 1, 2, 4, 7, 9], "portion": 0, "consid": 0, "isol": 0, "ar": [0, 1, 5, 6, 8, 9, 10, 14, 20, 22], "object": [0, 13, 18], "includ": [0, 4, 5, 6, 7, 21], "data": [0, 1, 5, 6], "util": 0, "program": 0, "need": [0, 1, 5, 6, 9, 20, 22], "reproduc": 0, "from": [0, 1, 2, 5, 6, 8, 9, 12, 13, 15, 17, 18, 20, 22], "system": [0, 6, 9], "except": [0, 1, 8, 22], "section": 0, "you": [0, 1, 4, 5, 6, 7, 8, 9, 10, 20, 21, 22], "mai": 0, "convei": 0, "under": [0, 6], "4": [0, 1, 6], "without": [0, 6, 8, 9], "being": 0, "bound": [0, 9], "modifi": 0, "If": [0, 1, 4, 6, 7, 8, 9, 20, 21], "your": [0, 1, 4, 6, 7, 9, 20, 21, 22], "modif": 0, "facil": 0, "function": [0, 6, 12, 13, 14], "suppli": 0, "argument": [0, 6, 9, 15], "pass": [0, 6], "when": [0, 4, 8, 9, 22], "invok": 0, "good": [0, 8], "faith": 0, "effort": 0, "ensur": [0, 6, 20], "event": [0, 10], "doe": [0, 7, 8], "still": 0, "oper": [0, 5, 9, 10, 21], "perform": 0, "whatev": 0, "part": [0, 6], "its": 0, "purpos": 0, "remain": 0, "meaning": 0, "b": 0, "none": [0, 5, 6, 12, 13, 14, 15, 18], "materi": 0, "header": [0, 4, 9], "file": [0, 3, 4, 6, 9, 15], "form": [0, 19], "choic": 0, "limit": [0, 5, 13], "numer": 0, "paramet": [0, 5], "structur": 0, "layout": 0, "accessor": 0, "small": [0, 1, 9, 10], "macro": 0, "inlin": 0, "templat": [0, 6], "ten": 0, "fewer": 0, "line": [0, 5, 6, 20, 21], "length": [0, 1, 5, 12], "do": [0, 1, 5, 6, 8, 9, 20, 22], "both": [0, 9], "follow": [0, 4, 5, 6, 8, 9, 20], "give": [0, 6], "promin": 0, "notic": [0, 8], "each": [0, 9], "accompani": 0, "taken": [0, 9], "togeth": 0, "effect": 0, "restrict": 0, "contain": [0, 6, 9, 21], "revers": 0, "engin": 0, "debug": 0, "For": [0, 4, 6, 8], "displai": 0, "dure": 0, "execut": [0, 3, 20], "among": 0, "well": 0, "direct": 0, "user": [0, 1, 5, 6, 7, 8, 10, 11, 12, 14, 15, 17, 19, 21, 22], "d": [0, 6, 8, 22], "one": [0, 6, 8, 9, 10, 12, 20], "0": [0, 1, 3, 5, 6, 9, 13, 20, 22], "suitabl": 0, "recombin": 0, "relink": 0, "manner": 0, "specifi": [0, 6], "6": [0, 1, 6], "1": [0, 1, 5, 9, 12, 22], "share": [0, 6, 12], "mechan": 0, "run": [0, 1, 5, 9, 20, 22], "time": [0, 1, 20, 22], "alreadi": [0, 9, 22], "present": 0, "": [0, 1, 4, 6, 8, 9, 12, 15, 20, 22], "comput": 0, "properli": [0, 4], "compat": 0, "e": [0, 5, 6, 9, 22], "instal": [0, 10, 20, 21], "inform": [0, 9], "onli": [0, 6, 8, 9, 20], "would": [0, 1, 6, 9, 10], "requir": [0, 1, 5, 6, 9, 12, 18, 20, 22], "extent": 0, "necessari": [0, 4, 8, 14], "option": [0, 1, 5, 9, 12], "4d0": 0, "must": [0, 4, 5, 6], "4d1": 0, "place": 0, "side": 0, "singl": [0, 6, 7, 8, 9, 10, 12, 14, 21, 22], "same": [0, 6, 9, 12, 20, 22], "uncombin": 0, "explain": [0, 4], "where": [0, 9, 22], "find": [0, 22], "revis": [0, 6, 22], "publish": 0, "new": [0, 4, 5, 13], "Such": 0, "similar": [0, 5, 20], "spirit": 0, "differ": [0, 9, 12], "detail": [0, 1, 5, 15], "address": 0, "problem": 0, "concern": 0, "given": [0, 9, 14], "distinguish": 0, "number": [0, 5, 6, 9, 22], "receiv": 0, "certain": 0, "later": [0, 6], "appli": [0, 5], "have": [0, 4, 6, 7, 8, 9, 10, 20, 21, 22], "either": [0, 6, 9, 12], "choos": [0, 7, 9], "ever": 0, "proxi": 0, "can": [0, 1, 4, 6, 8, 9, 10, 12, 14, 17, 20, 22], "decid": 0, "whether": [0, 9], "futur": 0, "shall": 0, "statement": 0, "accept": 0, "perman": 0, "author": [0, 9], "click": [1, 8, 20], "here": [1, 4, 5, 6, 9, 12, 20], "download": [1, 2], "full": 1, "tutori": [1, 9, 10, 22], "walk": [1, 21], "through": [1, 21], "basic": [1, 6, 8, 12, 15], "most": [1, 6, 9], "thing": [1, 8, 22], "submit": [1, 10, 20, 22], "job": [1, 6, 7, 10, 11, 15, 19, 20, 22], "get": [1, 4, 9, 11, 12, 13, 15, 17, 21], "status": 1, "cancel": 1, "we": [1, 4, 6, 7, 8, 9, 10, 12, 17, 20, 21, 22], "our": [1, 2, 4, 6, 9, 20, 22], "client": [1, 6, 7, 20, 21, 22], "import": [1, 4, 6, 9, 22], "json": 1, "o": [1, 12], "sy": [1, 9], "matplotlib": 1, "pyplot": 1, "plt": 1, "flux_restful_cli": [1, 9, 22], "main": [1, 4, 6, 14, 19, 22], "get_client": [1, 9, 22], "expect": [1, 9], "render": [1, 2, 5, 6], "doc": [1, 6, 20], "root": [1, 4, 6, 15], "path": [1, 6, 9, 12, 20], "dirnam": 1, "abspath": 1, "getcwd": 1, "nice": [1, 22], "thumbnail": 1, "imag": [1, 20], "imread": 1, "join": [1, 4], "logo": 1, "png": 1, "fig": 1, "imshow": 1, "axi": 1, "off": [1, 6, 9, 14], "show": [1, 6, 8, 9, 22], "instanti": 1, "authent": [1, 8, 10, 11, 13, 15, 17], "take": 1, "token": [1, 6, 9, 10, 11, 12, 15, 17, 19, 22], "deriv": [1, 6, 15, 22], "flux_us": [1, 6, 9, 11, 12, 22], "flux_token": [1, 6, 9, 11, 12, 22], "environ": [1, 5, 7, 12, 22], "cli": [1, 9, 22], "let": [1, 7, 9, 21, 22], "node": [1, 6, 7, 22], "cluster": [1, 5, 6, 7, 9, 10, 21, 22], "print": 1, "re": [1, 8, 22], "list_nod": 1, "dump": 1, "indent": 1, "57d0f60fce2e": 1, "now": [1, 8, 22], "flux": [1, 2, 4, 5, 7, 8, 9, 11, 12, 14, 19, 20, 21, 22], "sleep": [1, 9], "60": [1, 9], "command": [1, 5, 6, 8, 20, 21], "indic": [1, 9], "someth": [1, 20], "went": 1, "wrong": 1, "ha": [1, 6, 15], "error": [1, 12], "exit": [1, 5, 6, 9], "To": [1, 6, 8, 9, 10, 20], "auth": [1, 6, 9, 11, 19], "server": [1, 5, 6, 8, 9, 10, 12, 14, 20], "should": [1, 4, 6, 12, 18, 20], "startup": [1, 6], "variabl": [1, 5, 6, 9, 12, 22], "first": [1, 4, 6, 8, 9, 22], "two": [1, 6, 9], "found": [1, 8, 9], "export": [1, 6, 9, 22], "fluxus": [1, 6, 9, 12], "12345": [1, 6, 9], "flux_require_auth": [1, 6], "true": [1, 5, 6, 9, 12, 14, 15, 18, 22], "And": [1, 6, 8, 17, 20, 22], "final": [1, 4, 6, 22], "info": [1, 6, 8], "id": [1, 5, 8, 9, 11, 13, 14, 16, 18, 22], "361295786278912": 1, "userid": [1, 9, 22], "urgenc": [1, 9, 22], "16": [1, 9, 22], "prioriti": [1, 9, 22], "t_submit": [1, 9, 22], "1668305924": 1, "5898263": 1, "t_depend": [1, 9, 22], "t_run": [1, 9, 22], "6036532": 1, "state": [1, 9, 22], "name": [1, 6, 8, 9, 11, 12, 13, 15, 16, 18, 22], "ntask": [1, 9, 22], "ncore": [1, 22], "durat": [1, 22], "nnode": [1, 9, 22], "rank": [1, 9, 22], "nodelist": [1, 9, 22], "expir": [1, 6, 9, 17, 22], "4821905924": 1, "result": [1, 8, 9, 22], "returncod": [1, 22], "runtim": [1, 5, 22], "4636096954345703": 1, "waitstatu": [1, 9, 22], "occur": [1, 22], "sever": [1, 21, 22], "type": [1, 13, 22], "log": [1, 8, 11, 19, 22], "ad": [1, 6, 9, 10], "echo": [1, 20], "pancak": [1, 9, 20], "realli": [1, 8], "just": [1, 6, 9, 20, 22], "morn": 1, "cake": 1, "5": [1, 6], "output": [1, 9, 11, 16, 18, 20, 22], "n": [1, 22], "three": [1, 10], "unison": 1, "so": [1, 6, 8, 9, 10, 12, 17, 22], "them": [1, 6, 8], "back": [1, 9, 10, 12, 22], "second": [1, 6], "10": [1, 6], "20": 1, "30": 1, "361393211572224": 1, "361392691478528": 1, "361392037167104": 1, "360411408891904": 1, "361304158109696": 1, "360500059701248": 1, "360499539607552": 1, "360499053068288": 1, "360502072967168": 1, "360412012871680": 1, "356049030742016": 1, "356053023719424": 1, "356051731873792": 1, "356051111116800": 1, "356054131015680": 1, "356049668276224": 1, "323743595364352": 1, "323754819321856": 1, "323754148233216": 1, "323752906719232": 1, "323756681592832": 1, "323752151744512": 1, "322373450465280": 1, "322377242116096": 1, "322376034156544": 1, "322375480508416": 1, "322379221827584": 1, "322374071222272": 1, "314610330632192": 1, "314609810538496": 1, "313911777689600": 1, "314609307222016": 1, "314380113674240": 1, "310431579111424": 1, "310434615787520": 1, "310434011807744": 1, "310433458159616": 1, "310443658706944": 1, "310432183091200": 1, "306433887305728": 1, "306436286447616": 1, "305828548575232": 1, "306435061710848": 1, "306434508062720": 1, "306436873650176": 1, "244509770252288": [1, 9], "116794505297920": 1, "39064489164800": 1, "38133571780608": 1, "36512691388416": 1, "30820953751552": 1, "26132493631488": 1, "how": [1, 6, 7], "search": 1, "start": [1, 5, 20, 21], "queri": [1, 5], "2": [1, 9, 22], "1668305930": 1, "3657866": 1, "3788106": 1, "4821905930": 1, "09533405303955078": 1, "331216": 1, "3446293": 1, "13027596473693848": 1, "draw": [1, 5], "recordstot": [1, 5], "53": 1, "recordsfilt": [1, 5], "intend": [1, 5], "request": [1, 5, 6, 8, 9, 10], "messag": [1, 9, 22], "361395661045760": 1, "stop": [1, 6], "servic": [1, 7], "stop_servic": 1, "total": [1, 3, 5], "script": [1, 2, 9, 22], "minut": [1, 6], "262": [1, 3], "python": [1, 2, 5, 6, 7, 8, 10, 21], "api_tutori": [1, 3], "py": [1, 3, 6], "jupyt": [1, 2], "notebook": [1, 2], "ipynb": 1, "galleri": [1, 2], "sphinx": [1, 2, 6], "rest": [2, 4, 5, 6, 7, 8, 9, 12, 14, 20, 21, 22], "consist": 2, "introductori": [2, 3], "all": [2, 4, 5, 6, 8, 9, 22], "auto_examples_python": 2, "zip": 2, "auto_examples_jupyt": 2, "00": 3, "06": 3, "auto_exampl": 3, "exampl": [3, 6, 7, 8, 9, 20, 21, 22], "api": [3, 4, 6, 7, 11, 12, 19, 20, 21, 22], "mb": 3, "te": 4, "commun": [4, 6], "gist": 4, "simpl": [4, 5, 6, 9, 10], "editori": 4, "fix": [4, 6], "simpli": 4, "within": [4, 6], "github": [4, 9, 10, 22], "pr": 4, "suffic": 4, "But": [4, 20], "larger": 4, "enhanc": 4, "discuss": [4, 9], "project": 4, "leader": 4, "develop": [4, 7, 9, 10, 22], "u": [4, 6, 7, 21], "framework": [4, 6, 9, 10, 20, 22], "slack": 4, "contact": 4, "inviti": 4, "go": [4, 7, 8, 10, 20], "branch": [4, 6], "exist": [4, 9, 13], "style": 4, "preced": 4, "test": [4, 14, 20, 22], "lint": [4, 7], "help": [4, 9, 21], "black": [4, 6], "isort": [4, 6], "flake8": [4, 6], "local": [4, 7, 20, 21], "step": 4, "review": 4, "default": [4, 5, 6, 9, 10, 12, 18], "been": [4, 6, 9], "major": [4, 9], "changelog": 4, "md": [4, 6, 15], "repositori": [4, 6, 9], "updat": [4, 6, 9, 11, 13], "readm": 4, "merg": 4, "done": [4, 6, 9, 22], "owner": [4, 6, 9, 11, 16, 22], "see": [4, 6, 8, 9, 13, 20, 22], "guid": [4, 7, 10], "question": [4, 7, 21], "pleas": [4, 7, 10, 21], "don": [4, 6, 9, 20], "t": [4, 6, 9, 12, 14, 20], "hesit": 4, "open": [4, 6, 10, 20], "issu": [4, 7, 10, 21], "spec": 5, "endpoint": [5, 6, 7, 8, 10, 20, 21], "g": [5, 6, 9, 22], "view": [5, 8, 11, 19, 20], "like": [5, 6, 8, 9, 10, 20, 22], "programmat": 5, "abil": 5, "end": [5, 6, 9], "thu": 5, "bring": 5, "down": 5, "mini": [5, 22], "own": [5, 6, 9, 10, 20, 21, 22], "executor": 5, "current": [5, 6, 7, 8, 9, 17, 21], "By": 5, "return": [5, 9, 22], "dict": [5, 12, 13, 18], "bool": [5, 12, 13, 18], "want": [5, 6, 8, 9, 10, 20, 22], "complet": [5, 6, 9, 22], "metadata": [5, 6, 12, 18], "int": [5, 12, 13, 18], "maximum": 5, "retriev": [5, 10], "custom": [5, 6, 9], "It": [5, 8], "intern": 5, "site": 5, "tabl": [5, 6, 8, 10, 22], "after": [5, 6, 9], "string": 5, "attribut": 5, "avail": [5, 6, 8, 9, 22], "fitler": 5, "integ": [5, 12, 15], "jqueri": 5, "datat": 5, "unlimit": 5, "workdir": [5, 9, 15], "str": [5, 12, 13, 17, 18], "directori": [5, 6, 9, 22], "unset": [5, 6], "envar": [5, 6, 9, 15], "set": [5, 6, 9, 11, 12, 21], "kei": [5, 6, 9, 12, 15], "valu": [5, 6, 9, 12], "pair": [5, 9, 12], "add": [5, 6, 7, 9, 10, 14], "num_task": [5, 9], "task": [5, 9], "cores_per_task": [5, 9], "core": [5, 9, 11, 19], "per": [5, 9], "gpus_per_task": [5, 9], "gpu": [5, 6, 9], "num_nod": [5, 9], "exclus": [5, 9], "fals": [5, 6, 9, 12, 14, 18, 22], "specif": [5, 9, 22], "identifi": 5, "instruct": 6, "up": [6, 9], "vscode": 6, "recip": 6, "easi": [6, 7, 10, 21], "spin": [6, 9], "wai": [6, 9, 12], "continu": [6, 9], "demo": [6, 20], "ghcr": [6, 20], "io": [6, 20], "arg": 6, "use_auth": 6, "Or": [6, 9, 22], "extra": [6, 12], "usernam": [6, 9, 13, 14], "support": [6, 8, 10], "descript": 6, "password": [6, 8, 9, 11, 12, 13, 14, 18], "turn": [6, 9], "port": [6, 9, 22], "expos": [6, 9, 10], "5000": [6, 9, 20], "host": [6, 10, 22], "probabl": [6, 9], "shouldn": 6, "worker": [6, 22], "uvicorn": [6, 22], "gt": 6, "process": [6, 10], "ve": [6, 8, 9, 22], "correctli": 6, "rm": 6, "p": [6, 20], "secret": [6, 9, 10, 12], "collect": 6, "item": 6, "72": 6, "wait": 6, "press": 6, "ctrl": 6, "quit": [6, 8], "detach": 6, "ci": 6, "push": 6, "registri": 6, "env": [6, 9, 11, 19, 22], "install_branch": 6, "featur": [6, 10], "install_repo": 6, "setup": [6, 9], "dev": 6, "clone": [6, 9, 22], "m": [6, 8, 9, 22], "venv": [6, 9, 22], "bin": [6, 9, 22], "activ": [6, 9, 13, 17, 22], "note": [6, 8, 9, 10, 12, 20, 22], "isn": 6, "cannot": 6, "pip": [6, 9, 20, 22], "r": [6, 22], "txt": [6, 22], "bug": [6, 9], "fastapi": [6, 7, 10, 21], "some": [6, 9, 15], "outsid": 6, "pydant": [6, 12, 18], "11": 6, "There": [6, 9, 10], "app": [6, 10, 22], "entri": 6, "separ": 6, "size": 6, "latter": 6, "makefil": [6, 22], "approach": [6, 9], "won": 6, "live": [6, 10], "sudo": [6, 9], "usr": 6, "broker": [6, 10], "config": [6, 11, 18, 19], "etc": [6, 22], "conf": 6, "scron": 6, "cron": 6, "srundir": 6, "sstatedir": 6, "state_directori": 6, "var": 6, "lib": 6, "slocal": 6, "uri": 6, "slog": 6, "stderr": 6, "level": [6, 10], "sbroker": 6, "rc2_none": 6, "quorum": 6, "timeout": 6, "norestart": 6, "42": 6, "scontent": 6, "restor": 6, "auto": 6, "mung": 6, "befor": [6, 20], "flux_uri": 6, "tell": 6, "123456": 6, "altern": 6, "enabl": [6, 9], "pam": [6, 9, 10], "account": [6, 9, 10, 14], "flux_enable_pam": 6, "too": 6, "multi": [6, 9, 10, 21], "instanc": [6, 9, 21, 22], "actual": 6, "regardless": 6, "127": [6, 9, 22], "veri": [6, 22], "openapi": 6, "soon": [6, 7, 9], "onc": 6, "wherev": 6, "control": [6, 9], "via": [6, 7, 8, 9, 10, 17, 21, 22], "flux_has_gpu": 6, "flux_number_nod": 6, "flux_option_flag": 6, "format": 6, "flux_secret_kei": [6, 9], "between": 6, "flux_access_token_expires_minut": 6, "access": [6, 9, 12, 20], "600": [6, 12], "flux_restful_host": [6, 22], "wide": 6, "fly": [6, 10], "over": 6, "ride": 6, "ompi": 6, "openmpi": 6, "translat": 6, "fluxjob": 6, "jobspecv1": 6, "from_command": 6, "kwarg": [6, 15, 16], "setattr_shell_opt": 6, "mpi": 6, "easili": 6, "more": [6, 9, 10], "okei": 6, "pre": 6, "commit": 6, "handl": [6, 9], "larg": [6, 9, 22], "tool": [6, 22], "prepar": [6, 9, 22], "manual": 6, "check": [6, 9, 10, 13, 15], "case": [6, 9, 10, 14, 21], "conflict": 6, "trim": 6, "trail": 6, "whitespac": 6, "mix": [6, 9], "hook": 6, "recommend": [6, 20], "never": 6, "flaw": 6, "creat": [6, 9, 10, 11, 12, 13, 14, 22], "alemb": [6, 22], "init": [6, 22], "migrat": 6, "At": [6, 22], "point": [6, 22], "edit": [6, 9], "could": [6, 9, 22], "model": [6, 11, 12, 13, 18, 19], "db": [6, 11, 12, 13, 15, 17, 19], "noqa": 6, "target_metadata": 6, "initi": 6, "empti": 6, "autogener": [6, 22], "intit": [6, 22], "upgrad": [6, 22], "head": [6, 22], "super": 6, "init_db": [6, 11, 19, 22], "__main__": 6, "peenut": 6, "entrypoint": 6, "sh": [6, 22], "alwai": [6, 8], "fresh": 6, "superus": [6, 9, 10, 13, 14, 17], "shown": 6, "abov": [6, 9], "folder": [6, 7, 9, 21], "content": [6, 19, 20], "might": [6, 9], "getting_start": 6, "eas": 6, "contribut": [6, 10], "contributor": 6, "mostli": 6, "everyth": 6, "modul": [6, 19], "written": 6, "markdown": 6, "toctre": 6, "newlin": 6, "space": 6, "index": 6, "instead": [6, 8], "rst": 6, "restructur": 6, "syntax": 6, "easier": 6, "reason": 6, "becaus": [6, 9, 22], "unauthent": 6, "anoth": [6, 9, 22], "termin": [6, 22], "built": 6, "cd": [6, 9, 22], "_build": 6, "html": 6, "enter": [6, 9], "web": 6, "9999": 6, "browser": [6, 20], "localhost": [6, 9], "alongsid": [6, 9, 10], "pytest": 6, "x": 6, "test_api": 6, "keep": 6, "demand": 6, "apidoc": 6, "remov": [6, 9, 11, 13], "ora": 6, "interact": [7, 8, 9, 10, 21], "while": [7, 9], "implement": 7, "know": [7, 21], "what": 7, "devcontain": 7, "docker": [7, 20], "databas": [7, 9, 13, 14, 17, 21], "home": [7, 9], "deploi": [8, 9, 10, 21], "page": [8, 15], "behind": 8, "ask": [8, 9, 20, 22], "ll": [8, 9], "abl": 8, "distinct": 8, "thei": 8, "prefix": [8, 12], "v1": [8, 12, 18], "screen": 8, "portal": 8, "useless": 8, "asid": 8, "sai": [8, 22], "hello": 8, "ye": 8, "bore": 8, "even": 8, "progress": 8, "checkbox": 8, "launcher": [8, 9, 11, 19], "nextflow": [8, 9, 12], "snakemak": [8, 9, 12], "essenti": 8, "multipl": 8, "mani": [8, 9], "latest": [8, 20], "refresh": 8, "mayb": 8, "somedai": 8, "fanci": 8, "shmanci": 8, "automat": 8, "rather": 8, "longer": 8, "welcom": [9, 10], "come": 9, "assum": 9, "deploy": 9, "describ": 9, "along": 9, "quick": [9, 20], "encod": [9, 15], "payload": [9, 15], "success": [9, 22], "behalf": 9, "flux_server_mod": [9, 11, 12], "attempt": [9, 15], "sign": 9, "proce": 9, "risk": 9, "sort": 9, "deal": 9, "typic": 9, "group": 9, "trust": 9, "friend": 9, "ok": 9, "happen": 9, "flux_secrey_kei": 9, "everi": 9, "known": [9, 15], "hash": [9, 12], "decod": 9, "valid": 9, "subsequ": 9, "few": [9, 14], "credenti": [9, 15, 22], "driver": 9, "randomli": 9, "miniclust": [9, 10], "In": [9, 10], "necessarili": 9, "forward": 9, "fall": [9, 12], "origin": 9, "401": 9, "statu": [9, 10], "www": 9, "receipt": 9, "until": 9, "worri": 9, "about": [9, 10, 12, 18], "complex": 9, "sdk": 9, "anyth": 9, "product": [9, 10], "context": [9, 17], "learn": 9, "itself": 9, "paylod": 9, "notsecrethoo": 9, "read": 9, "languag": 9, "snippet": 9, "virtual": 9, "directli": 9, "git": [9, 22], "com": [9, 10, 22], "although": 9, "write": 9, "usag": 9, "h": 9, "is_launch": 9, "pipeline_var": 9, "superhero": 9, "batman": 9, "superhero_nam": 9, "manbat": 9, "12402053611520": 9, "confirm": 9, "jobid": 9, "posit": 9, "1234": 9, "1667941663": 9, "3324268": 9, "3549669": 9, "t_cleanup": [9, 22], "1667941723": 9, "4129763": 9, "t_inact": [9, 22], "4203393": 9, "64": 9, "sampl": 9, "exception_occur": [9, 22], "1668546463": 9, "annot": [9, 12, 18], "sched": 9, "queue": 9, "block": 9, "stream": 9, "doesn": [9, 14], "usual": 9, "didn": 9, "22883485089792": 9, "insid": 9, "plai": 9, "next": 9, "out": [9, 10, 22], "method": 9, "fluxrestfulcli": 9, "initus": 9, "central": 9, "param": 9, "configur": [9, 12, 18], "subkei": 9, "sure": 9, "creation": 9, "set_basic_auth": 9, "hostnam": 9, "sooner": 9, "upon": 9, "container": 10, "With": 10, "eventu": [10, 14], "subscrib": 10, "oauth2": 10, "flow": 10, "potenti": 10, "No": 10, "danger": 10, "serv": 10, "light": 10, "wrapper": [10, 12], "much": 10, "assumpt": 10, "entir": [10, 22], "match": 10, "vsoch": 10, "thought": 10, "deepli": 10, "yet": [10, 14], "ping": 10, "me": 10, "idea": 10, "extern": 10, "pull": 10, "licens": 10, "access_token_expires_minut": [11, 12], "api_vers": [11, 12], "app_nam": [11, 12], "db_file": [11, 12], "flux_nod": [11, 12], "has_gpu": [11, 12], "known_launch": [11, 12], "model_config": [11, 12, 18], "model_field": [11, 12, 18], "option_flag": [11, 12], "require_auth": [11, 12], "secret_kei": [11, 12, 16], "generate_secret_kei": [11, 12], "get_bool_envar": [11, 12], "get_int_envar": [11, 12], "get_option_flag": [11, 12], "parse_option_flag": [11, 12], "init_logg": [11, 12], "secur": [11, 19], "create_access_token": [11, 12], "get_password_hash": [11, 12], "verify_password": [11, 12], "crud": [11, 19], "modelbas": [11, 13], "get_multi": [11, 13], "usermodel": [11, 13], "get_by_usernam": [11, 13], "is_act": [11, 13, 14, 16, 18], "is_superus": [11, 13, 16, 18], "base_class": [11, 19], "add_us": [11, 14], "get_pars": [11, 14], "list_us": [11, 14], "session": [11, 13, 15, 17, 19], "alert_auth": [11, 15], "check_auth": [11, 15], "get_basic_head": [11, 15], "not_authent": [11, 15], "helper": [11, 19], "get_int_arg": [11, 15], "get_pag": [11, 15], "has_boolean_arg": [11, 15], "read_json": [11, 15], "launch": [11, 15], "owner_id": [11, 16, 18], "hashed_password": [11, 12, 16, 18], "user_nam": [11, 13, 16, 18], "router": [11, 19], "depend": [11, 15, 19], "get_current_active_superus": [11, 17], "get_current_active_us": [11, 17], "get_current_us": [11, 17], "get_db": [11, 15, 17], "schema": [11, 19], "jobbas": [11, 18], "jobcreat": [11, 18], "jobindb": [11, 18], "jobindbbas": [11, 18], "jobupd": [11, 18], "access_token": [11, 18], "token_typ": [11, 18], "tokenpayload": [11, 18], "sub": [11, 18], "userbas": [11, 18], "usercr": [11, 13, 18], "userindb": [11, 18], "userindbbas": [11, 18], "userupd": [11, 13, 18], "_case_sensit": 12, "_env_prefix": 12, "_env_fil": 12, "dotenvtyp": 12, "posixpath": 12, "_env_file_encod": 12, "_env_nested_delimit": 12, "_secrets_dir": 12, "sqlite": 12, "hb5sytek9wra0ct9akgaobnkkpy5spd": 12, "baseset": 12, "classvar": [12, 18], "settingsconfigdict": 12, "arbitrary_types_allow": 12, "case_sensit": 12, "env_fil": 12, "env_file_encod": 12, "env_nested_delimit": 12, "env_prefix": 12, "forbid": 12, "protected_namespac": 12, "model_": 12, "settings_": 12, "secrets_dir": 12, "validate_default": 12, "dictionari": [12, 18], "conform": [12, 18], "configdict": [12, 18], "fieldinfo": [12, 18], "union": [12, 18], "nonetyp": [12, 18], "field": [12, 18], "map": [12, 18], "replac": [12, 18], "__fields__": [12, 18], "32": 12, "encrypt": 12, "boolean": 12, "pars": [12, 15], "around": 12, "flag": 12, "ui": 12, "logger_nam": 12, "analysi": 12, "subject": 12, "expires_delta": 12, "timedelta": 12, "jwt": [12, 17], "aren": 12, "salt": 12, "plain_password": 12, "verifi": 12, "modeltyp": 13, "createschematyp": 13, "updateschematyp": 13, "obj_in": 13, "skip": 13, "100": 13, "db_obj": 13, "wrap": 13, "determin": [13, 15], "courtesi": 13, "One": 14, "These": 14, "associ": 14, "That": 14, "seem": 14, "primarili": 14, "httpbasiccredenti": 15, "httpbasic": 15, "base64": 15, "async": 15, "incorrect": 15, "fallback": 15, "filenam": 15, "current_us": 17, "oauth2passwordbear": 17, "fail": 17, "close": 17, "orm_mod": 18, "basemodel": 18, "packag": 19, "subpackag": 19, "submodul": 19, "Then": 20, "those": 20, "adventur": 20, "fact": 20, "navig": 20, "explor": 20, "build": 20, "heart": 20, "pokemon": 20, "ascii": 20, "art": 20, "yai": 20, "serious": 20, "real": 20, "scienc": 20, "dinosaur": [20, 22], "alloc": 21, "arguabl": 22, "unnecessari": 22, "demonstr": 22, "possibl": 22, "older": 22, "depth": 22, "desir": 22, "inspect": 22, "16798": 22, "shell": 22, "easiest": 22, "quickli": 22, "ssh": 22, "corona194": 22, "ipython": 22, "again": 22, "whoami": 22, "8245884223488": 22, "34633": 22, "1678216131": 22, "163": 22, "1762564": 22, "234502": 22, "2362921": 22, "inact": 22, "4831816131": 22, "05824565887451172": 22, "dinosaur1": 22, "successfulli": 22, "cours": 22, "yourself": 22, "1944496111616": 22, "1678217369": 22, "1978858": 22, "211171": 22, "2724185": 22, "2742176": 22, "4831817369": 22, "06124758720397949": 22, "sinc": 22, "proof": 22, "concept": 22}, "objects": {"": [[11, 0, 0, 1, "app", ""]], "app": [[12, 0, 0, 1, "core", ""], [13, 0, 0, 1, "crud", ""], [14, 0, 0, 1, "db", ""], [15, 0, 0, 1, "library", ""], [16, 0, 0, 1, "models", ""], [17, 0, 0, 1, "routers", ""], [18, 0, 0, 1, "schemas", ""]], "app.core": [[12, 0, 0, 1, "config", ""], [12, 0, 0, 1, "logging", ""], [12, 0, 0, 1, "security", ""]], "app.core.config": [[12, 1, 1, 0, "Settings", "Bases: BaseSettings"], [12, 3, 1, 0, "generate_secret_key", "Generate a secret key to encrypt, if one not provided."], [12, 3, 1, 0, "get_bool_envar", "Get a boolean from the environment, meaning the value is set."], [12, 3, 1, 0, "get_int_envar", "Get (and parse) an integer environment variable"], [12, 3, 1, 0, "get_option_flags", "Wrapper around parse_option_flags to get from environment."], [12, 3, 1, 0, "parse_option_flags", "Parse key value pairs (optionally with a prefix) from the environment."]], "app.core.config.Settings": [[12, 2, 1, 0, "access_token_expires_minutes", ""], [12, 2, 1, 0, "api_version", ""], [12, 2, 1, 0, "app_name", ""], [12, 2, 1, 0, "db_file", ""], [12, 2, 1, 0, "flux_nodes", ""], [12, 2, 1, 0, "flux_server_mode", ""], [12, 2, 1, 0, "flux_token", ""], [12, 2, 1, 0, "flux_user", ""], [12, 2, 1, 0, "has_gpus", ""], [12, 2, 1, 0, "known_launchers", ""], [12, 2, 1, 0, "model_config", "Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict]."], [12, 2, 1, 0, "model_fields", "Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo]."], [12, 2, 1, 0, "option_flags", ""], [12, 2, 1, 0, "require_auth", ""], [12, 2, 1, 0, "secret_key", ""]], "app.core.logging": [[12, 3, 1, 0, "init_loggers", ""]], "app.core.security": [[12, 3, 1, 0, "create_access_token", "Create a jwt access token."], [12, 3, 1, 0, "get_password_hash", "Note we aren't providing a salt here, so the same password can generate different."], [12, 3, 1, 0, "verify_password", "Verify the password"]], "app.crud": [[13, 0, 0, 1, "base", ""], [13, 0, 0, 1, "user", ""]], "app.crud.base": [[13, 1, 1, 0, "ModelBase", "Bases: Generic[ModelType, CreateSchemaType, UpdateSchemaType]"]], "app.crud.base.ModelBase": [[13, 4, 1, 0, "create", ""], [13, 4, 1, 0, "get", ""], [13, 4, 1, 0, "get_multi", ""], [13, 4, 1, 0, "remove", ""], [13, 4, 1, 0, "update", ""]], "app.crud.user": [[13, 1, 1, 0, "UserModel", "Bases: ModelBase[User, UserCreate, UserUpdate]"]], "app.crud.user.UserModel": [[13, 4, 1, 0, "authenticate", "Determine if a user exists by the user name and checking the password."], [13, 4, 1, 0, "create", "Create a new user object."], [13, 4, 1, 0, "get_by_username", "Get a user by username from the database."], [13, 4, 1, 0, "is_active", "Courtesy function to see if user is active."], [13, 4, 1, 0, "is_superuser", "Courtesy function to check if a user is a superuser."], [13, 4, 1, 0, "update", "Update a user."]], "app.db": [[14, 0, 0, 1, "base", ""], [14, 0, 0, 1, "base_class", ""], [14, 0, 0, 1, "init_db", ""], [14, 0, 0, 1, "session", ""]], "app.db.init_db": [[14, 3, 1, 0, "add_user", "One off function to add a user to the database"], [14, 3, 1, 0, "get_parser", ""], [14, 3, 1, 0, "init_db", "Create the Flux Restful Superuser (and testing account)"], [14, 3, 1, 0, "list_users", "List users in the database."], [14, 3, 1, 0, "main", ""]], "app.library": [[15, 0, 0, 1, "auth", ""], [15, 0, 0, 1, "env", ""], [15, 0, 0, 1, "helpers", ""], [15, 0, 0, 1, "launcher", ""]], "app.library.auth": [[15, 3, 1, 0, "alert_auth", ""], [15, 3, 1, 0, "check_auth", "Check base64 encoded auth (this is HTTP Basic auth.)"], [15, 3, 1, 0, "get_basic_header", ""], [15, 3, 1, 0, "not_authenticated", ""]], "app.library.helpers": [[15, 3, 1, 0, "get_int_arg", "Attempt to get (and parse) and integer argument. Fallback to None."], [15, 3, 1, 0, "get_page", "Get a .md file from the app root."], [15, 3, 1, 0, "has_boolean_arg", "A helper to determine if a payload has a key, and it's in some derivation of True"], [15, 3, 1, 0, "read_json", ""]], "app.library.launcher": [[15, 3, 1, 0, "launch", "Launch a job with a known launcher"]], "app.models": [[16, 0, 0, 1, "job", ""], [16, 0, 0, 1, "user", ""]], "app.models.job": [[16, 1, 1, 0, "Job", "Bases: Base"]], "app.models.job.Job": [[16, 2, 1, 0, "id", ""], [16, 2, 1, 0, "name", ""], [16, 2, 1, 0, "output", ""], [16, 2, 1, 0, "owner", ""], [16, 2, 1, 0, "owner_id", ""]], "app.models.user": [[16, 1, 1, 0, "User", "Bases: Base"]], "app.models.user.User": [[16, 2, 1, 0, "hashed_password", ""], [16, 2, 1, 0, "id", ""], [16, 2, 1, 0, "is_active", ""], [16, 2, 1, 0, "is_superuser", ""], [16, 2, 1, 0, "jobs", ""], [16, 2, 1, 0, "secret_key", ""], [16, 2, 1, 0, "user_name", ""]], "app.routers": [[17, 0, 0, 1, "depends", ""]], "app.routers.depends": [[17, 3, 1, 0, "get_current_active_superuser", "Get the currently active superuser."], [17, 3, 1, 0, "get_current_active_user", "Get the currently active user."], [17, 3, 1, 0, "get_current_user", "Get the current user (via the token from the jwt)"], [17, 3, 1, 0, "get_db", "Get the database in a context so we can then close it."]], "app.schemas": [[18, 0, 0, 1, "job", ""], [18, 0, 0, 1, "token", ""], [18, 0, 0, 1, "user", ""]], "app.schemas.job": [[18, 1, 1, 0, "Job", "Bases: JobInDBBase"], [18, 1, 1, 0, "JobBase", "Bases: BaseModel"], [18, 1, 1, 0, "JobCreate", "Bases: JobBase"], [18, 1, 1, 0, "JobInDB", "Bases: JobInDBBase"], [18, 1, 1, 0, "JobInDBBase", "Bases: JobBase"], [18, 1, 1, 0, "JobUpdate", "Bases: JobBase"]], "app.schemas.job.Job": [[18, 2, 1, 0, "model_config", "Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict]."], [18, 2, 1, 0, "model_fields", "Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo]."]], "app.schemas.job.JobBase": [[18, 2, 1, 0, "model_config", "Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict]."], [18, 2, 1, 0, "model_fields", "Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo]."], [18, 2, 1, 0, "name", ""], [18, 2, 1, 0, "output", ""]], "app.schemas.job.JobCreate": [[18, 2, 1, 0, "model_config", "Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict]."], [18, 2, 1, 0, "model_fields", "Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo]."]], "app.schemas.job.JobInDB": [[18, 2, 1, 0, "model_config", "Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict]."], [18, 2, 1, 0, "model_fields", "Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo]."]], "app.schemas.job.JobInDBBase": [[18, 1, 1, 0, "Config", "Bases: object"], [18, 2, 1, 0, "id", ""], [18, 2, 1, 0, "model_config", "Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict]."], [18, 2, 1, 0, "model_fields", "Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo]."], [18, 2, 1, 0, "name", ""], [18, 2, 1, 0, "owner_id", ""]], "app.schemas.job.JobInDBBase.Config": [[18, 2, 1, 0, "orm_mode", ""]], "app.schemas.job.JobUpdate": [[18, 2, 1, 0, "model_config", "Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict]."], [18, 2, 1, 0, "model_fields", "Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo]."]], "app.schemas.token": [[18, 1, 1, 0, "Token", "Bases: BaseModel"], [18, 1, 1, 0, "TokenPayload", "Bases: BaseModel"]], "app.schemas.token.Token": [[18, 2, 1, 0, "access_token", ""], [18, 2, 1, 0, "model_config", "Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict]."], [18, 2, 1, 0, "model_fields", "Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo]."], [18, 2, 1, 0, "token_type", ""]], "app.schemas.token.TokenPayload": [[18, 2, 1, 0, "model_config", "Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict]."], [18, 2, 1, 0, "model_fields", "Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo]."], [18, 2, 1, 0, "sub", ""]], "app.schemas.user": [[18, 1, 1, 0, "User", "Bases: UserInDBBase"], [18, 1, 1, 0, "UserBase", "Bases: BaseModel"], [18, 1, 1, 0, "UserCreate", "Bases: UserBase"], [18, 1, 1, 0, "UserInDB", "Bases: UserInDBBase"], [18, 1, 1, 0, "UserInDBBase", "Bases: UserBase"], [18, 1, 1, 0, "UserUpdate", "Bases: UserBase"]], "app.schemas.user.User": [[18, 2, 1, 0, "model_config", "Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict]."], [18, 2, 1, 0, "model_fields", "Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo]."]], "app.schemas.user.UserBase": [[18, 2, 1, 0, "is_active", ""], [18, 2, 1, 0, "is_superuser", ""], [18, 2, 1, 0, "model_config", "Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict]."], [18, 2, 1, 0, "model_fields", "Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo]."]], "app.schemas.user.UserCreate": [[18, 2, 1, 0, "model_config", "Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict]."], [18, 2, 1, 0, "model_fields", "Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo]."], [18, 2, 1, 0, "password", ""], [18, 2, 1, 0, "user_name", ""]], "app.schemas.user.UserInDB": [[18, 2, 1, 0, "hashed_password", ""], [18, 2, 1, 0, "model_config", "Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict]."], [18, 2, 1, 0, "model_fields", "Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo]."]], "app.schemas.user.UserInDBBase": [[18, 1, 1, 0, "Config", "Bases: object"], [18, 2, 1, 0, "id", ""], [18, 2, 1, 0, "model_config", "Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict]."], [18, 2, 1, 0, "model_fields", "Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo]."]], "app.schemas.user.UserInDBBase.Config": [[18, 2, 1, 0, "orm_mode", ""]], "app.schemas.user.UserUpdate": [[18, 2, 1, 0, "model_config", "Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict]."], [18, 2, 1, 0, "model_fields", "Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo]."], [18, 2, 1, 0, "password", ""]]}, "objtypes": {"0": "py:module", "1": "py:class", "2": "py:attribute", "3": "py:function", "4": "py:method"}, "objnames": {"0": ["py", "module", "Python module"], "1": ["py", "class", "Python class"], "2": ["py", "attribute", "Python attribute"], "3": ["py", "function", "Python function"], "4": ["py", "method", "Python method"]}, "titleterms": {"licens": 0, "note": 1, "introductori": 1, "exampl": [1, 2], "us": 1, "api": [1, 2, 5, 8, 9, 10, 17], "tutori": [2, 20, 21], "comput": 3, "time": 3, "contribut": 4, "pull": 4, "request": 4, "process": 4, "servic": [5, 6], "post": 5, "v1": 5, "stop": 5, "job": [5, 8, 9, 16, 18], "get": [5, 8, 10, 22], "payload": 5, "search": 5, "submit": [5, 8, 9], "uid": 5, "cancel": [5, 9], "output": 5, "node": [5, 9], "develop": 6, "guid": [6, 9], "devcontain": 6, "docker": 6, "local": [6, 22], "1": 6, "instal": [6, 9, 22], "2": 6, "start": [6, 10, 22], "3": 6, "authent": [6, 9], "interact": [6, 22], "environ": [6, 9], "flux": [6, 10, 15], "option": 6, "flag": 6, "code": 6, "lint": 6, "databas": [6, 22], "document": [6, 7], "depend": [6, 17], "build": 6, "preview": 6, "run": 6, "test": 6, "docstr": 6, "interfac": [8, 9], "home": 8, "jobid": 8, "doc": 8, "user": [9, 13, 16, 18], "how": 9, "doe": 9, "work": 9, "mode": 9, "web": 9, "basic": 9, "oauth2": 9, "style": 9, "what": 9, "thi": 9, "includ": 9, "python": [9, 22], "command": [9, 22], "line": [9, 22], "client": 9, "info": 9, "log": [9, 12], "list": 9, "shell": 9, "config": [9, 12], "within": 9, "go": 9, "rest": 10, "app": [11, 12, 13, 14, 15, 16, 17, 18, 19], "packag": [11, 12, 13, 14, 15, 16, 17, 18], "subpackag": 11, "submodul": [11, 12, 13, 14, 15, 16, 17, 18], "form": 11, "modul": [11, 12, 13, 14, 15, 16, 17, 18], "main": 11, "content": [11, 12, 13, 14, 15, 16, 17, 18], "core": 12, "secur": 12, "crud": 13, "base": [13, 14], "db": 14, "base_class": 14, "init_db": 14, "session": 14, "librari": 15, "auth": 15, "env": 15, "helper": 15, "launcher": 15, "model": 16, "router": 17, "view": 17, "schema": 18, "token": 18, "contain": 20, "extern": 21, "an": 22, "alloc": 22}, "envversion": {"sphinx.domains.c": 3, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 9, "sphinx.domains.index": 1, "sphinx.domains.javascript": 3, "sphinx.domains.math": 2, "sphinx.domains.python": 4, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx.ext.intersphinx": 1, "sphinx.ext.todo": 2, "sphinx.ext.viewcode": 1, "nbsphinx": 4, "sphinx": 58}, "alltitles": {"Contributing": [[4, "contributing"]], "Pull Request Process": [[4, "pull-request-process"]], "Computation times": [[3, "computation-times"]], "Tutorials": [[2, "tutorials"], [21, "tutorials"]], "API Examples": [[2, "api-examples"]], "License": [[0, "license"]], "Note": [[1, null]], "Introductory example - using the API": [[1, "introductory-example-using-the-api"]], "Documentation": [[7, "documentation"], [6, "documentation"]], "Interface": [[8, "interface"]], "Home": [[8, "home"]], "GET /": [[8, "get"]], "Jobs": [[8, "jobs"], [5, "jobs"]], "GET /jobs/submit": [[8, "get-jobs-submit"]], "GET /jobs": [[8, "get-jobs"]], "GET /jobs/": [[8, "get-jobs-jobid"]], "API": [[8, "api"], [5, "api"], [10, null]], "GET /docs": [[8, "get-docs"]], "Developer Guide": [[6, "developer-guide"]], "Devcontainer": [[6, "devcontainer"]], "Docker": [[6, "docker"]], "Local": [[6, "local"]], "1. Install": [[6, "install"]], "2. Start Service": [[6, "start-service"]], "3. Authentication": [[6, "authentication"]], "Interactions": [[6, "interactions"]], "Environment": [[6, "environment"], [9, "environment"]], "Flux Option Flags": [[6, "flux-option-flags"]], "Code Linting": [[6, "code-linting"]], "Database": [[6, "database"], [22, "database"]], "Install Dependencies and Build": [[6, "install-dependencies-and-build"]], "Preview Documentation": [[6, "preview-documentation"]], "Run Tests": [[6, "run-tests"]], "Docstrings": [[6, "docstrings"]], "User Guide": [[9, "user-guide"]], "How does it work?": [[9, "how-does-it-work"]], "Modes": [[9, "modes"]], "Authentication": [[9, "authentication"]], "Web Interface Basic Authentication": [[9, "web-interface-basic-authentication"]], "API OAuth2 Style Authentication": [[9, "api-oauth2-style-authentication"]], "What does this user-guide include?": [[9, "what-does-this-user-guide-include"]], "Python": [[9, "python"], [22, "python"]], "Installation": [[9, "installation"]], "Command Line Client": [[9, "command-line-client"]], "Submit": [[9, "submit"]], "Cancel": [[9, "cancel"]], "Job Info": [[9, "job-info"]], "Logs": [[9, "logs"]], "List Jobs": [[9, "list-jobs"]], "List Nodes": [[9, "list-nodes"]], "Shell": [[9, "shell"]], "Config": [[9, "config"]], "Within Python": [[9, "within-python"]], "Go": [[9, "go"]], "Service": [[5, "service"]], "POST /v1/service/stop": [[5, "post-v1-service-stop"]], "GET /v1/jobs": [[5, "get-v1-jobs"]], "Payload": [[5, "payload"], [5, "id1"]], "GET \u2018/v1/jobs/search\u2019": [[5, "get-v1-jobs-search"]], "POST /v1/jobs/submit": [[5, "post-v1-jobs-submit"]], "GET /v1/jobs/{uid}": [[5, "get-v1-jobs-uid"]], "POST /v1/jobs/{uid}/cancel": [[5, "post-v1-jobs-uid-cancel"]], "GET /v1/jobs/{uid}/output": [[5, "get-v1-jobs-uid-output"]], "Nodes": [[5, "nodes"]], "GET /v1/nodes": [[5, "get-v1-nodes"]], "Local Install": [[22, "local-install"]], "Get an Allocation.": [[22, "get-an-allocation"]], "Start": [[22, "start"]], "Interact": [[22, "interact"]], "Command Line": [[22, "command-line"]], "Container Tutorial": [[20, "container-tutorial"]], "External Tutorials": [[21, "external-tutorials"]], "app.core package": [[12, "app-core-package"]], "Submodules": [[12, "submodules"], [14, "submodules"], [13, "submodules"], [11, "submodules"], [15, "submodules"], [18, "submodules"], [17, "submodules"], [16, "submodules"]], "app.core.config module": [[12, "module-app.core.config"]], "app.core.logging module": [[12, "module-app.core.logging"]], "app.core.security module": [[12, "module-app.core.security"]], "Module contents": [[12, "module-app.core"], [14, "module-app.db"], [13, "module-app.crud"], [11, "module-app"], [15, "module-app.library"], [18, "module-app.schemas"], [17, "module-app.routers"], [16, "module-app.models"]], "Flux RESTFul API": [[10, "flux-restful-api"]], "Getting Started": [[10, null]], "app.db package": [[14, "app-db-package"]], "app.db.base module": [[14, "module-app.db.base"]], "app.db.base_class module": [[14, "module-app.db.base_class"]], "app.db.init_db module": [[14, "module-app.db.init_db"]], "app.db.session module": [[14, "module-app.db.session"]], "app.crud package": [[13, "app-crud-package"]], "app.crud.base module": [[13, "module-app.crud.base"]], "app.crud.user module": [[13, "module-app.crud.user"]], "app package": [[11, "app-package"]], "Subpackages": [[11, "subpackages"]], "app.forms module": [[11, "app-forms-module"]], "app.main module": [[11, "app-main-module"]], "app.library package": [[15, "app-library-package"]], "app.library.auth module": [[15, "module-app.library.auth"]], "app.library.env module": [[15, "module-app.library.env"]], "app.library.flux module": [[15, "app-library-flux-module"]], "app.library.helpers module": [[15, "module-app.library.helpers"]], "app.library.launcher module": [[15, "module-app.library.launcher"]], "app.schemas package": [[18, "app-schemas-package"]], "app.schemas.job module": [[18, "module-app.schemas.job"]], "app.schemas.token module": [[18, "module-app.schemas.token"]], "app.schemas.user module": [[18, "module-app.schemas.user"]], "app": [[19, "app"]], "app.routers package": [[17, "app-routers-package"]], "app.routers.api module": [[17, "app-routers-api-module"]], "app.routers.depends module": [[17, "module-app.routers.depends"]], "app.routers.views module": [[17, "app-routers-views-module"]], "app.models package": [[16, "app-models-package"]], "app.models.job module": [[16, "module-app.models.job"]], "app.models.user module": [[16, "module-app.models.user"]]}, "indexentries": {"app": [[11, "module-app"]], "module": [[11, "module-app"], [12, "module-app.core"], [12, "module-app.core.config"], [12, "module-app.core.logging"], [12, "module-app.core.security"], [13, "module-app.crud"], [13, "module-app.crud.base"], [13, "module-app.crud.user"], [14, "module-app.db"], [14, "module-app.db.base"], [14, "module-app.db.base_class"], [14, "module-app.db.init_db"], [14, "module-app.db.session"], [15, "module-app.library"], [15, "module-app.library.auth"], [15, "module-app.library.env"], [15, "module-app.library.helpers"], [15, "module-app.library.launcher"], [16, "module-app.models"], [16, "module-app.models.job"], [16, "module-app.models.user"], [17, "module-app.routers"], [17, "module-app.routers.depends"], [18, "module-app.schemas"], [18, "module-app.schemas.job"], [18, "module-app.schemas.token"], [18, "module-app.schemas.user"]], "settings (class in app.core.config)": [[12, "app.core.config.Settings"]], "access_token_expires_minutes (app.core.config.settings attribute)": [[12, "app.core.config.Settings.access_token_expires_minutes"]], "api_version (app.core.config.settings attribute)": [[12, "app.core.config.Settings.api_version"]], "app.core": [[12, "module-app.core"]], "app.core.config": [[12, "module-app.core.config"]], "app.core.logging": [[12, "module-app.core.logging"]], "app.core.security": [[12, "module-app.core.security"]], "app_name (app.core.config.settings attribute)": [[12, "app.core.config.Settings.app_name"]], "create_access_token() (in module app.core.security)": [[12, "app.core.security.create_access_token"]], "db_file (app.core.config.settings attribute)": [[12, "app.core.config.Settings.db_file"]], "flux_nodes (app.core.config.settings attribute)": [[12, "app.core.config.Settings.flux_nodes"]], "flux_server_mode (app.core.config.settings attribute)": [[12, "app.core.config.Settings.flux_server_mode"]], "flux_token (app.core.config.settings attribute)": [[12, "app.core.config.Settings.flux_token"]], "flux_user (app.core.config.settings attribute)": [[12, "app.core.config.Settings.flux_user"]], "generate_secret_key() (in module app.core.config)": [[12, "app.core.config.generate_secret_key"]], "get_bool_envar() (in module app.core.config)": [[12, "app.core.config.get_bool_envar"]], "get_int_envar() (in module app.core.config)": [[12, "app.core.config.get_int_envar"]], "get_option_flags() (in module app.core.config)": [[12, "app.core.config.get_option_flags"]], "get_password_hash() (in module app.core.security)": [[12, "app.core.security.get_password_hash"]], "has_gpus (app.core.config.settings attribute)": [[12, "app.core.config.Settings.has_gpus"]], "init_loggers() (in module app.core.logging)": [[12, "app.core.logging.init_loggers"]], "known_launchers (app.core.config.settings attribute)": [[12, "app.core.config.Settings.known_launchers"]], "model_config (app.core.config.settings attribute)": [[12, "app.core.config.Settings.model_config"]], "model_fields (app.core.config.settings attribute)": [[12, "app.core.config.Settings.model_fields"]], "option_flags (app.core.config.settings attribute)": [[12, "app.core.config.Settings.option_flags"]], "parse_option_flags() (in module app.core.config)": [[12, "app.core.config.parse_option_flags"]], "require_auth (app.core.config.settings attribute)": [[12, "app.core.config.Settings.require_auth"]], "secret_key (app.core.config.settings attribute)": [[12, "app.core.config.Settings.secret_key"]], "verify_password() (in module app.core.security)": [[12, "app.core.security.verify_password"]], "modelbase (class in app.crud.base)": [[13, "app.crud.base.ModelBase"]], "usermodel (class in app.crud.user)": [[13, "app.crud.user.UserModel"]], "app.crud": [[13, "module-app.crud"]], "app.crud.base": [[13, "module-app.crud.base"]], "app.crud.user": [[13, "module-app.crud.user"]], "authenticate() (app.crud.user.usermodel method)": [[13, "app.crud.user.UserModel.authenticate"]], "create() (app.crud.base.modelbase method)": [[13, "app.crud.base.ModelBase.create"]], "create() (app.crud.user.usermodel method)": [[13, "app.crud.user.UserModel.create"]], "get() (app.crud.base.modelbase method)": [[13, "app.crud.base.ModelBase.get"]], "get_by_username() (app.crud.user.usermodel method)": [[13, "app.crud.user.UserModel.get_by_username"]], "get_multi() (app.crud.base.modelbase method)": [[13, "app.crud.base.ModelBase.get_multi"]], "is_active() (app.crud.user.usermodel method)": [[13, "app.crud.user.UserModel.is_active"]], "is_superuser() (app.crud.user.usermodel method)": [[13, "app.crud.user.UserModel.is_superuser"]], "remove() (app.crud.base.modelbase method)": [[13, "app.crud.base.ModelBase.remove"]], "update() (app.crud.base.modelbase method)": [[13, "app.crud.base.ModelBase.update"]], "update() (app.crud.user.usermodel method)": [[13, "app.crud.user.UserModel.update"]], "add_user() (in module app.db.init_db)": [[14, "app.db.init_db.add_user"]], "app.db": [[14, "module-app.db"]], "app.db.base": [[14, "module-app.db.base"]], "app.db.base_class": [[14, "module-app.db.base_class"]], "app.db.init_db": [[14, "module-app.db.init_db"]], "app.db.session": [[14, "module-app.db.session"]], "get_parser() (in module app.db.init_db)": [[14, "app.db.init_db.get_parser"]], "init_db() (in module app.db.init_db)": [[14, "app.db.init_db.init_db"]], "list_users() (in module app.db.init_db)": [[14, "app.db.init_db.list_users"]], "main() (in module app.db.init_db)": [[14, "app.db.init_db.main"]], "alert_auth() (in module app.library.auth)": [[15, "app.library.auth.alert_auth"]], "app.library": [[15, "module-app.library"]], "app.library.auth": [[15, "module-app.library.auth"]], "app.library.env": [[15, "module-app.library.env"]], "app.library.helpers": [[15, "module-app.library.helpers"]], "app.library.launcher": [[15, "module-app.library.launcher"]], "check_auth() (in module app.library.auth)": [[15, "app.library.auth.check_auth"]], "get_basic_header() (in module app.library.auth)": [[15, "app.library.auth.get_basic_header"]], "get_int_arg() (in module app.library.helpers)": [[15, "app.library.helpers.get_int_arg"]], "get_page() (in module app.library.helpers)": [[15, "app.library.helpers.get_page"]], "has_boolean_arg() (in module app.library.helpers)": [[15, "app.library.helpers.has_boolean_arg"]], "launch() (in module app.library.launcher)": [[15, "app.library.launcher.launch"]], "not_authenticated() (in module app.library.auth)": [[15, "app.library.auth.not_authenticated"]], "read_json() (in module app.library.helpers)": [[15, "app.library.helpers.read_json"]], "job (class in app.models.job)": [[16, "app.models.job.Job"]], "user (class in app.models.user)": [[16, "app.models.user.User"]], "app.models": [[16, "module-app.models"]], "app.models.job": [[16, "module-app.models.job"]], "app.models.user": [[16, "module-app.models.user"]], "hashed_password (app.models.user.user attribute)": [[16, "app.models.user.User.hashed_password"]], "id (app.models.job.job attribute)": [[16, "app.models.job.Job.id"]], "id (app.models.user.user attribute)": [[16, "app.models.user.User.id"]], "is_active (app.models.user.user attribute)": [[16, "app.models.user.User.is_active"]], "is_superuser (app.models.user.user attribute)": [[16, "app.models.user.User.is_superuser"]], "jobs (app.models.user.user attribute)": [[16, "app.models.user.User.jobs"]], "name (app.models.job.job attribute)": [[16, "app.models.job.Job.name"]], "output (app.models.job.job attribute)": [[16, "app.models.job.Job.output"]], "owner (app.models.job.job attribute)": [[16, "app.models.job.Job.owner"]], "owner_id (app.models.job.job attribute)": [[16, "app.models.job.Job.owner_id"]], "secret_key (app.models.user.user attribute)": [[16, "app.models.user.User.secret_key"]], "user_name (app.models.user.user attribute)": [[16, "app.models.user.User.user_name"]], "app.routers": [[17, "module-app.routers"]], "app.routers.depends": [[17, "module-app.routers.depends"]], "get_current_active_superuser() (in module app.routers.depends)": [[17, "app.routers.depends.get_current_active_superuser"]], "get_current_active_user() (in module app.routers.depends)": [[17, "app.routers.depends.get_current_active_user"]], "get_current_user() (in module app.routers.depends)": [[17, "app.routers.depends.get_current_user"]], "get_db() (in module app.routers.depends)": [[17, "app.routers.depends.get_db"]], "job (class in app.schemas.job)": [[18, "app.schemas.job.Job"]], "jobbase (class in app.schemas.job)": [[18, "app.schemas.job.JobBase"]], "jobcreate (class in app.schemas.job)": [[18, "app.schemas.job.JobCreate"]], "jobindb (class in app.schemas.job)": [[18, "app.schemas.job.JobInDB"]], "jobindbbase (class in app.schemas.job)": [[18, "app.schemas.job.JobInDBBase"]], "jobindbbase.config (class in app.schemas.job)": [[18, "app.schemas.job.JobInDBBase.Config"]], "jobupdate (class in app.schemas.job)": [[18, "app.schemas.job.JobUpdate"]], "token (class in app.schemas.token)": [[18, "app.schemas.token.Token"]], "tokenpayload (class in app.schemas.token)": [[18, "app.schemas.token.TokenPayload"]], "user (class in app.schemas.user)": [[18, "app.schemas.user.User"]], "userbase (class in app.schemas.user)": [[18, "app.schemas.user.UserBase"]], "usercreate (class in app.schemas.user)": [[18, "app.schemas.user.UserCreate"]], "userindb (class in app.schemas.user)": [[18, "app.schemas.user.UserInDB"]], "userindbbase (class in app.schemas.user)": [[18, "app.schemas.user.UserInDBBase"]], "userindbbase.config (class in app.schemas.user)": [[18, "app.schemas.user.UserInDBBase.Config"]], "userupdate (class in app.schemas.user)": [[18, "app.schemas.user.UserUpdate"]], "access_token (app.schemas.token.token attribute)": [[18, "app.schemas.token.Token.access_token"]], "app.schemas": [[18, "module-app.schemas"]], "app.schemas.job": [[18, "module-app.schemas.job"]], "app.schemas.token": [[18, "module-app.schemas.token"]], "app.schemas.user": [[18, "module-app.schemas.user"]], "hashed_password (app.schemas.user.userindb attribute)": [[18, "app.schemas.user.UserInDB.hashed_password"]], "id (app.schemas.job.jobindbbase attribute)": [[18, "app.schemas.job.JobInDBBase.id"]], "id (app.schemas.user.userindbbase attribute)": [[18, "app.schemas.user.UserInDBBase.id"]], "is_active (app.schemas.user.userbase attribute)": [[18, "app.schemas.user.UserBase.is_active"]], "is_superuser (app.schemas.user.userbase attribute)": [[18, "app.schemas.user.UserBase.is_superuser"]], "model_config (app.schemas.job.job attribute)": [[18, "app.schemas.job.Job.model_config"]], "model_config (app.schemas.job.jobbase attribute)": [[18, "app.schemas.job.JobBase.model_config"]], "model_config (app.schemas.job.jobcreate attribute)": [[18, "app.schemas.job.JobCreate.model_config"]], "model_config (app.schemas.job.jobindb attribute)": [[18, "app.schemas.job.JobInDB.model_config"]], "model_config (app.schemas.job.jobindbbase attribute)": [[18, "app.schemas.job.JobInDBBase.model_config"]], "model_config (app.schemas.job.jobupdate attribute)": [[18, "app.schemas.job.JobUpdate.model_config"]], "model_config (app.schemas.token.token attribute)": [[18, "app.schemas.token.Token.model_config"]], "model_config (app.schemas.token.tokenpayload attribute)": [[18, "app.schemas.token.TokenPayload.model_config"]], "model_config (app.schemas.user.user attribute)": [[18, "app.schemas.user.User.model_config"]], "model_config (app.schemas.user.userbase attribute)": [[18, "app.schemas.user.UserBase.model_config"]], "model_config (app.schemas.user.usercreate attribute)": [[18, "app.schemas.user.UserCreate.model_config"]], "model_config (app.schemas.user.userindb attribute)": [[18, "app.schemas.user.UserInDB.model_config"]], "model_config (app.schemas.user.userindbbase attribute)": [[18, "app.schemas.user.UserInDBBase.model_config"]], "model_config (app.schemas.user.userupdate attribute)": [[18, "app.schemas.user.UserUpdate.model_config"]], "model_fields (app.schemas.job.job attribute)": [[18, "app.schemas.job.Job.model_fields"]], "model_fields (app.schemas.job.jobbase attribute)": [[18, "app.schemas.job.JobBase.model_fields"]], "model_fields (app.schemas.job.jobcreate attribute)": [[18, "app.schemas.job.JobCreate.model_fields"]], "model_fields (app.schemas.job.jobindb attribute)": [[18, "app.schemas.job.JobInDB.model_fields"]], "model_fields (app.schemas.job.jobindbbase attribute)": [[18, "app.schemas.job.JobInDBBase.model_fields"]], "model_fields (app.schemas.job.jobupdate attribute)": [[18, "app.schemas.job.JobUpdate.model_fields"]], "model_fields (app.schemas.token.token attribute)": [[18, "app.schemas.token.Token.model_fields"]], "model_fields (app.schemas.token.tokenpayload attribute)": [[18, "app.schemas.token.TokenPayload.model_fields"]], "model_fields (app.schemas.user.user attribute)": [[18, "app.schemas.user.User.model_fields"]], "model_fields (app.schemas.user.userbase attribute)": [[18, "app.schemas.user.UserBase.model_fields"]], "model_fields (app.schemas.user.usercreate attribute)": [[18, "app.schemas.user.UserCreate.model_fields"]], "model_fields (app.schemas.user.userindb attribute)": [[18, "app.schemas.user.UserInDB.model_fields"]], "model_fields (app.schemas.user.userindbbase attribute)": [[18, "app.schemas.user.UserInDBBase.model_fields"]], "model_fields (app.schemas.user.userupdate attribute)": [[18, "app.schemas.user.UserUpdate.model_fields"]], "name (app.schemas.job.jobbase attribute)": [[18, "app.schemas.job.JobBase.name"]], "name (app.schemas.job.jobindbbase attribute)": [[18, "app.schemas.job.JobInDBBase.name"]], "orm_mode (app.schemas.job.jobindbbase.config attribute)": [[18, "app.schemas.job.JobInDBBase.Config.orm_mode"]], "orm_mode (app.schemas.user.userindbbase.config attribute)": [[18, "app.schemas.user.UserInDBBase.Config.orm_mode"]], "output (app.schemas.job.jobbase attribute)": [[18, "app.schemas.job.JobBase.output"]], "owner_id (app.schemas.job.jobindbbase attribute)": [[18, "app.schemas.job.JobInDBBase.owner_id"]], "password (app.schemas.user.usercreate attribute)": [[18, "app.schemas.user.UserCreate.password"]], "password (app.schemas.user.userupdate attribute)": [[18, "app.schemas.user.UserUpdate.password"]], "sub (app.schemas.token.tokenpayload attribute)": [[18, "app.schemas.token.TokenPayload.sub"]], "token_type (app.schemas.token.token attribute)": [[18, "app.schemas.token.Token.token_type"]], "user_name (app.schemas.user.usercreate attribute)": [[18, "app.schemas.user.UserCreate.user_name"]]}, "docurls": ["about/license.html", "auto_examples/api_tutorial.html", "auto_examples/index.html", "auto_examples/sg_execution_times.html", "contributing.html", "getting_started/api.html", "getting_started/developer-guide.html", "getting_started/index.html", "getting_started/interface.html", "getting_started/user-guide.html", "index.html", "source/app.html", "source/app.core.html", "source/app.crud.html", "source/app.db.html", "source/app.library.html", "source/app.models.html", "source/app.routers.html", "source/app.schemas.html", "source/modules.html", "tutorials/container.html", "tutorials/index.html", "tutorials/local.html"]}) \ No newline at end of file diff --git a/source/app.core.html b/source/app.core.html index fd402fb..c4059d4 100644 --- a/source/app.core.html +++ b/source/app.core.html @@ -33,7 +33,7 @@ - + @@ -620,6 +620,13 @@ Aflux_nodes + + +
  • + + Aflux_server_mode + +
  • @@ -945,7 +952,7 @@

    Submodulesapp.core.config module

    -class app.core.config.Settings(_case_sensitive: bool | None = None, _env_prefix: str | None = None, _env_file: DotenvType | None = PosixPath('.'), _env_file_encoding: str | None = None, _env_nested_delimiter: str | None = None, _secrets_dir: str | Path | None = None, *, app_name: str = 'Flux RESTFul API', api_version: str = 'v1', has_gpus: bool = False, flux_nodes: int = 1, require_auth: bool = False, db_file: str = 'sqlite:///./flux-restful.db', flux_user: str = 'fluxuser', flux_token: str | None = None, secret_key: str = '2iLR3uH8BrPREl3NBBaIFUoNFHJXgitk', access_token_expires_minutes: int = 600, option_flags: dict = {}, known_launchers: list = ['nextflow', 'snakemake'])[source]
    +class app.core.config.Settings(_case_sensitive: bool | None = None, _env_prefix: str | None = None, _env_file: DotenvType | None = PosixPath('.'), _env_file_encoding: str | None = None, _env_nested_delimiter: str | None = None, _secrets_dir: str | Path | None = None, *, app_name: str = 'Flux RESTFul API', api_version: str = 'v1', has_gpus: bool = False, flux_nodes: int = 1, require_auth: bool = False, db_file: str = 'sqlite:///./flux-restful.db', flux_user: str = 'fluxuser', flux_token: str | None = None, flux_server_mode: str | None = 'single-user', secret_key: str = 'hb5SYtEK9WrA0CT9AkGAObnkkpY5SpDs', access_token_expires_minutes: int = 600, option_flags: dict = {}, known_launchers: list = ['nextflow', 'snakemake'])[source]

    Bases: BaseSettings

    Basic settings and defaults for the Flux RESTFul API

    @@ -973,6 +980,11 @@

    app.cor flux_nodes : int

    +
    +
    +flux_server_mode : str | None
    +
    +
    flux_token : str | None
    @@ -1001,7 +1013,7 @@

    app.cor
    -model_fields : ClassVar[dict[str, FieldInfo]] = {'access_token_expires_minutes': FieldInfo(annotation=int, required=False, default=600), 'api_version': FieldInfo(annotation=str, required=False, default='v1'), 'app_name': FieldInfo(annotation=str, required=False, default='Flux RESTFul API'), 'db_file': FieldInfo(annotation=str, required=False, default='sqlite:///./flux-restful.db'), 'flux_nodes': FieldInfo(annotation=int, required=False, default=1), 'flux_token': FieldInfo(annotation=Union[str, NoneType], required=False), 'flux_user': FieldInfo(annotation=str, required=False, default='fluxuser'), 'has_gpus': FieldInfo(annotation=bool, required=False, default=False), 'known_launchers': FieldInfo(annotation=list, required=False, default=['nextflow', 'snakemake']), 'option_flags': FieldInfo(annotation=dict, required=False, default={}), 'require_auth': FieldInfo(annotation=bool, required=False, default=False), 'secret_key': FieldInfo(annotation=str, required=False, default='2iLR3uH8BrPREl3NBBaIFUoNFHJXgitk')}
    +model_fields : ClassVar[dict[str, FieldInfo]] = {'access_token_expires_minutes': FieldInfo(annotation=int, required=False, default=600), 'api_version': FieldInfo(annotation=str, required=False, default='v1'), 'app_name': FieldInfo(annotation=str, required=False, default='Flux RESTFul API'), 'db_file': FieldInfo(annotation=str, required=False, default='sqlite:///./flux-restful.db'), 'flux_nodes': FieldInfo(annotation=int, required=False, default=1), 'flux_server_mode': FieldInfo(annotation=Union[str, NoneType], required=False, default='single-user'), 'flux_token': FieldInfo(annotation=Union[str, NoneType], required=False), 'flux_user': FieldInfo(annotation=str, required=False, default='fluxuser'), 'has_gpus': FieldInfo(annotation=bool, required=False, default=False), 'known_launchers': FieldInfo(annotation=list, required=False, default=['nextflow', 'snakemake']), 'option_flags': FieldInfo(annotation=dict, required=False, default={}), 'require_auth': FieldInfo(annotation=bool, required=False, default=False), 'secret_key': FieldInfo(annotation=str, required=False, default='hb5SYtEK9WrA0CT9AkGAObnkkpY5SpDs')}

    Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo].

    This replaces Model.__fields__ from Pydantic V1.

    @@ -1091,7 +1103,7 @@

    Module contents Last update: - Oct 23, 2023 + Jan 27, 2024

  • @@ -1203,7 +1215,7 @@

    Module contents{"base": "..", "features": ["navigation.expand", "navigation.tabs", "toc.integrate", "navigation.sections", "navigation.instant", "header.autohide", "navigation.top", "navigation.tracking", "search.highlight", "search.share", "toc.follow", "toc.sticky", "content.tabs.link", "announce.dismiss"], "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.config.lang": "en", "search.config.pipeline": "trimmer, stopWordFilter", "search.config.separator": "[\\s\\-]+", "search.placeholder": "Search", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version.title": "Select version"}} - + diff --git a/source/app.crud.html b/source/app.crud.html index 4942afb..9519575 100644 --- a/source/app.crud.html +++ b/source/app.crud.html @@ -33,7 +33,7 @@ - + @@ -942,7 +942,7 @@

    Module contents Last update: - Oct 23, 2023 + Jan 27, 2024

    @@ -1054,7 +1054,7 @@

    Module contents{"base": "..", "features": ["navigation.expand", "navigation.tabs", "toc.integrate", "navigation.sections", "navigation.instant", "header.autohide", "navigation.top", "navigation.tracking", "search.highlight", "search.share", "toc.follow", "toc.sticky", "content.tabs.link", "announce.dismiss"], "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.config.lang": "en", "search.config.pipeline": "trimmer, stopWordFilter", "search.config.separator": "[\\s\\-]+", "search.placeholder": "Search", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version.title": "Select version"}} - + diff --git a/source/app.db.html b/source/app.db.html index 8295d87..b0aee89 100644 --- a/source/app.db.html +++ b/source/app.db.html @@ -33,7 +33,7 @@ - + @@ -841,7 +841,7 @@

    Module contents Last update: - Oct 23, 2023 + Jan 27, 2024

    @@ -953,7 +953,7 @@

    Module contents{"base": "..", "features": ["navigation.expand", "navigation.tabs", "toc.integrate", "navigation.sections", "navigation.instant", "header.autohide", "navigation.top", "navigation.tracking", "search.highlight", "search.share", "toc.follow", "toc.sticky", "content.tabs.link", "announce.dismiss"], "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.config.lang": "en", "search.config.pipeline": "trimmer, stopWordFilter", "search.config.separator": "[\\s\\-]+", "search.placeholder": "Search", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version.title": "Select version"}} - + diff --git a/source/app.html b/source/app.html index d9350b7..52bbd9a 100644 --- a/source/app.html +++ b/source/app.html @@ -33,7 +33,7 @@ - + @@ -646,6 +646,7 @@

    Subpackagesapp_name
  • db_file
  • flux_nodes
  • +
  • flux_server_mode
  • flux_token
  • flux_user
  • has_gpus
  • @@ -903,7 +904,7 @@

    Module contentsModule contents{"base": "..", "features": ["navigation.expand", "navigation.tabs", "toc.integrate", "navigation.sections", "navigation.instant", "header.autohide", "navigation.top", "navigation.tracking", "search.highlight", "search.share", "toc.follow", "toc.sticky", "content.tabs.link", "announce.dismiss"], "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.config.lang": "en", "search.config.pipeline": "trimmer, stopWordFilter", "search.config.separator": "[\\s\\-]+", "search.placeholder": "Search", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version.title": "Select version"}} - + diff --git a/source/app.library.html b/source/app.library.html index 8757bae..8356d58 100644 --- a/source/app.library.html +++ b/source/app.library.html @@ -33,7 +33,7 @@ - + @@ -908,7 +908,7 @@

    Module contents Last update: - Oct 23, 2023 + Jan 27, 2024

    @@ -1020,7 +1020,7 @@

    Module contents{"base": "..", "features": ["navigation.expand", "navigation.tabs", "toc.integrate", "navigation.sections", "navigation.instant", "header.autohide", "navigation.top", "navigation.tracking", "search.highlight", "search.share", "toc.follow", "toc.sticky", "content.tabs.link", "announce.dismiss"], "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.config.lang": "en", "search.config.pipeline": "trimmer, stopWordFilter", "search.config.separator": "[\\s\\-]+", "search.placeholder": "Search", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version.title": "Select version"}} - + diff --git a/source/app.models.html b/source/app.models.html index fd2cc63..b8e40c5 100644 --- a/source/app.models.html +++ b/source/app.models.html @@ -33,7 +33,7 @@ - + @@ -947,7 +947,7 @@

    Module contents Last update: - Oct 23, 2023 + Jan 27, 2024

    @@ -1059,7 +1059,7 @@

    Module contents{"base": "..", "features": ["navigation.expand", "navigation.tabs", "toc.integrate", "navigation.sections", "navigation.instant", "header.autohide", "navigation.top", "navigation.tracking", "search.highlight", "search.share", "toc.follow", "toc.sticky", "content.tabs.link", "announce.dismiss"], "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.config.lang": "en", "search.config.pipeline": "trimmer, stopWordFilter", "search.config.separator": "[\\s\\-]+", "search.placeholder": "Search", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version.title": "Select version"}} - + diff --git a/source/app.routers.html b/source/app.routers.html index 85d3482..8808d8b 100644 --- a/source/app.routers.html +++ b/source/app.routers.html @@ -33,7 +33,7 @@ - + @@ -820,7 +820,7 @@

    Module contents Last update: - Oct 23, 2023 + Jan 27, 2024

    @@ -932,7 +932,7 @@

    Module contents{"base": "..", "features": ["navigation.expand", "navigation.tabs", "toc.integrate", "navigation.sections", "navigation.instant", "header.autohide", "navigation.top", "navigation.tracking", "search.highlight", "search.share", "toc.follow", "toc.sticky", "content.tabs.link", "announce.dismiss"], "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.config.lang": "en", "search.config.pipeline": "trimmer, stopWordFilter", "search.config.separator": "[\\s\\-]+", "search.placeholder": "Search", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version.title": "Select version"}} - + diff --git a/source/app.schemas.html b/source/app.schemas.html index 63bc704..6e6dfe7 100644 --- a/source/app.schemas.html +++ b/source/app.schemas.html @@ -33,7 +33,7 @@ - + @@ -1679,7 +1679,7 @@

    Module contents Last update: - Oct 23, 2023 + Jan 27, 2024

    @@ -1776,7 +1776,7 @@

    Module contents{"base": "..", "features": ["navigation.expand", "navigation.tabs", "toc.integrate", "navigation.sections", "navigation.instant", "header.autohide", "navigation.top", "navigation.tracking", "search.highlight", "search.share", "toc.follow", "toc.sticky", "content.tabs.link", "announce.dismiss"], "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.config.lang": "en", "search.config.pipeline": "trimmer, stopWordFilter", "search.config.separator": "[\\s\\-]+", "search.placeholder": "Search", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version.title": "Select version"}} - + diff --git a/source/modules.html b/source/modules.html index 7de7c62..d897903 100644 --- a/source/modules.html +++ b/source/modules.html @@ -33,7 +33,7 @@ - + @@ -587,7 +587,7 @@

    appapp{"base": "..", "features": ["navigation.expand", "navigation.tabs", "toc.integrate", "navigation.sections", "navigation.instant", "header.autohide", "navigation.top", "navigation.tracking", "search.highlight", "search.share", "toc.follow", "toc.sticky", "content.tabs.link", "announce.dismiss"], "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.config.lang": "en", "search.config.pipeline": "trimmer, stopWordFilter", "search.config.separator": "[\\s\\-]+", "search.placeholder": "Search", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version.title": "Select version"}} - + diff --git a/tutorials/container.html b/tutorials/container.html index 4a34917..2a66973 100644 --- a/tutorials/container.html +++ b/tutorials/container.html @@ -33,7 +33,7 @@ - + @@ -627,7 +627,7 @@

    Container TutorialContainer Tutorial{"base": "..", "features": ["navigation.expand", "navigation.tabs", "toc.integrate", "navigation.sections", "navigation.instant", "header.autohide", "navigation.top", "navigation.tracking", "search.highlight", "search.share", "toc.follow", "toc.sticky", "content.tabs.link", "announce.dismiss"], "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.config.lang": "en", "search.config.pipeline": "trimmer, stopWordFilter", "search.config.separator": "[\\s\\-]+", "search.placeholder": "Search", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version.title": "Select version"}} - + diff --git a/tutorials/index.html b/tutorials/index.html index 1272544..3dc783b 100644 --- a/tutorials/index.html +++ b/tutorials/index.html @@ -33,7 +33,7 @@ - + @@ -574,7 +574,7 @@

    External TutorialsExternal Tutorials{"base": "..", "features": ["navigation.expand", "navigation.tabs", "toc.integrate", "navigation.sections", "navigation.instant", "header.autohide", "navigation.top", "navigation.tracking", "search.highlight", "search.share", "toc.follow", "toc.sticky", "content.tabs.link", "announce.dismiss"], "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.config.lang": "en", "search.config.pipeline": "trimmer, stopWordFilter", "search.config.separator": "[\\s\\-]+", "search.placeholder": "Search", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version.title": "Select version"}} - + diff --git a/tutorials/local.html b/tutorials/local.html index 5ce02ff..b6611ad 100644 --- a/tutorials/local.html +++ b/tutorials/local.html @@ -33,7 +33,7 @@ - + @@ -868,7 +868,7 @@

    Command Line Last update: - Oct 23, 2023 + Jan 27, 2024

    @@ -980,7 +980,7 @@

    Command Line{"base": "..", "features": ["navigation.expand", "navigation.tabs", "toc.integrate", "navigation.sections", "navigation.instant", "header.autohide", "navigation.top", "navigation.tracking", "search.highlight", "search.share", "toc.follow", "toc.sticky", "content.tabs.link", "announce.dismiss"], "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.config.lang": "en", "search.config.pipeline": "trimmer, stopWordFilter", "search.config.separator": "[\\s\\-]+", "search.placeholder": "Search", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version.title": "Select version"}} - +