From 9dc8ba7c1fc1cb039e1c0c3f20c9811049e6b729 Mon Sep 17 00:00:00 2001 From: timkpaine Date: Sun, 21 Jul 2024 21:53:34 +0000 Subject: [PATCH] deploy: b81397dcac76c12f103306bc3bb33491bc0b8799 --- .buildinfo | 4 + .doctrees/.github/CODE_OF_CONDUCT.doctree | Bin 0 -> 15413 bytes .../.github/ISSUE_TEMPLATE/bug_report.doctree | Bin 0 -> 8062 bytes .../ISSUE_TEMPLATE/feature_request.doctree | Bin 0 -> 4770 bytes .doctrees/README.doctree | Bin 0 -> 8426 bytes .doctrees/autoapi/index.doctree | Bin 0 -> 4140 bytes .doctrees/autoapi/test_all/index.doctree | Bin 0 -> 7879 bytes .doctrees/autoapi/yardang/build/index.doctree | Bin 0 -> 25372 bytes .doctrees/autoapi/yardang/cli/index.doctree | Bin 0 -> 12124 bytes .doctrees/autoapi/yardang/index.doctree | Bin 0 -> 7061 bytes .doctrees/autoapi/yardang/utils/index.doctree | Bin 0 -> 7255 bytes .doctrees/docs/src/configuration.doctree | Bin 0 -> 16511 bytes .doctrees/docs/src/home.doctree | Bin 0 -> 25913 bytes .doctrees/docs/src/installation.doctree | Bin 0 -> 5287 bytes .doctrees/docs/src/overview.doctree | Bin 0 -> 11127 bytes .doctrees/environment.pickle | Bin 0 -> 279202 bytes .doctrees/index.doctree | Bin 0 -> 26344 bytes .nojekyll | 0 CNAME | 1 + README.html | 340 +++++++ _modules/index.html | 299 ++++++ _modules/test_all.html | 312 ++++++ _modules/yardang.html | 298 ++++++ _modules/yardang/build.html | 436 +++++++++ _modules/yardang/cli.html | 355 +++++++ _modules/yardang/utils.html | 321 ++++++ _sources/.github/CODE_OF_CONDUCT.md.txt | 76 ++ .../.github/ISSUE_TEMPLATE/bug_report.md.txt | 38 + .../ISSUE_TEMPLATE/feature_request.md.txt | 20 + _sources/README.md.txt | 25 + _sources/autoapi/index.rst.txt | 12 + _sources/autoapi/test_all/index.rst.txt | 22 + _sources/autoapi/yardang/build/index.rst.txt | 57 ++ _sources/autoapi/yardang/cli/index.rst.txt | 25 + _sources/autoapi/yardang/index.rst.txt | 32 + _sources/autoapi/yardang/utils/index.rst.txt | 19 + _sources/docs/src/configuration.md.txt | 118 +++ _sources/docs/src/home.md.txt | 53 + _sources/docs/src/installation.md.txt | 27 + _sources/docs/src/overview.md.txt | 55 ++ _sources/index.md.txt | 70 ++ _sphinx_design_static/design-tabs.js | 101 ++ _sphinx_design_static/sphinx-design.min.css | 1 + _static/autodoc_pydantic.css | 11 + _static/basic.css | 925 ++++++++++++++++++ _static/check-solid.svg | 4 + _static/clipboard.min.js | 7 + _static/copy-button.svg | 5 + _static/copybutton.css | 94 ++ _static/copybutton.js | 248 +++++ _static/copybutton_funcs.js | 73 ++ _static/debug.css | 69 ++ _static/design-tabs.js | 101 ++ _static/doctools.js | 156 +++ _static/documentation_options.js | 13 + _static/file.png | Bin 0 -> 286 bytes _static/graphviz.css | 19 + _static/language_data.js | 199 ++++ _static/minus.png | Bin 0 -> 90 bytes _static/plus.png | Bin 0 -> 90 bytes _static/pygments.css | 249 +++++ _static/scripts/furo-extensions.js | 0 _static/scripts/furo.js | 3 + _static/scripts/furo.js.LICENSE.txt | 7 + _static/scripts/furo.js.map | 1 + _static/searchtools.js | 574 +++++++++++ _static/skeleton.css | 296 ++++++ _static/sphinx-design.min.css | 1 + _static/sphinx_highlight.js | 154 +++ _static/styles/custom.css | 13 + _static/styles/furo-extensions.css | 2 + _static/styles/furo-extensions.css.map | 1 + _static/styles/furo.css | 2 + _static/styles/furo.css.map | 1 + autoapi/index.html | 339 +++++++ autoapi/test_all/index.html | 365 +++++++ autoapi/yardang/build/index.html | 399 ++++++++ autoapi/yardang/cli/index.html | 382 ++++++++ autoapi/yardang/index.html | 375 +++++++ autoapi/yardang/utils/index.html | 364 +++++++ docs/src/configuration.html | 460 +++++++++ docs/src/home.html | 352 +++++++ docs/src/installation.html | 365 +++++++ docs/src/overview.html | 396 ++++++++ genindex.html | 435 ++++++++ index.html | 362 +++++++ objects.inv | Bin 0 -> 673 bytes py-modindex.html | 342 +++++++ search.html | 308 ++++++ searchindex.js | 1 + 90 files changed, 11590 insertions(+) create mode 100644 .buildinfo create mode 100644 .doctrees/.github/CODE_OF_CONDUCT.doctree create mode 100644 .doctrees/.github/ISSUE_TEMPLATE/bug_report.doctree create mode 100644 .doctrees/.github/ISSUE_TEMPLATE/feature_request.doctree create mode 100644 .doctrees/README.doctree create mode 100644 .doctrees/autoapi/index.doctree create mode 100644 .doctrees/autoapi/test_all/index.doctree create mode 100644 .doctrees/autoapi/yardang/build/index.doctree create mode 100644 .doctrees/autoapi/yardang/cli/index.doctree create mode 100644 .doctrees/autoapi/yardang/index.doctree create mode 100644 .doctrees/autoapi/yardang/utils/index.doctree create mode 100644 .doctrees/docs/src/configuration.doctree create mode 100644 .doctrees/docs/src/home.doctree create mode 100644 .doctrees/docs/src/installation.doctree create mode 100644 .doctrees/docs/src/overview.doctree create mode 100644 .doctrees/environment.pickle create mode 100644 .doctrees/index.doctree create mode 100644 .nojekyll create mode 100644 CNAME create mode 100644 README.html create mode 100644 _modules/index.html create mode 100644 _modules/test_all.html create mode 100644 _modules/yardang.html create mode 100644 _modules/yardang/build.html create mode 100644 _modules/yardang/cli.html create mode 100644 _modules/yardang/utils.html create mode 100644 _sources/.github/CODE_OF_CONDUCT.md.txt create mode 100644 _sources/.github/ISSUE_TEMPLATE/bug_report.md.txt create mode 100644 _sources/.github/ISSUE_TEMPLATE/feature_request.md.txt create mode 100644 _sources/README.md.txt create mode 100644 _sources/autoapi/index.rst.txt create mode 100644 _sources/autoapi/test_all/index.rst.txt create mode 100644 _sources/autoapi/yardang/build/index.rst.txt create mode 100644 _sources/autoapi/yardang/cli/index.rst.txt create mode 100644 _sources/autoapi/yardang/index.rst.txt create mode 100644 _sources/autoapi/yardang/utils/index.rst.txt create mode 100644 _sources/docs/src/configuration.md.txt create mode 100644 _sources/docs/src/home.md.txt create mode 100644 _sources/docs/src/installation.md.txt create mode 100644 _sources/docs/src/overview.md.txt create mode 100644 _sources/index.md.txt create mode 100644 _sphinx_design_static/design-tabs.js create mode 100644 _sphinx_design_static/sphinx-design.min.css create mode 100644 _static/autodoc_pydantic.css create mode 100644 _static/basic.css create mode 100644 _static/check-solid.svg create mode 100644 _static/clipboard.min.js create mode 100644 _static/copy-button.svg create mode 100644 _static/copybutton.css create mode 100644 _static/copybutton.js create mode 100644 _static/copybutton_funcs.js create mode 100644 _static/debug.css create mode 100644 _static/design-tabs.js create mode 100644 _static/doctools.js create mode 100644 _static/documentation_options.js create mode 100644 _static/file.png create mode 100644 _static/graphviz.css create mode 100644 _static/language_data.js create mode 100644 _static/minus.png create mode 100644 _static/plus.png create mode 100644 _static/pygments.css create mode 100644 _static/scripts/furo-extensions.js create mode 100644 _static/scripts/furo.js create mode 100644 _static/scripts/furo.js.LICENSE.txt create mode 100644 _static/scripts/furo.js.map create mode 100644 _static/searchtools.js create mode 100644 _static/skeleton.css create mode 100644 _static/sphinx-design.min.css create mode 100644 _static/sphinx_highlight.js create mode 100644 _static/styles/custom.css create mode 100644 _static/styles/furo-extensions.css create mode 100644 _static/styles/furo-extensions.css.map create mode 100644 _static/styles/furo.css create mode 100644 _static/styles/furo.css.map create mode 100644 autoapi/index.html create mode 100644 autoapi/test_all/index.html create mode 100644 autoapi/yardang/build/index.html create mode 100644 autoapi/yardang/cli/index.html create mode 100644 autoapi/yardang/index.html create mode 100644 autoapi/yardang/utils/index.html create mode 100644 docs/src/configuration.html create mode 100644 docs/src/home.html create mode 100644 docs/src/installation.html create mode 100644 docs/src/overview.html create mode 100644 genindex.html create mode 100644 index.html create mode 100644 objects.inv create mode 100644 py-modindex.html create mode 100644 search.html create mode 100644 searchindex.js diff --git a/.buildinfo b/.buildinfo new file mode 100644 index 0000000..b9b06d1 --- /dev/null +++ b/.buildinfo @@ -0,0 +1,4 @@ +# Sphinx build info version 1 +# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. +config: 6fe4a4b755fe752ce674aa2d78aaa805 +tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/.doctrees/.github/CODE_OF_CONDUCT.doctree b/.doctrees/.github/CODE_OF_CONDUCT.doctree new file mode 100644 index 0000000000000000000000000000000000000000..66f042076c9445024c01470d19e005206dc5e2bb GIT binary patch literal 15413 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%0AgT539(&te^TpS%ZEFYkTq> zuK3eKI=P@z8ia$F=vafU0@#_84jAAGigOu6LA5eGAB5TGs;gU@^6YO`Q{!7b@y`#Mc*1xGOr6UsW4xDd4e4FtKH`Uehv_Dg`ZHAI zv>^SeyYh1BVdJNG*hq!t_gljc&~*3^AO5%f-Qh2h_8k74K3+wTGJKgn{)9gMm_GiK zKK_F~?o+RK)GUiMS~f}`B2cNu+w;G@r-s^7!|bUc_Eh&h)palTzeJ7Iychgke@#v5 zf2W+0uDFyl(pg+NBV}pTj6?E0bGh8yh>ERc+>R@~1Mppz5Z+epN)>FD5J;#}Y}~LH z2ld`og;!gJb?e2k5f`gjRi`Usi_@% literal 0 HcmV?d00001 diff --git a/.doctrees/.github/ISSUE_TEMPLATE/bug_report.doctree b/.doctrees/.github/ISSUE_TEMPLATE/bug_report.doctree new file mode 100644 index 0000000000000000000000000000000000000000..6f804a1f5c745f1f43f974a2614dcd208dff9367 GIT binary patch literal 8062 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 PX=iQ9#aY_YXm0C&52Qm# literal 0 HcmV?d00001 diff --git a/.doctrees/autoapi/yardang/build/index.doctree b/.doctrees/autoapi/yardang/build/index.doctree new file mode 100644 index 0000000000000000000000000000000000000000..84141466f3c9167ef8d7204eed6a663bf9cfc5f2 GIT binary patch literal 25372 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 W*$!J|?CVr&vPCSd2rZuRE&dPqb3Nez literal 0 HcmV?d00001 diff --git a/.doctrees/autoapi/yardang/cli/index.doctree b/.doctrees/autoapi/yardang/cli/index.doctree new file mode 100644 index 0000000000000000000000000000000000000000..c818303611e689ef41e00932716430a630ca41fd GIT binary patch literal 12124 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 H-SYnd#0|08 literal 0 HcmV?d00001 diff --git a/.doctrees/autoapi/yardang/index.doctree b/.doctrees/autoapi/yardang/index.doctree new file mode 100644 index 0000000000000000000000000000000000000000..7c49494408ffffa8964b79c6c1650442a76caa62 GIT binary patch literal 7061 zcmb_h>x(5v6`$9A&di;eeGJO%Bok!aS+a9y6BJ~!SqS-}Y@FyCMI@oqx4Z7GzSFn6 z?XKRL%Vt>(Y{*D~NLuh?2%ExpnH) zsZ*!U`JGee{-E~LA8pL2AGs0*-0_aOrfqw^&7wp$ZQqJV%oE9b$@L#550Y)!3eCgF zk3)+kat0h0cU(JUUh+mFJH##=H|nPA8xgaF<9qpXUgLG%cq7^7Em;$ea9L?eHpXUX zo8BNH7H}-Q#*S#~V&YMvwWtRs_7n+UlPx1xlF!R}s@uL?a2<~&`*F{dZBvNQ>BRzP zqBG1pc0~F%EZ2-85b?R@nIrwFX~#h^=$Y0*$oj++%Z4xqG?nlbzQLFH6+X{5P6zv+zkXP$2^k9=LulIhJ+q*ft{UST3g` zazfLKM?DrYJGnC>+bWAeBUe(>?i_|@5U?;Y z%ic!oU!A-!cnr%$$aYjXh?)6ng_?RU$s!%n_{s17EcbhnnPPdb<{11q+ z_xzXlZjmcS@n~d*~WO_usCEcF{)#zz_YoD<>%8JU3Zl?70a z>G}3}N>S)JANq$=bd{DUXii+xLeen@hz?#_C~xcq<2}DO+}ZrD3vIQXnbf!)SA7Vww>VwSwgOaIC@hxOT+8Du^Z^_R13N&KIH=}*}2&y}$FTV;G2Jn20* zhU?h#G50$A0Dpu+e>hLl$6!J*pDsx*5Mm^#f^f!PgZo!ikvf5=aJS|9-asSMRD${t ztAAcyJ>inAqmjE81twLm%^+kE3-2-IA|GIFmJQxlh+3#TQ9zcGTdAxx%Qst1Zj@Qh zNN%g&K#ge**w)LwCxAYAg*82qJKFHuOQ9HOxBw92*8Cb zBA+f{%htBzZRt?WiqGq(MC3#XT2d>mLTBUx9v{+dgNCa1>=DCjvYA0eR?QZK!p0ACi=AZSZMg_VcHl)yxLl^a6fCLn1Yi!o3Q@za z;Saog_<-bY49B^6bs?L$kQv!h8duaE-X~Ui6s=F5v(WV?xv-OUZIZ59(I#zio{m30 zL&p_uRnPNc#=ejqq<(V$OGE`F(ccn|1-O8+wPsLF_Jo6}W_He2+9sWXV z`vLwbD_&9>;>bo2dzOf&)SP`W-}=SU*1tbz>tK58-<7u>{t}}ssN^Z<`}oXFh964Gt`}x5%tnVVBSL{+)$B9rjqlUCle|%0ER~e^9Cm1-D}Xm<_R%msi~C{eM$aqM z%E@}wNZ*s$qZn^+Q75SY6JqMa7I7!1p(ojFJHepUd zL*TP=M-4-khWE#}7m583$tlETJ5)33wyxF|Y*U!k)24;jaA^*wZNMU`_8KnJP+>uN z?D;$T$$Kmto}Yc}WaJ%P9Usf3bTS*Sfg?R&lryb(en!jqND}QAF(Hsfl4Ck#m>LTQ zRat7Ydb@HJ*g-im-vfb|HbnBdt!yvMo$=H};w#){o8KzBODq?eccP{w&Fc_Th>gb0 z{D!= z8AZ3ZWHU7+x^-)L`>h`;SF=&Rf5&uVv>P(im32QBK`fGezJlU;z|gWX1%em@_zsJN zISMdX)EgSuMN5I zmBn(E&HyiqI85ZK8h6=6J2gh!z~Y46b7&*Uiy^c8&^FL>!Xp&hP!n-q))78^04FTs z*zi(d@lgU)>`?!}C`fV+7>#Nt9tB43d@!scIH+Jl&qP7LFIN;rxjtQgK?))k+rEKX z99*k-`S}qu$}5$ZSi-pHM2>dO6~lHS>RsR6EvrVqk zCv1X>pGp?o4N0?c<%?*Pmf*f^&vEaVf^~1q#A}|DM1CD^kQ_N|I| zq7>r4n29HdCzm~7Vb@`zul7Lb?{YD6u~`eRBSewvr!?gzd~#&u;h7≫UY!YBctQ zd1P>Bz+L>pe;4SDmB^(C{Uu?1KSo?fFw{jg)-wgSMr!IGB=8w@J#B>W7%Fgv zxBs!cY=P^*U}!S91}c7nSf%z_`XvOM)$MCQJC^gzyGLIR$fkx9#4lVC>CQoL2(-zl zqoBSRSc6hf=ZQuB12j~A5i~;zG(n^gNXX`_HY|PKD>%Q{2_m9 z_$qSW@D=*AMf6SliDirURhpzPEYyl){_t2aA1g-W&1Yyz$ywsJ(9)`>eUJ?6vp#;_ zq~*8rq?sj1eC-gS8cN=!H2gEtNtZAScn+)nEb5oH_-&;ie_Ls%QnV_!)C(q-%VqCU z$6ZDvM<+X&KvM`rGCpnBGKD-}QQ?iF9y+fRtd}apoVzu_*2;EOk}gchM?MGzC7{by zS?LVg=YTj1Up&B%(UL+_!i6W`&XHLgFQ@ePa2=15y9ifQg$R6Hdjtp78|FwiL0-(s Z%EuPd7CwA>K;JvHZ35#Iw{*eS{V&9aKxzO0 literal 0 HcmV?d00001 diff --git a/.doctrees/autoapi/yardang/utils/index.doctree b/.doctrees/autoapi/yardang/utils/index.doctree new file mode 100644 index 0000000000000000000000000000000000000000..752191e2a63bea6ad0a4ce42005431c064f3d625 GIT binary patch literal 7255 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 CFv8vd literal 0 HcmV?d00001 diff --git a/.doctrees/docs/src/overview.doctree b/.doctrees/docs/src/overview.doctree new file mode 100644 index 0000000000000000000000000000000000000000..145dba5216c444d235ec9c40e20f7e684ed23952 GIT binary patch literal 11127 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 literal 0 HcmV?d00001 diff --git a/.doctrees/environment.pickle b/.doctrees/environment.pickle new file mode 100644 index 0000000000000000000000000000000000000000..6e77c0c1a2f4196a629226c45e890115d685478a GIT binary patch literal 279202 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 z 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 literal 0 HcmV?d00001 diff --git a/.doctrees/index.doctree b/.doctrees/index.doctree new file mode 100644 index 0000000000000000000000000000000000000000..fb2f108a0d139b87b73d1124f3b64e4f02b100a1 GIT binary patch literal 26344 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 Sbaw-W(9Q@C<4a@Kfc^)=`YJ~N literal 0 HcmV?d00001 diff --git a/.nojekyll b/.nojekyll new file mode 100644 index 0000000..e69de29 diff --git a/CNAME b/CNAME new file mode 100644 index 0000000..50f155b --- /dev/null +++ b/CNAME @@ -0,0 +1 @@ +yardang.python-templates.dev \ No newline at end of file diff --git a/README.html b/README.html new file mode 100644 index 0000000..931b964 --- /dev/null +++ b/README.html @@ -0,0 +1,340 @@ + + + + + + + + + yardang - yardang v0.1.0 + + + + + + + + + + + + + + + + + + + + + Contents + + + + + + Menu + + + + + + + + Expand + + + + + + Light mode + + + + + + + + + + + + + + Dark mode + + + + + + + Auto light/dark, in light mode + + + + + + + + + + + + + + + Auto light/dark, in dark mode + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Skip to content + + + +
+
+
+ +
+ +
+
+ +
+ +
+
+ +
+
+
+ + + + + Back to top + +
+ +
+ +
+ +
+
+

yardang

+
+

yardang

+

Build Status +codecov +License +PyPI

+

yardang is a Python library for generating Sphinx documentation easily, with minimal local configuration overhead.

+

yardang makes building Sphinx easy.

+
+

Installation

+

You can install from PyPI via pip:

+
pip install yardang
+
+
+

Or from conda-forge via conda:

+
conda install yardang -c conda-forge
+
+
+
+
+ +
+
+ +
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/_modules/index.html b/_modules/index.html new file mode 100644 index 0000000..94c0892 --- /dev/null +++ b/_modules/index.html @@ -0,0 +1,299 @@ + + + + + + + + Overview: module code - yardang v0.1.0 + + + + + + + + + + + + + + + + + + + + + Contents + + + + + + Menu + + + + + + + + Expand + + + + + + Light mode + + + + + + + + + + + + + + Dark mode + + + + + + + Auto light/dark, in light mode + + + + + + + + + + + + + + + Auto light/dark, in dark mode + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Skip to content + + + +
+
+
+ +
+ +
+
+ +
+ +
+
+ +
+
+
+ + + + + Back to top + +
+
+ +
+ +
+ +
+ +
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/_modules/test_all.html b/_modules/test_all.html new file mode 100644 index 0000000..d87cc3b --- /dev/null +++ b/_modules/test_all.html @@ -0,0 +1,312 @@ + + + + + + + + test_all - yardang v0.1.0 + + + + + + + + + + + + + + + + + + + + + Contents + + + + + + Menu + + + + + + + + Expand + + + + + + Light mode + + + + + + + + + + + + + + Dark mode + + + + + + + Auto light/dark, in light mode + + + + + + + + + + + + + + + Auto light/dark, in dark mode + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Skip to content + + + +
+
+
+ +
+ +
+
+ +
+ +
+
+ +
+
+
+ + + + + Back to top + +
+
+ +
+ +
+
+

Source code for test_all

+from yardang.build import generate_docs_configuration
+from yardang.cli import build, debug
+
+
+
+[docs] +def test_build(): + with generate_docs_configuration() as _: + ...
+ + + +
+[docs] +def test_cli(): + build() + debug()
+ +
+
+
+ +
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/_modules/yardang.html b/_modules/yardang.html new file mode 100644 index 0000000..8f62e1e --- /dev/null +++ b/_modules/yardang.html @@ -0,0 +1,298 @@ + + + + + + + + yardang - yardang v0.1.0 + + + + + + + + + + + + + + + + + + + + + Contents + + + + + + Menu + + + + + + + + Expand + + + + + + Light mode + + + + + + + + + + + + + + Dark mode + + + + + + + Auto light/dark, in light mode + + + + + + + + + + + + + + + Auto light/dark, in dark mode + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Skip to content + + + +
+
+
+ +
+ +
+
+ +
+ +
+
+ +
+
+
+ + + + + Back to top + +
+
+ +
+ +
+
+

Source code for yardang

+
+[docs] +__version__ = "0.1.0"
+ +
+
+
+ +
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/_modules/yardang/build.html b/_modules/yardang/build.html new file mode 100644 index 0000000..67d78bd --- /dev/null +++ b/_modules/yardang/build.html @@ -0,0 +1,436 @@ + + + + + + + + yardang.build - yardang v0.1.0 + + + + + + + + + + + + + + + + + + + + + Contents + + + + + + Menu + + + + + + + + Expand + + + + + + Light mode + + + + + + + + + + + + + + Dark mode + + + + + + + Auto light/dark, in light mode + + + + + + + + + + + + + + + Auto light/dark, in dark mode + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Skip to content + + + +
+
+
+ +
+ +
+
+ +
+ +
+
+ +
+
+
+ + + + + Back to top + +
+
+ +
+ +
+
+

Source code for yardang.build

+import os.path
+from contextlib import contextmanager
+from jinja2 import Environment, FileSystemLoader
+from pathlib import Path
+from tempfile import TemporaryDirectory
+from typing import List, Optional
+from .utils import get_config
+
+__all__ = (
+    "generate_docs_configuration",
+    "CUSTOM_CSS",
+)
+
+# Wider screen for furo
+
+[docs] +CUSTOM_CSS = """ +/* Wide main page */ +.content { + flex: 1; +} +aside.sidebar-drawer { + width: unset; +} + +/* Left-align tables */ +article table.align-default { + margin-left: 0; +} +"""
+ + + +@contextmanager +
+[docs] +def generate_docs_configuration( + *, + project: str = "", + title: str = "", + module: str = "", + description: str = "", + author: str = "", + version: str = "", + theme: str = "furo", + docs_root: str = "", + root: str = "", + cname: str = "", + pages: Optional[List] = None, + use_autoapi: Optional[bool] = None, +): + if os.path.exists("conf.py"): + # yield folder path to sphinx build + yield os.path.curdir + else: + # load configuration + default_data = os.path.split(os.getcwd())[-1] + project = project or get_config(section="name", base="project") or default_data.replace("_", "-") + title = title or get_config(section="title") or default_data.replace("_", "-") + module = module or project.replace("-", "_") or default_data.replace("-", "_") + description = description or get_config(section="name", base="description") or default_data.replace("_", " ").replace("-", " ") + author = author or get_config(section="authors", base="project") + if isinstance(author, list) and len(author) > 0: + author = author[0] + else: + author = f"The {project} authors" + theme = theme or get_config(section="theme") + version = version or get_config(section="version", base="project") + docs_root = ( + docs_root + or get_config(section="docs-host") + or get_config(section="urls.Homepage", base="project") + or get_config(section="urls.homepage", base="project") + or get_config(section="urls.Documentation", base="project") + or get_config(section="urls.documentation", base="project") + or get_config(section="urls.Source", base="project") + or get_config(section="urls.source", base="project") + or "" + ) + root = root or get_config(section="root") + cname = cname or get_config(section="cname") + pages = pages or get_config(section="pages") or [] + use_autoapi = use_autoapi or get_config(section="use-autoapi") + source_dir = os.path.curdir + autodoc_pydantic_args = {} + for f in ( + "autodoc_pydantic_model_show_config_summary", + "autodoc_pydantic_model_show_validator_summary", + "autodoc_pydantic_model_show_validator_members", + "autodoc_pydantic_field_list_validators", + "autodoc_pydantic_field_show_constraints", + "autodoc_pydantic_model_member_order", + "autodoc_pydantic_model_show_json", + "autodoc_pydantic_settings_show_json", + "autodoc_pydantic_model_show_field_summary", + ): + default_value = {"autodoc_pydantic_model_member_order": '"bysource"', "autodoc_pydantic_model_show_json": True}.get(f, False) + config_value = get_config(section=f"{f}") + autodoc_pydantic_args[f] = default_value if config_value is None else config_value + # create a temporary directory to store the conf.py file in + with TemporaryDirectory() as td: + templateEnv = Environment(loader=FileSystemLoader(searchpath=str(Path(__file__).parent.resolve()))) + # load the templatized conf.py file + template = templateEnv.get_template("conf.py.j2").render( + project=project, + title=title, + module=module, + description=description, + author=author, + version=version, + theme=theme, + docs_root=docs_root, + root=root, + cname=cname, + pages=pages, + use_autoapi=use_autoapi, + source_dir=source_dir, + **autodoc_pydantic_args, + ) + # dump to file + template_file = Path(td) / "conf.py" + template_file.write_text(template) + + # append docs-specific ignores to gitignore + if Path(".gitignore").exists(): + has_html_build_folder = False + has_index_md = False + with open(".gitignore", "r+") as fp: + for line in fp: + if "docs/html" in line: + has_html_build_folder = True + if "index.md" in line: + has_index_md = True + if not has_html_build_folder or not has_index_md: + fp.write("\n") + if not has_html_build_folder: + fp.write("docs/html\n") + if not has_index_md: + fp.write("index.md\n") + # yield folder path to sphinx build + yield td
+ +
+
+
+ +
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/_modules/yardang/cli.html b/_modules/yardang/cli.html new file mode 100644 index 0000000..bd0dd65 --- /dev/null +++ b/_modules/yardang/cli.html @@ -0,0 +1,355 @@ + + + + + + + + yardang.cli - yardang v0.1.0 + + + + + + + + + + + + + + + + + + + + + Contents + + + + + + Menu + + + + + + + + Expand + + + + + + Light mode + + + + + + + + + + + + + + Dark mode + + + + + + + Auto light/dark, in light mode + + + + + + + + + + + + + + + Auto light/dark, in dark mode + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Skip to content + + + +
+
+
+ +
+ +
+
+ +
+ +
+
+ +
+
+
+ + + + + Back to top + +
+
+ +
+ +
+
+

Source code for yardang.cli

+from sys import executable
+from pathlib import Path
+from subprocess import Popen, PIPE
+from typer import Typer
+
+from .build import generate_docs_configuration, CUSTOM_CSS
+
+
+
+[docs] +def build(quiet: bool = False, debug: bool = False): + with generate_docs_configuration() as file: + folder = Path("docs/html/_static/styles") + css = folder / "custom.css" + if not css.exists(): + folder.mkdir(parents=True, exist_ok=True) + css.write_text(CUSTOM_CSS) + + build_cmd = [ + executable, + "-m", + "sphinx", + ".", + "docs/html", + "-c", + file, + ] + + if debug: + print(" ".join(build_cmd)) + + process = Popen(build_cmd, stdout=PIPE) + while process.poll() is None: + text = process.stdout.readline().decode("utf-8") + if text and not quiet: + print(text) + text = process.stdout.readline().decode("utf-8") + if text and not quiet: + print(text)
+ + + +
+[docs] +def debug(): + build(quiet=False, debug=True)
+ + + +
+[docs] +def main(): + app = Typer() + app.command("build")(build) + app.command("debug")(debug) + app()
+ + + +if __name__ == "__main__": + main() +
+
+
+ +
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/_modules/yardang/utils.html b/_modules/yardang/utils.html new file mode 100644 index 0000000..4b0f8df --- /dev/null +++ b/_modules/yardang/utils.html @@ -0,0 +1,321 @@ + + + + + + + + yardang.utils - yardang v0.1.0 + + + + + + + + + + + + + + + + + + + + + Contents + + + + + + Menu + + + + + + + + Expand + + + + + + Light mode + + + + + + + + + + + + + + Dark mode + + + + + + + Auto light/dark, in light mode + + + + + + + + + + + + + + + Auto light/dark, in dark mode + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Skip to content + + + +
+
+
+ +
+ +
+
+ +
+ +
+
+ +
+
+
+ + + + + Back to top + +
+
+ +
+ +
+
+

Source code for yardang.utils

+import os
+import toml
+from pathlib import Path
+
+
+__all__ = ("get_config",)
+
+
+def get_pyproject_toml():
+    cwd = os.getcwd()
+    local_path = Path(cwd) / "pyproject.toml"
+    if local_path.exists():
+        return toml.loads(local_path.read_text())
+    raise FileNotFoundError(str(local_path))
+
+
+
+[docs] +def get_config(section="", base="tool.yardang"): + config = get_pyproject_toml() + sections = base.split(".") + (section.split(".") if section else []) + for s in sections: + config = config.get(s, None) + if config is None: + return None + return config
+ +
+
+
+ +
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/_sources/.github/CODE_OF_CONDUCT.md.txt b/_sources/.github/CODE_OF_CONDUCT.md.txt new file mode 100644 index 0000000..1b32efd --- /dev/null +++ b/_sources/.github/CODE_OF_CONDUCT.md.txt @@ -0,0 +1,76 @@ +# Contributor Covenant Code of Conduct + +## Our Pledge + +In the interest of fostering an open and welcoming environment, we as +contributors and maintainers pledge to making participation in our project and +our community a harassment-free experience for everyone, regardless of age, body +size, disability, ethnicity, sex characteristics, gender identity and expression, +level of experience, education, socio-economic status, nationality, personal +appearance, race, religion, or sexual identity and orientation. + +## Our Standards + +Examples of behavior that contributes to creating a positive environment +include: + +* Using welcoming and inclusive language +* Being respectful of differing viewpoints and experiences +* Gracefully accepting constructive criticism +* Focusing on what is best for the community +* Showing empathy towards other community members + +Examples of unacceptable behavior by participants include: + +* The use of sexualized language or imagery and unwelcome sexual attention or + advances +* Trolling, insulting/derogatory comments, and personal or political attacks +* Public or private harassment +* Publishing others' private information, such as a physical or electronic + address, without explicit permission +* Other conduct which could reasonably be considered inappropriate in a + professional setting + +## Our Responsibilities + +Project maintainers are responsible for clarifying the standards of acceptable +behavior and are expected to take appropriate and fair corrective action in +response to any instances of unacceptable behavior. + +Project maintainers have the right and responsibility to remove, edit, or +reject comments, commits, code, wiki edits, issues, and other contributions +that are not aligned to this Code of Conduct, or to ban temporarily or +permanently any contributor for other behaviors that they deem inappropriate, +threatening, offensive, or harmful. + +## Scope + +This Code of Conduct applies both within project spaces and in public spaces +when an individual is representing the project or its community. Examples of +representing a project or community include using an official project e-mail +address, posting via an official social media account, or acting as an appointed +representative at an online or offline event. Representation of a project may be +further defined and clarified by project maintainers. + +## Enforcement + +Instances of abusive, harassing, or otherwise unacceptable behavior may be +reported by contacting the project team at t.paine154@gmail.com. All +complaints will be reviewed and investigated and will result in a response that +is deemed necessary and appropriate to the circumstances. The project team is +obligated to maintain confidentiality with regard to the reporter of an incident. +Further details of specific enforcement policies may be posted separately. + +Project maintainers who do not follow or enforce the Code of Conduct in good +faith may face temporary or permanent repercussions as determined by other +members of the project's leadership. + +## Attribution + +This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, +available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html + +[homepage]: https://www.contributor-covenant.org + +For answers to common questions about this code of conduct, see +https://www.contributor-covenant.org/faq diff --git a/_sources/.github/ISSUE_TEMPLATE/bug_report.md.txt b/_sources/.github/ISSUE_TEMPLATE/bug_report.md.txt new file mode 100644 index 0000000..dd84ea7 --- /dev/null +++ b/_sources/.github/ISSUE_TEMPLATE/bug_report.md.txt @@ -0,0 +1,38 @@ +--- +name: Bug report +about: Create a report to help us improve +title: '' +labels: '' +assignees: '' + +--- + +**Describe the bug** +A clear and concise description of what the bug is. + +**To Reproduce** +Steps to reproduce the behavior: +1. Go to '...' +2. Click on '....' +3. Scroll down to '....' +4. See error + +**Expected behavior** +A clear and concise description of what you expected to happen. + +**Screenshots** +If applicable, add screenshots to help explain your problem. + +**Desktop (please complete the following information):** + - OS: [e.g. iOS] + - Browser [e.g. chrome, safari] + - Version [e.g. 22] + +**Smartphone (please complete the following information):** + - Device: [e.g. iPhone6] + - OS: [e.g. iOS8.1] + - Browser [e.g. stock browser, safari] + - Version [e.g. 22] + +**Additional context** +Add any other context about the problem here. diff --git a/_sources/.github/ISSUE_TEMPLATE/feature_request.md.txt b/_sources/.github/ISSUE_TEMPLATE/feature_request.md.txt new file mode 100644 index 0000000..bbcbbe7 --- /dev/null +++ b/_sources/.github/ISSUE_TEMPLATE/feature_request.md.txt @@ -0,0 +1,20 @@ +--- +name: Feature request +about: Suggest an idea for this project +title: '' +labels: '' +assignees: '' + +--- + +**Is your feature request related to a problem? Please describe.** +A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] + +**Describe the solution you'd like** +A clear and concise description of what you want to happen. + +**Describe alternatives you've considered** +A clear and concise description of any alternative solutions or features you've considered. + +**Additional context** +Add any other context or screenshots about the feature request here. diff --git a/_sources/README.md.txt b/_sources/README.md.txt new file mode 100644 index 0000000..32deded --- /dev/null +++ b/_sources/README.md.txt @@ -0,0 +1,25 @@ +yardang + +# yardang + +[![Build Status](https://github.com/python-project-templates/yardang/actions/workflows/build.yml/badge.svg?branch=main&event=push)](https://github.com/python-project-templates/yardang/actions/workflows/build.yml) +[![codecov](https://codecov.io/gh/python-project-templates/yardang/branch/main/graph/badge.svg)](https://codecov.io/gh/python-project-templates/yardang) +[![License](https://img.shields.io/github/license/python-project-templates/yardang)](https://github.com/python-project-templates/yardang) +[![PyPI](https://img.shields.io/pypi/v/yardang.svg)](https://pypi.python.org/pypi/yardang) + +`yardang` is a Python library for generating [Sphinx documentation](https://www.sphinx-doc.org/en/master/) easily, with minimal local configuration overhead. + +[`yardang`](https://www.britannica.com/science/yardang) makes building [Sphinx](https://www.sphinx-doc.org/en/master/) easy. + +## Installation +You can install from PyPI via `pip`: + +```bash +pip install yardang +``` + +Or from `conda-forge` via `conda`: + +```bash +conda install yardang -c conda-forge +``` diff --git a/_sources/autoapi/index.rst.txt b/_sources/autoapi/index.rst.txt new file mode 100644 index 0000000..60e5fe6 --- /dev/null +++ b/_sources/autoapi/index.rst.txt @@ -0,0 +1,12 @@ +API Reference +============= + +This page contains auto-generated API reference documentation [#f1]_. + +.. toctree:: + :titlesonly: + + /autoapi/yardang/index + /autoapi/test_all/index + +.. [#f1] Created with `sphinx-autoapi `_ \ No newline at end of file diff --git a/_sources/autoapi/test_all/index.rst.txt b/_sources/autoapi/test_all/index.rst.txt new file mode 100644 index 0000000..58e9589 --- /dev/null +++ b/_sources/autoapi/test_all/index.rst.txt @@ -0,0 +1,22 @@ +test_all +======== + +.. py:module:: test_all + + +Functions +--------- + +.. autoapisummary:: + + test_all.test_build + test_all.test_cli + + +Module Contents +--------------- + +.. py:function:: test_build() + +.. py:function:: test_cli() + diff --git a/_sources/autoapi/yardang/build/index.rst.txt b/_sources/autoapi/yardang/build/index.rst.txt new file mode 100644 index 0000000..e3168e0 --- /dev/null +++ b/_sources/autoapi/yardang/build/index.rst.txt @@ -0,0 +1,57 @@ +yardang.build +============= + +.. py:module:: yardang.build + + +Attributes +---------- + +.. autoapisummary:: + + yardang.build.CUSTOM_CSS + + +Functions +--------- + +.. autoapisummary:: + + yardang.build.generate_docs_configuration + + +Module Contents +--------------- + +.. py:data:: CUSTOM_CSS + :value: Multiline-String + + .. raw:: html + +
Show Value + + .. code-block:: python + + """ + /* Wide main page */ + .content { + flex: 1; + } + aside.sidebar-drawer { + width: unset; + } + + /* Left-align tables */ + article table.align-default { + margin-left: 0; + } + """ + + .. raw:: html + +
+ + + +.. py:function:: generate_docs_configuration(*, project: str = '', title: str = '', module: str = '', description: str = '', author: str = '', version: str = '', theme: str = 'furo', docs_root: str = '', root: str = '', cname: str = '', pages: Optional[List] = None, use_autoapi: Optional[bool] = None) + diff --git a/_sources/autoapi/yardang/cli/index.rst.txt b/_sources/autoapi/yardang/cli/index.rst.txt new file mode 100644 index 0000000..2ee64b9 --- /dev/null +++ b/_sources/autoapi/yardang/cli/index.rst.txt @@ -0,0 +1,25 @@ +yardang.cli +=========== + +.. py:module:: yardang.cli + + +Functions +--------- + +.. autoapisummary:: + + yardang.cli.build + yardang.cli.debug + yardang.cli.main + + +Module Contents +--------------- + +.. py:function:: build(quiet: bool = False, debug: bool = False) + +.. py:function:: debug() + +.. py:function:: main() + diff --git a/_sources/autoapi/yardang/index.rst.txt b/_sources/autoapi/yardang/index.rst.txt new file mode 100644 index 0000000..983aa94 --- /dev/null +++ b/_sources/autoapi/yardang/index.rst.txt @@ -0,0 +1,32 @@ +yardang +======= + +.. py:module:: yardang + + +Submodules +---------- + +.. toctree:: + :maxdepth: 1 + + /autoapi/yardang/build/index + /autoapi/yardang/cli/index + /autoapi/yardang/utils/index + + +Attributes +---------- + +.. autoapisummary:: + + yardang.__version__ + + +Package Contents +---------------- + +.. py:data:: __version__ + :value: '0.1.0' + + diff --git a/_sources/autoapi/yardang/utils/index.rst.txt b/_sources/autoapi/yardang/utils/index.rst.txt new file mode 100644 index 0000000..9fc3f4f --- /dev/null +++ b/_sources/autoapi/yardang/utils/index.rst.txt @@ -0,0 +1,19 @@ +yardang.utils +============= + +.. py:module:: yardang.utils + + +Functions +--------- + +.. autoapisummary:: + + yardang.utils.get_config + + +Module Contents +--------------- + +.. py:function:: get_config(section='', base='tool.yardang') + diff --git a/_sources/docs/src/configuration.md.txt b/_sources/docs/src/configuration.md.txt new file mode 100644 index 0000000..5c7deed --- /dev/null +++ b/_sources/docs/src/configuration.md.txt @@ -0,0 +1,118 @@ +# Configuration + +Configuration for `yardang` is driven from the `pyproject.toml`, either via standard sections like `project` or from the dedicated `tool.yardang` section. +Each option below corresponds to the [Sphinx configuration](https://www.sphinx-doc.org/en/master/usage/configuration.html). + +## [`name`](https://www.sphinx-doc.org/en/master/usage/configuration.html#confval-project) + +The project name is taken from the standard section, or from the `cwd`. + +```toml +[project] +name = "your project name" +``` + +## `title` + +Same as `name` + +## `module` + +The module title is taken from the `name`, replacing `-` with `_`, or from the `cwd` doing the same. + +## `description` + +```toml +[project] +description = "your project description" +``` + +## [`author`](https://www.sphinx-doc.org/en/master/usage/configuration.html#confval-author) + +```toml +[project] +authors = "your project authors" +``` + +## [`version`](https://www.sphinx-doc.org/en/master/usage/configuration.html#confval-version) + +```toml +[project] +version = "0.1.0" +``` + +## `theme` + +Defaults to `furo`. + +```toml +[tool.yardang] +theme = "furo" +``` + +## [`theme`](https://www.sphinx-doc.org/en/master/usage/configuration.html#confval-html_theme) + +Defaults to `furo`. + +```toml +[tool.yardang] +theme = "furo" +``` + +## `root` + +The root page to use, defaults to `README.md`. + +```toml +[tool.yardang] +root = "docs/src/index.md" +``` + +## `cname` + +If set, will generate a `CNAME` file for GitHub Pages custom domains. + +```toml +[tool.yardang] +cname = "yardang.python-templates.dev" +``` + +## `pages` + +Pages to include in the contents tree. + +```toml +[tool.yardang] +pages = [ + "docs/src/overview.md", + "docs/src/installation.md", + "docs/src/configuration.md", +] +``` + +## `use_autoapi` + +Whether or not to use [Sphinx AutoAPI](https://sphinx-autoapi.readthedocs.io/en/latest/). +**NOTE:** it is recommended to manually autodoc your code. + +```toml +[tool.yardang] +use-autoapi = true +``` + +## [Autodoc Pydantic](https://autodoc-pydantic.readthedocs.io/en/stable/users/examples.html) arguments + +[Configuration for Autodoc Pydantic](https://autodoc-pydantic.readthedocs.io/en/stable/users/configuration.html). + +```toml +[tool.yardang] +autodoc_pydantic_model_show_config_summary = false +autodoc_pydantic_model_show_validator_summary = false +autodoc_pydantic_model_show_validator_members = false +autodoc_pydantic_field_list_validators = false +autodoc_pydantic_field_show_constraints = false +autodoc_pydantic_model_member_order = "bysource" +autodoc_pydantic_model_show_json = true +autodoc_pydantic_settings_show_json = false +autodoc_pydantic_model_show_field_summary = false +``` diff --git a/_sources/docs/src/home.md.txt b/_sources/docs/src/home.md.txt new file mode 100644 index 0000000..a5532fb --- /dev/null +++ b/_sources/docs/src/home.md.txt @@ -0,0 +1,53 @@ + + +
+ yardang +

yardang

+
+ +[![Build Status](https://github.com/python-project-templates/yardang/actions/workflows/build.yml/badge.svg?branch=main&event=push)](https://github.com/python-project-templates/yardang/actions/workflows/build.yml) +[![codecov](https://codecov.io/gh/python-project-templates/yardang/branch/main/graph/badge.svg)](https://codecov.io/gh/python-project-templates/yardang) +[![License](https://img.shields.io/github/license/python-project-templates/yardang)](https://github.com/python-project-templates/yardang) +[![PyPI](https://img.shields.io/pypi/v/yardang.svg)](https://pypi.python.org/pypi/yardang) + +`yardang` is a Python library for generating [Sphinx documentation](https://www.sphinx-doc.org/en/master/) easily, with minimal local configuration overhead. + +[`yardang`](https://www.britannica.com/science/yardang) makes building [Sphinx](https://www.sphinx-doc.org/en/master/) easy. + + +::::{grid} 1 2 2 2 +:margin: 4 4 0 0 +:gutter: 1 + +:::{grid-item-card} {octicon}`table` Overview +:link: docs/src/overview.html +:link-type: url + +About `yardang` and how it works. +::: + +:::{grid-item-card} {octicon}`download` Installation +:link: docs/src/installation.html +:link-type: url + +Install `yardang` from PyPI, Conda Forge, or build from source. +::: + +:::{grid-item-card} {octicon}`gear` Configuration +:link: docs/src/configuration.html +:link-type: url + +Learn how to configure your repository. +::: + +:::{grid-item-card} {octicon}`mark-github` Repository +:link: https://github.com/python-project-templates/yardang +:link-type: url + +Star, Fork, or contribute on GitHub. +::: +:::: + +------------- + +*This library was generated using [copier](https://copier.readthedocs.io/en/stable/) from the [Base Python Project Template repository](https://github.com/python-project-templates/base).* diff --git a/_sources/docs/src/installation.md.txt b/_sources/docs/src/installation.md.txt new file mode 100644 index 0000000..7fa0741 --- /dev/null +++ b/_sources/docs/src/installation.md.txt @@ -0,0 +1,27 @@ +# Installation + +## PyPI + +You can install from PyPI via `pip`: + +```bash +pip install yardang +``` + +## Conda + +You can install from `conda-forge` via `conda` (or `mamba`, etc): + +```bash +conda install yardang -c conda-forge +``` + +## Source + +`yardang` can also be built and installed from source: + +```bash +git clone https://github.com/python-project-templates/yardang.git +cd yardang +pip install -e . +``` diff --git a/_sources/docs/src/overview.md.txt b/_sources/docs/src/overview.md.txt new file mode 100644 index 0000000..ff59933 --- /dev/null +++ b/_sources/docs/src/overview.md.txt @@ -0,0 +1,55 @@ +# Overview + +`yardang` is a tool to configure the most common [Sphinx](https://www.sphinx-doc.org/en/master/) options directly from a `pyproject.toml`. +Sphinx relies on a `conf.py` file and Makefiles, but these usually overlap a substantial amount with information already stored in the repository (e.g. in the `pyproject.toml`). +Within an organization, these files tend to include a substantial amount of overlapping information. + +## Integrations + +`yardang` takes the most important parts, like theme, title, pages, etc, and extracts them directly from the `pyproject.toml`. +It creates a temporary file for the `conf.py`, and builds the project into `docs/html`. +Out of the box, it comes with support for several popular Sphinx frameworks: + +- [Sphinx Design](https://sphinx-design.readthedocs.io/en/latest/) +- [Myst Markdown](https://jupyterbook.org/en/stable/content/myst.html) +- [Sphinx AutoAPI](https://sphinx-autoapi.readthedocs.io/en/latest/) +- [Autodoc Pydantic](https://autodoc-pydantic.readthedocs.io/en/stable/users/examples.html) +- [Furo Theme](https://github.com/pradyunsg/furo) + +## Usage + +`yardang` builds Sphinx via a CLI, which will build docs into `docs/html`: + +```bash +yardang build +``` + +### GitHub Pages + +The goal of this project is to make it as easy as possible to use Sphinx. +The following yaml should be all it takes to integrate your project with GitHub Pages, **without changing anything in your existing repository**. + +```yaml +name: Docs +on: + push: + branches: + - main +permissions: + contents: write +jobs: + docs: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-python@v4 + - run: pip install . + - run: pip install yardang + - run: yardang build + - name: Deploy + uses: peaceiris/actions-gh-pages@v3 + with: + publish_branch: gh-pages + github_token: ${{ secrets.GITHUB_TOKEN }} + publish_dir: docs/html +``` diff --git a/_sources/index.md.txt b/_sources/index.md.txt new file mode 100644 index 0000000..a3bb046 --- /dev/null +++ b/_sources/index.md.txt @@ -0,0 +1,70 @@ +```{toctree} +--- +caption: "" +maxdepth: 2 +hidden: true +--- + + +docs/src/overview.md + +docs/src/installation.md + +docs/src/configuration.md + + +``` + + + +
+ yardang +

yardang

+
+ +[![Build Status](https://github.com/python-project-templates/yardang/actions/workflows/build.yml/badge.svg?branch=main&event=push)](https://github.com/python-project-templates/yardang/actions/workflows/build.yml) +[![codecov](https://codecov.io/gh/python-project-templates/yardang/branch/main/graph/badge.svg)](https://codecov.io/gh/python-project-templates/yardang) +[![License](https://img.shields.io/github/license/python-project-templates/yardang)](https://github.com/python-project-templates/yardang) +[![PyPI](https://img.shields.io/pypi/v/yardang.svg)](https://pypi.python.org/pypi/yardang) + +`yardang` is a Python library for generating [Sphinx documentation](https://www.sphinx-doc.org/en/master/) easily, with minimal local configuration overhead. + +[`yardang`](https://www.britannica.com/science/yardang) makes building [Sphinx](https://www.sphinx-doc.org/en/master/) easy. + + +::::{grid} 1 2 2 2 +:margin: 4 4 0 0 +:gutter: 1 + +:::{grid-item-card} {octicon}`table` Overview +:link: docs/src/overview.html +:link-type: url + +About `yardang` and how it works. +::: + +:::{grid-item-card} {octicon}`download` Installation +:link: docs/src/installation.html +:link-type: url + +Install `yardang` from PyPI, Conda Forge, or build from source. +::: + +:::{grid-item-card} {octicon}`gear` Configuration +:link: docs/src/configuration.html +:link-type: url + +Learn how to configure your repository. +::: + +:::{grid-item-card} {octicon}`mark-github` Repository +:link: https://github.com/python-project-templates/yardang +:link-type: url + +Star, Fork, or contribute on GitHub. +::: +:::: + +------------- + +*This library was generated using [copier](https://copier.readthedocs.io/en/stable/) from the [Base Python Project Template repository](https://github.com/python-project-templates/base).* diff --git a/_sphinx_design_static/design-tabs.js b/_sphinx_design_static/design-tabs.js new file mode 100644 index 0000000..b25bd6a --- /dev/null +++ b/_sphinx_design_static/design-tabs.js @@ -0,0 +1,101 @@ +// @ts-check + +// Extra JS capability for selected tabs to be synced +// The selection is stored in local storage so that it persists across page loads. + +/** + * @type {Record} + */ +let sd_id_to_elements = {}; +const storageKeyPrefix = "sphinx-design-tab-id-"; + +/** + * Create a key for a tab element. + * @param {HTMLElement} el - The tab element. + * @returns {[string, string, string] | null} - The key. + * + */ +function create_key(el) { + let syncId = el.getAttribute("data-sync-id"); + let syncGroup = el.getAttribute("data-sync-group"); + if (!syncId || !syncGroup) return null; + return [syncGroup, syncId, syncGroup + "--" + syncId]; +} + +/** + * Initialize the tab selection. + * + */ +function ready() { + // Find all tabs with sync data + + /** @type {string[]} */ + let groups = []; + + document.querySelectorAll(".sd-tab-label").forEach((label) => { + if (label instanceof HTMLElement) { + let data = create_key(label); + if (data) { + let [group, id, key] = data; + + // add click event listener + // @ts-ignore + label.onclick = onSDLabelClick; + + // store map of key to elements + if (!sd_id_to_elements[key]) { + sd_id_to_elements[key] = []; + } + sd_id_to_elements[key].push(label); + + if (groups.indexOf(group) === -1) { + groups.push(group); + // Check if a specific tab has been selected via URL parameter + const tabParam = new URLSearchParams(window.location.search).get( + group + ); + if (tabParam) { + console.log( + "sphinx-design: Selecting tab id for group '" + + group + + "' from URL parameter: " + + tabParam + ); + window.sessionStorage.setItem(storageKeyPrefix + group, tabParam); + } + } + + // Check is a specific tab has been selected previously + let previousId = window.sessionStorage.getItem( + storageKeyPrefix + group + ); + if (previousId === id) { + // console.log( + // "sphinx-design: Selecting tab from session storage: " + id + // ); + // @ts-ignore + label.previousElementSibling.checked = true; + } + } + } + }); +} + +/** + * Activate other tabs with the same sync id. + * + * @this {HTMLElement} - The element that was clicked. + */ +function onSDLabelClick() { + let data = create_key(this); + if (!data) return; + let [group, id, key] = data; + for (const label of sd_id_to_elements[key]) { + if (label === this) continue; + // @ts-ignore + label.previousElementSibling.checked = true; + } + window.sessionStorage.setItem(storageKeyPrefix + group, id); +} + +document.addEventListener("DOMContentLoaded", ready, false); diff --git a/_sphinx_design_static/sphinx-design.min.css b/_sphinx_design_static/sphinx-design.min.css new file mode 100644 index 0000000..a325746 --- /dev/null +++ b/_sphinx_design_static/sphinx-design.min.css @@ -0,0 +1 @@ +.sd-bg-primary{background-color:var(--sd-color-primary) !important}.sd-bg-text-primary{color:var(--sd-color-primary-text) !important}button.sd-bg-primary:focus,button.sd-bg-primary:hover{background-color:var(--sd-color-primary-highlight) !important}a.sd-bg-primary:focus,a.sd-bg-primary:hover{background-color:var(--sd-color-primary-highlight) !important}.sd-bg-secondary{background-color:var(--sd-color-secondary) !important}.sd-bg-text-secondary{color:var(--sd-color-secondary-text) !important}button.sd-bg-secondary:focus,button.sd-bg-secondary:hover{background-color:var(--sd-color-secondary-highlight) !important}a.sd-bg-secondary:focus,a.sd-bg-secondary:hover{background-color:var(--sd-color-secondary-highlight) !important}.sd-bg-success{background-color:var(--sd-color-success) !important}.sd-bg-text-success{color:var(--sd-color-success-text) !important}button.sd-bg-success:focus,button.sd-bg-success:hover{background-color:var(--sd-color-success-highlight) !important}a.sd-bg-success:focus,a.sd-bg-success:hover{background-color:var(--sd-color-success-highlight) !important}.sd-bg-info{background-color:var(--sd-color-info) !important}.sd-bg-text-info{color:var(--sd-color-info-text) !important}button.sd-bg-info:focus,button.sd-bg-info:hover{background-color:var(--sd-color-info-highlight) !important}a.sd-bg-info:focus,a.sd-bg-info:hover{background-color:var(--sd-color-info-highlight) !important}.sd-bg-warning{background-color:var(--sd-color-warning) !important}.sd-bg-text-warning{color:var(--sd-color-warning-text) !important}button.sd-bg-warning:focus,button.sd-bg-warning:hover{background-color:var(--sd-color-warning-highlight) !important}a.sd-bg-warning:focus,a.sd-bg-warning:hover{background-color:var(--sd-color-warning-highlight) !important}.sd-bg-danger{background-color:var(--sd-color-danger) !important}.sd-bg-text-danger{color:var(--sd-color-danger-text) !important}button.sd-bg-danger:focus,button.sd-bg-danger:hover{background-color:var(--sd-color-danger-highlight) !important}a.sd-bg-danger:focus,a.sd-bg-danger:hover{background-color:var(--sd-color-danger-highlight) !important}.sd-bg-light{background-color:var(--sd-color-light) !important}.sd-bg-text-light{color:var(--sd-color-light-text) !important}button.sd-bg-light:focus,button.sd-bg-light:hover{background-color:var(--sd-color-light-highlight) !important}a.sd-bg-light:focus,a.sd-bg-light:hover{background-color:var(--sd-color-light-highlight) !important}.sd-bg-muted{background-color:var(--sd-color-muted) !important}.sd-bg-text-muted{color:var(--sd-color-muted-text) !important}button.sd-bg-muted:focus,button.sd-bg-muted:hover{background-color:var(--sd-color-muted-highlight) !important}a.sd-bg-muted:focus,a.sd-bg-muted:hover{background-color:var(--sd-color-muted-highlight) !important}.sd-bg-dark{background-color:var(--sd-color-dark) !important}.sd-bg-text-dark{color:var(--sd-color-dark-text) !important}button.sd-bg-dark:focus,button.sd-bg-dark:hover{background-color:var(--sd-color-dark-highlight) !important}a.sd-bg-dark:focus,a.sd-bg-dark:hover{background-color:var(--sd-color-dark-highlight) !important}.sd-bg-black{background-color:var(--sd-color-black) !important}.sd-bg-text-black{color:var(--sd-color-black-text) !important}button.sd-bg-black:focus,button.sd-bg-black:hover{background-color:var(--sd-color-black-highlight) !important}a.sd-bg-black:focus,a.sd-bg-black:hover{background-color:var(--sd-color-black-highlight) !important}.sd-bg-white{background-color:var(--sd-color-white) !important}.sd-bg-text-white{color:var(--sd-color-white-text) !important}button.sd-bg-white:focus,button.sd-bg-white:hover{background-color:var(--sd-color-white-highlight) !important}a.sd-bg-white:focus,a.sd-bg-white:hover{background-color:var(--sd-color-white-highlight) !important}.sd-text-primary,.sd-text-primary>p{color:var(--sd-color-primary) !important}a.sd-text-primary:focus,a.sd-text-primary:hover{color:var(--sd-color-primary-highlight) !important}.sd-text-secondary,.sd-text-secondary>p{color:var(--sd-color-secondary) !important}a.sd-text-secondary:focus,a.sd-text-secondary:hover{color:var(--sd-color-secondary-highlight) !important}.sd-text-success,.sd-text-success>p{color:var(--sd-color-success) !important}a.sd-text-success:focus,a.sd-text-success:hover{color:var(--sd-color-success-highlight) !important}.sd-text-info,.sd-text-info>p{color:var(--sd-color-info) !important}a.sd-text-info:focus,a.sd-text-info:hover{color:var(--sd-color-info-highlight) !important}.sd-text-warning,.sd-text-warning>p{color:var(--sd-color-warning) !important}a.sd-text-warning:focus,a.sd-text-warning:hover{color:var(--sd-color-warning-highlight) !important}.sd-text-danger,.sd-text-danger>p{color:var(--sd-color-danger) !important}a.sd-text-danger:focus,a.sd-text-danger:hover{color:var(--sd-color-danger-highlight) !important}.sd-text-light,.sd-text-light>p{color:var(--sd-color-light) !important}a.sd-text-light:focus,a.sd-text-light:hover{color:var(--sd-color-light-highlight) !important}.sd-text-muted,.sd-text-muted>p{color:var(--sd-color-muted) !important}a.sd-text-muted:focus,a.sd-text-muted:hover{color:var(--sd-color-muted-highlight) !important}.sd-text-dark,.sd-text-dark>p{color:var(--sd-color-dark) !important}a.sd-text-dark:focus,a.sd-text-dark:hover{color:var(--sd-color-dark-highlight) !important}.sd-text-black,.sd-text-black>p{color:var(--sd-color-black) !important}a.sd-text-black:focus,a.sd-text-black:hover{color:var(--sd-color-black-highlight) !important}.sd-text-white,.sd-text-white>p{color:var(--sd-color-white) !important}a.sd-text-white:focus,a.sd-text-white:hover{color:var(--sd-color-white-highlight) !important}.sd-outline-primary{border-color:var(--sd-color-primary) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-primary:focus,a.sd-outline-primary:hover{border-color:var(--sd-color-primary-highlight) !important}.sd-outline-secondary{border-color:var(--sd-color-secondary) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-secondary:focus,a.sd-outline-secondary:hover{border-color:var(--sd-color-secondary-highlight) !important}.sd-outline-success{border-color:var(--sd-color-success) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-success:focus,a.sd-outline-success:hover{border-color:var(--sd-color-success-highlight) !important}.sd-outline-info{border-color:var(--sd-color-info) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-info:focus,a.sd-outline-info:hover{border-color:var(--sd-color-info-highlight) !important}.sd-outline-warning{border-color:var(--sd-color-warning) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-warning:focus,a.sd-outline-warning:hover{border-color:var(--sd-color-warning-highlight) !important}.sd-outline-danger{border-color:var(--sd-color-danger) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-danger:focus,a.sd-outline-danger:hover{border-color:var(--sd-color-danger-highlight) !important}.sd-outline-light{border-color:var(--sd-color-light) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-light:focus,a.sd-outline-light:hover{border-color:var(--sd-color-light-highlight) !important}.sd-outline-muted{border-color:var(--sd-color-muted) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-muted:focus,a.sd-outline-muted:hover{border-color:var(--sd-color-muted-highlight) !important}.sd-outline-dark{border-color:var(--sd-color-dark) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-dark:focus,a.sd-outline-dark:hover{border-color:var(--sd-color-dark-highlight) !important}.sd-outline-black{border-color:var(--sd-color-black) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-black:focus,a.sd-outline-black:hover{border-color:var(--sd-color-black-highlight) !important}.sd-outline-white{border-color:var(--sd-color-white) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-white:focus,a.sd-outline-white:hover{border-color:var(--sd-color-white-highlight) !important}.sd-bg-transparent{background-color:transparent !important}.sd-outline-transparent{border-color:transparent !important}.sd-text-transparent{color:transparent !important}.sd-p-0{padding:0 !important}.sd-pt-0,.sd-py-0{padding-top:0 !important}.sd-pr-0,.sd-px-0{padding-right:0 !important}.sd-pb-0,.sd-py-0{padding-bottom:0 !important}.sd-pl-0,.sd-px-0{padding-left:0 !important}.sd-p-1{padding:.25rem !important}.sd-pt-1,.sd-py-1{padding-top:.25rem !important}.sd-pr-1,.sd-px-1{padding-right:.25rem !important}.sd-pb-1,.sd-py-1{padding-bottom:.25rem !important}.sd-pl-1,.sd-px-1{padding-left:.25rem !important}.sd-p-2{padding:.5rem !important}.sd-pt-2,.sd-py-2{padding-top:.5rem !important}.sd-pr-2,.sd-px-2{padding-right:.5rem !important}.sd-pb-2,.sd-py-2{padding-bottom:.5rem !important}.sd-pl-2,.sd-px-2{padding-left:.5rem !important}.sd-p-3{padding:1rem !important}.sd-pt-3,.sd-py-3{padding-top:1rem !important}.sd-pr-3,.sd-px-3{padding-right:1rem !important}.sd-pb-3,.sd-py-3{padding-bottom:1rem !important}.sd-pl-3,.sd-px-3{padding-left:1rem !important}.sd-p-4{padding:1.5rem !important}.sd-pt-4,.sd-py-4{padding-top:1.5rem !important}.sd-pr-4,.sd-px-4{padding-right:1.5rem !important}.sd-pb-4,.sd-py-4{padding-bottom:1.5rem !important}.sd-pl-4,.sd-px-4{padding-left:1.5rem !important}.sd-p-5{padding:3rem !important}.sd-pt-5,.sd-py-5{padding-top:3rem !important}.sd-pr-5,.sd-px-5{padding-right:3rem !important}.sd-pb-5,.sd-py-5{padding-bottom:3rem !important}.sd-pl-5,.sd-px-5{padding-left:3rem !important}.sd-m-auto{margin:auto !important}.sd-mt-auto,.sd-my-auto{margin-top:auto !important}.sd-mr-auto,.sd-mx-auto{margin-right:auto !important}.sd-mb-auto,.sd-my-auto{margin-bottom:auto !important}.sd-ml-auto,.sd-mx-auto{margin-left:auto !important}.sd-m-0{margin:0 !important}.sd-mt-0,.sd-my-0{margin-top:0 !important}.sd-mr-0,.sd-mx-0{margin-right:0 !important}.sd-mb-0,.sd-my-0{margin-bottom:0 !important}.sd-ml-0,.sd-mx-0{margin-left:0 !important}.sd-m-1{margin:.25rem !important}.sd-mt-1,.sd-my-1{margin-top:.25rem !important}.sd-mr-1,.sd-mx-1{margin-right:.25rem !important}.sd-mb-1,.sd-my-1{margin-bottom:.25rem !important}.sd-ml-1,.sd-mx-1{margin-left:.25rem !important}.sd-m-2{margin:.5rem !important}.sd-mt-2,.sd-my-2{margin-top:.5rem !important}.sd-mr-2,.sd-mx-2{margin-right:.5rem !important}.sd-mb-2,.sd-my-2{margin-bottom:.5rem !important}.sd-ml-2,.sd-mx-2{margin-left:.5rem !important}.sd-m-3{margin:1rem !important}.sd-mt-3,.sd-my-3{margin-top:1rem !important}.sd-mr-3,.sd-mx-3{margin-right:1rem !important}.sd-mb-3,.sd-my-3{margin-bottom:1rem !important}.sd-ml-3,.sd-mx-3{margin-left:1rem !important}.sd-m-4{margin:1.5rem !important}.sd-mt-4,.sd-my-4{margin-top:1.5rem !important}.sd-mr-4,.sd-mx-4{margin-right:1.5rem !important}.sd-mb-4,.sd-my-4{margin-bottom:1.5rem !important}.sd-ml-4,.sd-mx-4{margin-left:1.5rem !important}.sd-m-5{margin:3rem !important}.sd-mt-5,.sd-my-5{margin-top:3rem !important}.sd-mr-5,.sd-mx-5{margin-right:3rem !important}.sd-mb-5,.sd-my-5{margin-bottom:3rem !important}.sd-ml-5,.sd-mx-5{margin-left:3rem !important}.sd-w-25{width:25% !important}.sd-w-50{width:50% !important}.sd-w-75{width:75% !important}.sd-w-100{width:100% !important}.sd-w-auto{width:auto !important}.sd-h-25{height:25% !important}.sd-h-50{height:50% !important}.sd-h-75{height:75% !important}.sd-h-100{height:100% !important}.sd-h-auto{height:auto !important}.sd-d-none{display:none !important}.sd-d-inline{display:inline !important}.sd-d-inline-block{display:inline-block !important}.sd-d-block{display:block !important}.sd-d-grid{display:grid !important}.sd-d-flex-row{display:-ms-flexbox !important;display:flex !important;flex-direction:row !important}.sd-d-flex-column{display:-ms-flexbox !important;display:flex !important;flex-direction:column !important}.sd-d-inline-flex{display:-ms-inline-flexbox !important;display:inline-flex !important}@media(min-width: 576px){.sd-d-sm-none{display:none !important}.sd-d-sm-inline{display:inline !important}.sd-d-sm-inline-block{display:inline-block !important}.sd-d-sm-block{display:block !important}.sd-d-sm-grid{display:grid !important}.sd-d-sm-flex{display:-ms-flexbox !important;display:flex !important}.sd-d-sm-inline-flex{display:-ms-inline-flexbox !important;display:inline-flex !important}}@media(min-width: 768px){.sd-d-md-none{display:none !important}.sd-d-md-inline{display:inline !important}.sd-d-md-inline-block{display:inline-block !important}.sd-d-md-block{display:block !important}.sd-d-md-grid{display:grid !important}.sd-d-md-flex{display:-ms-flexbox !important;display:flex !important}.sd-d-md-inline-flex{display:-ms-inline-flexbox !important;display:inline-flex !important}}@media(min-width: 992px){.sd-d-lg-none{display:none !important}.sd-d-lg-inline{display:inline !important}.sd-d-lg-inline-block{display:inline-block !important}.sd-d-lg-block{display:block !important}.sd-d-lg-grid{display:grid !important}.sd-d-lg-flex{display:-ms-flexbox !important;display:flex !important}.sd-d-lg-inline-flex{display:-ms-inline-flexbox !important;display:inline-flex !important}}@media(min-width: 1200px){.sd-d-xl-none{display:none !important}.sd-d-xl-inline{display:inline !important}.sd-d-xl-inline-block{display:inline-block !important}.sd-d-xl-block{display:block !important}.sd-d-xl-grid{display:grid !important}.sd-d-xl-flex{display:-ms-flexbox !important;display:flex !important}.sd-d-xl-inline-flex{display:-ms-inline-flexbox !important;display:inline-flex !important}}.sd-align-major-start{justify-content:flex-start !important}.sd-align-major-end{justify-content:flex-end !important}.sd-align-major-center{justify-content:center !important}.sd-align-major-justify{justify-content:space-between !important}.sd-align-major-spaced{justify-content:space-evenly !important}.sd-align-minor-start{align-items:flex-start !important}.sd-align-minor-end{align-items:flex-end !important}.sd-align-minor-center{align-items:center !important}.sd-align-minor-stretch{align-items:stretch !important}.sd-text-justify{text-align:justify !important}.sd-text-left{text-align:left !important}.sd-text-right{text-align:right !important}.sd-text-center{text-align:center !important}.sd-font-weight-light{font-weight:300 !important}.sd-font-weight-lighter{font-weight:lighter !important}.sd-font-weight-normal{font-weight:400 !important}.sd-font-weight-bold{font-weight:700 !important}.sd-font-weight-bolder{font-weight:bolder !important}.sd-font-italic{font-style:italic !important}.sd-text-decoration-none{text-decoration:none !important}.sd-text-lowercase{text-transform:lowercase !important}.sd-text-uppercase{text-transform:uppercase !important}.sd-text-capitalize{text-transform:capitalize !important}.sd-text-wrap{white-space:normal !important}.sd-text-nowrap{white-space:nowrap !important}.sd-text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.sd-fs-1,.sd-fs-1>p{font-size:calc(1.375rem + 1.5vw) !important;line-height:unset !important}.sd-fs-2,.sd-fs-2>p{font-size:calc(1.325rem + 0.9vw) !important;line-height:unset !important}.sd-fs-3,.sd-fs-3>p{font-size:calc(1.3rem + 0.6vw) !important;line-height:unset !important}.sd-fs-4,.sd-fs-4>p{font-size:calc(1.275rem + 0.3vw) !important;line-height:unset !important}.sd-fs-5,.sd-fs-5>p{font-size:1.25rem !important;line-height:unset !important}.sd-fs-6,.sd-fs-6>p{font-size:1rem !important;line-height:unset !important}.sd-border-0{border:0 solid !important}.sd-border-top-0{border-top:0 solid !important}.sd-border-bottom-0{border-bottom:0 solid !important}.sd-border-right-0{border-right:0 solid !important}.sd-border-left-0{border-left:0 solid !important}.sd-border-1{border:1px solid !important}.sd-border-top-1{border-top:1px solid !important}.sd-border-bottom-1{border-bottom:1px solid !important}.sd-border-right-1{border-right:1px solid !important}.sd-border-left-1{border-left:1px solid !important}.sd-border-2{border:2px solid !important}.sd-border-top-2{border-top:2px solid !important}.sd-border-bottom-2{border-bottom:2px solid !important}.sd-border-right-2{border-right:2px solid !important}.sd-border-left-2{border-left:2px solid !important}.sd-border-3{border:3px solid !important}.sd-border-top-3{border-top:3px solid !important}.sd-border-bottom-3{border-bottom:3px solid !important}.sd-border-right-3{border-right:3px solid !important}.sd-border-left-3{border-left:3px solid !important}.sd-border-4{border:4px solid !important}.sd-border-top-4{border-top:4px solid !important}.sd-border-bottom-4{border-bottom:4px solid !important}.sd-border-right-4{border-right:4px solid !important}.sd-border-left-4{border-left:4px solid !important}.sd-border-5{border:5px solid !important}.sd-border-top-5{border-top:5px solid !important}.sd-border-bottom-5{border-bottom:5px solid !important}.sd-border-right-5{border-right:5px solid !important}.sd-border-left-5{border-left:5px solid !important}.sd-rounded-0{border-radius:0 !important}.sd-rounded-1{border-radius:.2rem !important}.sd-rounded-2{border-radius:.3rem !important}.sd-rounded-3{border-radius:.5rem !important}.sd-rounded-pill{border-radius:50rem !important}.sd-rounded-circle{border-radius:50% !important}.shadow-none{box-shadow:none !important}.sd-shadow-sm{box-shadow:0 .125rem .25rem var(--sd-color-shadow) !important}.sd-shadow-md{box-shadow:0 .5rem 1rem var(--sd-color-shadow) !important}.sd-shadow-lg{box-shadow:0 1rem 3rem var(--sd-color-shadow) !important}@keyframes sd-slide-from-left{0%{transform:translateX(-100%)}100%{transform:translateX(0)}}@keyframes sd-slide-from-right{0%{transform:translateX(200%)}100%{transform:translateX(0)}}@keyframes sd-grow100{0%{transform:scale(0);opacity:.5}100%{transform:scale(1);opacity:1}}@keyframes sd-grow50{0%{transform:scale(0.5);opacity:.5}100%{transform:scale(1);opacity:1}}@keyframes sd-grow50-rot20{0%{transform:scale(0.5) rotateZ(-20deg);opacity:.5}75%{transform:scale(1) rotateZ(5deg);opacity:1}95%{transform:scale(1) rotateZ(-1deg);opacity:1}100%{transform:scale(1) rotateZ(0);opacity:1}}.sd-animate-slide-from-left{animation:1s ease-out 0s 1 normal none running sd-slide-from-left}.sd-animate-slide-from-right{animation:1s ease-out 0s 1 normal none running sd-slide-from-right}.sd-animate-grow100{animation:1s ease-out 0s 1 normal none running sd-grow100}.sd-animate-grow50{animation:1s ease-out 0s 1 normal none running sd-grow50}.sd-animate-grow50-rot20{animation:1s ease-out 0s 1 normal none running sd-grow50-rot20}.sd-badge{display:inline-block;padding:.35em .65em;font-size:.75em;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem}.sd-badge:empty{display:none}a.sd-badge{text-decoration:none}.sd-btn .sd-badge{position:relative;top:-1px}.sd-btn{background-color:transparent;border:1px solid transparent;border-radius:.25rem;cursor:pointer;display:inline-block;font-weight:400;font-size:1rem;line-height:1.5;padding:.375rem .75rem;text-align:center;text-decoration:none;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;vertical-align:middle;user-select:none;-moz-user-select:none;-ms-user-select:none;-webkit-user-select:none}.sd-btn:hover{text-decoration:none}@media(prefers-reduced-motion: reduce){.sd-btn{transition:none}}.sd-btn-primary,.sd-btn-outline-primary:hover,.sd-btn-outline-primary:focus{color:var(--sd-color-primary-text) !important;background-color:var(--sd-color-primary) !important;border-color:var(--sd-color-primary) !important;border-width:1px !important;border-style:solid !important}.sd-btn-primary:hover,.sd-btn-primary:focus{color:var(--sd-color-primary-text) !important;background-color:var(--sd-color-primary-highlight) !important;border-color:var(--sd-color-primary-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-primary{color:var(--sd-color-primary) !important;border-color:var(--sd-color-primary) !important;border-width:1px !important;border-style:solid !important}.sd-btn-secondary,.sd-btn-outline-secondary:hover,.sd-btn-outline-secondary:focus{color:var(--sd-color-secondary-text) !important;background-color:var(--sd-color-secondary) !important;border-color:var(--sd-color-secondary) !important;border-width:1px !important;border-style:solid !important}.sd-btn-secondary:hover,.sd-btn-secondary:focus{color:var(--sd-color-secondary-text) !important;background-color:var(--sd-color-secondary-highlight) !important;border-color:var(--sd-color-secondary-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-secondary{color:var(--sd-color-secondary) !important;border-color:var(--sd-color-secondary) !important;border-width:1px !important;border-style:solid !important}.sd-btn-success,.sd-btn-outline-success:hover,.sd-btn-outline-success:focus{color:var(--sd-color-success-text) !important;background-color:var(--sd-color-success) !important;border-color:var(--sd-color-success) !important;border-width:1px !important;border-style:solid !important}.sd-btn-success:hover,.sd-btn-success:focus{color:var(--sd-color-success-text) !important;background-color:var(--sd-color-success-highlight) !important;border-color:var(--sd-color-success-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-success{color:var(--sd-color-success) !important;border-color:var(--sd-color-success) !important;border-width:1px !important;border-style:solid !important}.sd-btn-info,.sd-btn-outline-info:hover,.sd-btn-outline-info:focus{color:var(--sd-color-info-text) !important;background-color:var(--sd-color-info) !important;border-color:var(--sd-color-info) !important;border-width:1px !important;border-style:solid !important}.sd-btn-info:hover,.sd-btn-info:focus{color:var(--sd-color-info-text) !important;background-color:var(--sd-color-info-highlight) !important;border-color:var(--sd-color-info-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-info{color:var(--sd-color-info) !important;border-color:var(--sd-color-info) !important;border-width:1px !important;border-style:solid !important}.sd-btn-warning,.sd-btn-outline-warning:hover,.sd-btn-outline-warning:focus{color:var(--sd-color-warning-text) !important;background-color:var(--sd-color-warning) !important;border-color:var(--sd-color-warning) !important;border-width:1px !important;border-style:solid !important}.sd-btn-warning:hover,.sd-btn-warning:focus{color:var(--sd-color-warning-text) !important;background-color:var(--sd-color-warning-highlight) !important;border-color:var(--sd-color-warning-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-warning{color:var(--sd-color-warning) !important;border-color:var(--sd-color-warning) !important;border-width:1px !important;border-style:solid !important}.sd-btn-danger,.sd-btn-outline-danger:hover,.sd-btn-outline-danger:focus{color:var(--sd-color-danger-text) !important;background-color:var(--sd-color-danger) !important;border-color:var(--sd-color-danger) !important;border-width:1px !important;border-style:solid !important}.sd-btn-danger:hover,.sd-btn-danger:focus{color:var(--sd-color-danger-text) !important;background-color:var(--sd-color-danger-highlight) !important;border-color:var(--sd-color-danger-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-danger{color:var(--sd-color-danger) !important;border-color:var(--sd-color-danger) !important;border-width:1px !important;border-style:solid !important}.sd-btn-light,.sd-btn-outline-light:hover,.sd-btn-outline-light:focus{color:var(--sd-color-light-text) !important;background-color:var(--sd-color-light) !important;border-color:var(--sd-color-light) !important;border-width:1px !important;border-style:solid !important}.sd-btn-light:hover,.sd-btn-light:focus{color:var(--sd-color-light-text) !important;background-color:var(--sd-color-light-highlight) !important;border-color:var(--sd-color-light-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-light{color:var(--sd-color-light) !important;border-color:var(--sd-color-light) !important;border-width:1px !important;border-style:solid !important}.sd-btn-muted,.sd-btn-outline-muted:hover,.sd-btn-outline-muted:focus{color:var(--sd-color-muted-text) !important;background-color:var(--sd-color-muted) !important;border-color:var(--sd-color-muted) !important;border-width:1px !important;border-style:solid !important}.sd-btn-muted:hover,.sd-btn-muted:focus{color:var(--sd-color-muted-text) !important;background-color:var(--sd-color-muted-highlight) !important;border-color:var(--sd-color-muted-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-muted{color:var(--sd-color-muted) !important;border-color:var(--sd-color-muted) !important;border-width:1px !important;border-style:solid !important}.sd-btn-dark,.sd-btn-outline-dark:hover,.sd-btn-outline-dark:focus{color:var(--sd-color-dark-text) !important;background-color:var(--sd-color-dark) !important;border-color:var(--sd-color-dark) !important;border-width:1px !important;border-style:solid !important}.sd-btn-dark:hover,.sd-btn-dark:focus{color:var(--sd-color-dark-text) !important;background-color:var(--sd-color-dark-highlight) !important;border-color:var(--sd-color-dark-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-dark{color:var(--sd-color-dark) !important;border-color:var(--sd-color-dark) !important;border-width:1px !important;border-style:solid !important}.sd-btn-black,.sd-btn-outline-black:hover,.sd-btn-outline-black:focus{color:var(--sd-color-black-text) !important;background-color:var(--sd-color-black) !important;border-color:var(--sd-color-black) !important;border-width:1px !important;border-style:solid !important}.sd-btn-black:hover,.sd-btn-black:focus{color:var(--sd-color-black-text) !important;background-color:var(--sd-color-black-highlight) !important;border-color:var(--sd-color-black-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-black{color:var(--sd-color-black) !important;border-color:var(--sd-color-black) !important;border-width:1px !important;border-style:solid !important}.sd-btn-white,.sd-btn-outline-white:hover,.sd-btn-outline-white:focus{color:var(--sd-color-white-text) !important;background-color:var(--sd-color-white) !important;border-color:var(--sd-color-white) !important;border-width:1px !important;border-style:solid !important}.sd-btn-white:hover,.sd-btn-white:focus{color:var(--sd-color-white-text) !important;background-color:var(--sd-color-white-highlight) !important;border-color:var(--sd-color-white-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-white{color:var(--sd-color-white) !important;border-color:var(--sd-color-white) !important;border-width:1px !important;border-style:solid !important}.sd-stretched-link::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;content:""}.sd-hide-link-text{font-size:0}.sd-octicon,.sd-material-icon{display:inline-block;fill:currentColor;vertical-align:middle}.sd-avatar-xs{border-radius:50%;object-fit:cover;object-position:center;width:1rem;height:1rem}.sd-avatar-sm{border-radius:50%;object-fit:cover;object-position:center;width:3rem;height:3rem}.sd-avatar-md{border-radius:50%;object-fit:cover;object-position:center;width:5rem;height:5rem}.sd-avatar-lg{border-radius:50%;object-fit:cover;object-position:center;width:7rem;height:7rem}.sd-avatar-xl{border-radius:50%;object-fit:cover;object-position:center;width:10rem;height:10rem}.sd-avatar-inherit{border-radius:50%;object-fit:cover;object-position:center;width:inherit;height:inherit}.sd-avatar-initial{border-radius:50%;object-fit:cover;object-position:center;width:initial;height:initial}.sd-card{background-clip:border-box;background-color:var(--sd-color-card-background);border:1px solid var(--sd-color-card-border);border-radius:.25rem;color:var(--sd-color-card-text);display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;min-width:0;position:relative;word-wrap:break-word}.sd-card>hr{margin-left:0;margin-right:0}.sd-card-hover:hover{border-color:var(--sd-color-card-border-hover);transform:scale(1.01)}.sd-card-body{-ms-flex:1 1 auto;flex:1 1 auto;padding:1rem 1rem}.sd-card-title{margin-bottom:.5rem}.sd-card-subtitle{margin-top:-0.25rem;margin-bottom:0}.sd-card-text:last-child{margin-bottom:0}.sd-card-link:hover{text-decoration:none}.sd-card-link+.card-link{margin-left:1rem}.sd-card-header{padding:.5rem 1rem;margin-bottom:0;background-color:var(--sd-color-card-header);border-bottom:1px solid var(--sd-color-card-border)}.sd-card-header:first-child{border-radius:calc(0.25rem - 1px) calc(0.25rem - 1px) 0 0}.sd-card-footer{padding:.5rem 1rem;background-color:var(--sd-color-card-footer);border-top:1px solid var(--sd-color-card-border)}.sd-card-footer:last-child{border-radius:0 0 calc(0.25rem - 1px) calc(0.25rem - 1px)}.sd-card-header-tabs{margin-right:-0.5rem;margin-bottom:-0.5rem;margin-left:-0.5rem;border-bottom:0}.sd-card-header-pills{margin-right:-0.5rem;margin-left:-0.5rem}.sd-card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1rem;border-radius:calc(0.25rem - 1px)}.sd-card-img,.sd-card-img-bottom,.sd-card-img-top{width:100%}.sd-card-img,.sd-card-img-top{border-top-left-radius:calc(0.25rem - 1px);border-top-right-radius:calc(0.25rem - 1px)}.sd-card-img,.sd-card-img-bottom{border-bottom-left-radius:calc(0.25rem - 1px);border-bottom-right-radius:calc(0.25rem - 1px)}.sd-cards-carousel{width:100%;display:flex;flex-wrap:nowrap;-ms-flex-direction:row;flex-direction:row;overflow-x:hidden;scroll-snap-type:x mandatory}.sd-cards-carousel.sd-show-scrollbar{overflow-x:auto}.sd-cards-carousel:hover,.sd-cards-carousel:focus{overflow-x:auto}.sd-cards-carousel>.sd-card{flex-shrink:0;scroll-snap-align:start}.sd-cards-carousel>.sd-card:not(:last-child){margin-right:3px}.sd-card-cols-1>.sd-card{width:90%}.sd-card-cols-2>.sd-card{width:45%}.sd-card-cols-3>.sd-card{width:30%}.sd-card-cols-4>.sd-card{width:22.5%}.sd-card-cols-5>.sd-card{width:18%}.sd-card-cols-6>.sd-card{width:15%}.sd-card-cols-7>.sd-card{width:12.8571428571%}.sd-card-cols-8>.sd-card{width:11.25%}.sd-card-cols-9>.sd-card{width:10%}.sd-card-cols-10>.sd-card{width:9%}.sd-card-cols-11>.sd-card{width:8.1818181818%}.sd-card-cols-12>.sd-card{width:7.5%}.sd-container,.sd-container-fluid,.sd-container-lg,.sd-container-md,.sd-container-sm,.sd-container-xl{margin-left:auto;margin-right:auto;padding-left:var(--sd-gutter-x, 0.75rem);padding-right:var(--sd-gutter-x, 0.75rem);width:100%}@media(min-width: 576px){.sd-container-sm,.sd-container{max-width:540px}}@media(min-width: 768px){.sd-container-md,.sd-container-sm,.sd-container{max-width:720px}}@media(min-width: 992px){.sd-container-lg,.sd-container-md,.sd-container-sm,.sd-container{max-width:960px}}@media(min-width: 1200px){.sd-container-xl,.sd-container-lg,.sd-container-md,.sd-container-sm,.sd-container{max-width:1140px}}.sd-row{--sd-gutter-x: 1.5rem;--sd-gutter-y: 0;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-top:calc(var(--sd-gutter-y) * -1);margin-right:calc(var(--sd-gutter-x) * -0.5);margin-left:calc(var(--sd-gutter-x) * -0.5)}.sd-row>*{box-sizing:border-box;flex-shrink:0;width:100%;max-width:100%;padding-right:calc(var(--sd-gutter-x) * 0.5);padding-left:calc(var(--sd-gutter-x) * 0.5);margin-top:var(--sd-gutter-y)}.sd-col{flex:1 0 0%;-ms-flex:1 0 0%}.sd-row-cols-auto>*{flex:0 0 auto;width:auto}.sd-row-cols-1>*{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-row-cols-2>*{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-row-cols-3>*{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-row-cols-4>*{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-row-cols-5>*{flex:0 0 auto;-ms-flex:0 0 auto;width:20%}.sd-row-cols-6>*{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-row-cols-7>*{flex:0 0 auto;-ms-flex:0 0 auto;width:14.2857142857%}.sd-row-cols-8>*{flex:0 0 auto;-ms-flex:0 0 auto;width:12.5%}.sd-row-cols-9>*{flex:0 0 auto;-ms-flex:0 0 auto;width:11.1111111111%}.sd-row-cols-10>*{flex:0 0 auto;-ms-flex:0 0 auto;width:10%}.sd-row-cols-11>*{flex:0 0 auto;-ms-flex:0 0 auto;width:9.0909090909%}.sd-row-cols-12>*{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}@media(min-width: 576px){.sd-col-sm{flex:1 0 0%;-ms-flex:1 0 0%}.sd-row-cols-sm-auto{flex:1 0 auto;-ms-flex:1 0 auto;width:100%}.sd-row-cols-sm-1>*{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-row-cols-sm-2>*{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-row-cols-sm-3>*{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-row-cols-sm-4>*{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-row-cols-sm-5>*{flex:0 0 auto;-ms-flex:0 0 auto;width:20%}.sd-row-cols-sm-6>*{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-row-cols-sm-7>*{flex:0 0 auto;-ms-flex:0 0 auto;width:14.2857142857%}.sd-row-cols-sm-8>*{flex:0 0 auto;-ms-flex:0 0 auto;width:12.5%}.sd-row-cols-sm-9>*{flex:0 0 auto;-ms-flex:0 0 auto;width:11.1111111111%}.sd-row-cols-sm-10>*{flex:0 0 auto;-ms-flex:0 0 auto;width:10%}.sd-row-cols-sm-11>*{flex:0 0 auto;-ms-flex:0 0 auto;width:9.0909090909%}.sd-row-cols-sm-12>*{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}}@media(min-width: 768px){.sd-col-md{flex:1 0 0%;-ms-flex:1 0 0%}.sd-row-cols-md-auto{flex:1 0 auto;-ms-flex:1 0 auto;width:100%}.sd-row-cols-md-1>*{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-row-cols-md-2>*{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-row-cols-md-3>*{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-row-cols-md-4>*{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-row-cols-md-5>*{flex:0 0 auto;-ms-flex:0 0 auto;width:20%}.sd-row-cols-md-6>*{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-row-cols-md-7>*{flex:0 0 auto;-ms-flex:0 0 auto;width:14.2857142857%}.sd-row-cols-md-8>*{flex:0 0 auto;-ms-flex:0 0 auto;width:12.5%}.sd-row-cols-md-9>*{flex:0 0 auto;-ms-flex:0 0 auto;width:11.1111111111%}.sd-row-cols-md-10>*{flex:0 0 auto;-ms-flex:0 0 auto;width:10%}.sd-row-cols-md-11>*{flex:0 0 auto;-ms-flex:0 0 auto;width:9.0909090909%}.sd-row-cols-md-12>*{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}}@media(min-width: 992px){.sd-col-lg{flex:1 0 0%;-ms-flex:1 0 0%}.sd-row-cols-lg-auto{flex:1 0 auto;-ms-flex:1 0 auto;width:100%}.sd-row-cols-lg-1>*{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-row-cols-lg-2>*{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-row-cols-lg-3>*{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-row-cols-lg-4>*{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-row-cols-lg-5>*{flex:0 0 auto;-ms-flex:0 0 auto;width:20%}.sd-row-cols-lg-6>*{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-row-cols-lg-7>*{flex:0 0 auto;-ms-flex:0 0 auto;width:14.2857142857%}.sd-row-cols-lg-8>*{flex:0 0 auto;-ms-flex:0 0 auto;width:12.5%}.sd-row-cols-lg-9>*{flex:0 0 auto;-ms-flex:0 0 auto;width:11.1111111111%}.sd-row-cols-lg-10>*{flex:0 0 auto;-ms-flex:0 0 auto;width:10%}.sd-row-cols-lg-11>*{flex:0 0 auto;-ms-flex:0 0 auto;width:9.0909090909%}.sd-row-cols-lg-12>*{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}}@media(min-width: 1200px){.sd-col-xl{flex:1 0 0%;-ms-flex:1 0 0%}.sd-row-cols-xl-auto{flex:1 0 auto;-ms-flex:1 0 auto;width:100%}.sd-row-cols-xl-1>*{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-row-cols-xl-2>*{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-row-cols-xl-3>*{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-row-cols-xl-4>*{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-row-cols-xl-5>*{flex:0 0 auto;-ms-flex:0 0 auto;width:20%}.sd-row-cols-xl-6>*{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-row-cols-xl-7>*{flex:0 0 auto;-ms-flex:0 0 auto;width:14.2857142857%}.sd-row-cols-xl-8>*{flex:0 0 auto;-ms-flex:0 0 auto;width:12.5%}.sd-row-cols-xl-9>*{flex:0 0 auto;-ms-flex:0 0 auto;width:11.1111111111%}.sd-row-cols-xl-10>*{flex:0 0 auto;-ms-flex:0 0 auto;width:10%}.sd-row-cols-xl-11>*{flex:0 0 auto;-ms-flex:0 0 auto;width:9.0909090909%}.sd-row-cols-xl-12>*{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}}.sd-col-auto{flex:0 0 auto;-ms-flex:0 0 auto;width:auto}.sd-col-1{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}.sd-col-2{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-col-3{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-col-4{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-col-5{flex:0 0 auto;-ms-flex:0 0 auto;width:41.6666666667%}.sd-col-6{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-col-7{flex:0 0 auto;-ms-flex:0 0 auto;width:58.3333333333%}.sd-col-8{flex:0 0 auto;-ms-flex:0 0 auto;width:66.6666666667%}.sd-col-9{flex:0 0 auto;-ms-flex:0 0 auto;width:75%}.sd-col-10{flex:0 0 auto;-ms-flex:0 0 auto;width:83.3333333333%}.sd-col-11{flex:0 0 auto;-ms-flex:0 0 auto;width:91.6666666667%}.sd-col-12{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-g-0,.sd-gy-0{--sd-gutter-y: 0}.sd-g-0,.sd-gx-0{--sd-gutter-x: 0}.sd-g-1,.sd-gy-1{--sd-gutter-y: 0.25rem}.sd-g-1,.sd-gx-1{--sd-gutter-x: 0.25rem}.sd-g-2,.sd-gy-2{--sd-gutter-y: 0.5rem}.sd-g-2,.sd-gx-2{--sd-gutter-x: 0.5rem}.sd-g-3,.sd-gy-3{--sd-gutter-y: 1rem}.sd-g-3,.sd-gx-3{--sd-gutter-x: 1rem}.sd-g-4,.sd-gy-4{--sd-gutter-y: 1.5rem}.sd-g-4,.sd-gx-4{--sd-gutter-x: 1.5rem}.sd-g-5,.sd-gy-5{--sd-gutter-y: 3rem}.sd-g-5,.sd-gx-5{--sd-gutter-x: 3rem}@media(min-width: 576px){.sd-col-sm-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.sd-col-sm-1{-ms-flex:0 0 auto;flex:0 0 auto;width:8.3333333333%}.sd-col-sm-2{-ms-flex:0 0 auto;flex:0 0 auto;width:16.6666666667%}.sd-col-sm-3{-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.sd-col-sm-4{-ms-flex:0 0 auto;flex:0 0 auto;width:33.3333333333%}.sd-col-sm-5{-ms-flex:0 0 auto;flex:0 0 auto;width:41.6666666667%}.sd-col-sm-6{-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.sd-col-sm-7{-ms-flex:0 0 auto;flex:0 0 auto;width:58.3333333333%}.sd-col-sm-8{-ms-flex:0 0 auto;flex:0 0 auto;width:66.6666666667%}.sd-col-sm-9{-ms-flex:0 0 auto;flex:0 0 auto;width:75%}.sd-col-sm-10{-ms-flex:0 0 auto;flex:0 0 auto;width:83.3333333333%}.sd-col-sm-11{-ms-flex:0 0 auto;flex:0 0 auto;width:91.6666666667%}.sd-col-sm-12{-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.sd-g-sm-0,.sd-gy-sm-0{--sd-gutter-y: 0}.sd-g-sm-0,.sd-gx-sm-0{--sd-gutter-x: 0}.sd-g-sm-1,.sd-gy-sm-1{--sd-gutter-y: 0.25rem}.sd-g-sm-1,.sd-gx-sm-1{--sd-gutter-x: 0.25rem}.sd-g-sm-2,.sd-gy-sm-2{--sd-gutter-y: 0.5rem}.sd-g-sm-2,.sd-gx-sm-2{--sd-gutter-x: 0.5rem}.sd-g-sm-3,.sd-gy-sm-3{--sd-gutter-y: 1rem}.sd-g-sm-3,.sd-gx-sm-3{--sd-gutter-x: 1rem}.sd-g-sm-4,.sd-gy-sm-4{--sd-gutter-y: 1.5rem}.sd-g-sm-4,.sd-gx-sm-4{--sd-gutter-x: 1.5rem}.sd-g-sm-5,.sd-gy-sm-5{--sd-gutter-y: 3rem}.sd-g-sm-5,.sd-gx-sm-5{--sd-gutter-x: 3rem}}@media(min-width: 768px){.sd-col-md-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.sd-col-md-1{-ms-flex:0 0 auto;flex:0 0 auto;width:8.3333333333%}.sd-col-md-2{-ms-flex:0 0 auto;flex:0 0 auto;width:16.6666666667%}.sd-col-md-3{-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.sd-col-md-4{-ms-flex:0 0 auto;flex:0 0 auto;width:33.3333333333%}.sd-col-md-5{-ms-flex:0 0 auto;flex:0 0 auto;width:41.6666666667%}.sd-col-md-6{-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.sd-col-md-7{-ms-flex:0 0 auto;flex:0 0 auto;width:58.3333333333%}.sd-col-md-8{-ms-flex:0 0 auto;flex:0 0 auto;width:66.6666666667%}.sd-col-md-9{-ms-flex:0 0 auto;flex:0 0 auto;width:75%}.sd-col-md-10{-ms-flex:0 0 auto;flex:0 0 auto;width:83.3333333333%}.sd-col-md-11{-ms-flex:0 0 auto;flex:0 0 auto;width:91.6666666667%}.sd-col-md-12{-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.sd-g-md-0,.sd-gy-md-0{--sd-gutter-y: 0}.sd-g-md-0,.sd-gx-md-0{--sd-gutter-x: 0}.sd-g-md-1,.sd-gy-md-1{--sd-gutter-y: 0.25rem}.sd-g-md-1,.sd-gx-md-1{--sd-gutter-x: 0.25rem}.sd-g-md-2,.sd-gy-md-2{--sd-gutter-y: 0.5rem}.sd-g-md-2,.sd-gx-md-2{--sd-gutter-x: 0.5rem}.sd-g-md-3,.sd-gy-md-3{--sd-gutter-y: 1rem}.sd-g-md-3,.sd-gx-md-3{--sd-gutter-x: 1rem}.sd-g-md-4,.sd-gy-md-4{--sd-gutter-y: 1.5rem}.sd-g-md-4,.sd-gx-md-4{--sd-gutter-x: 1.5rem}.sd-g-md-5,.sd-gy-md-5{--sd-gutter-y: 3rem}.sd-g-md-5,.sd-gx-md-5{--sd-gutter-x: 3rem}}@media(min-width: 992px){.sd-col-lg-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.sd-col-lg-1{-ms-flex:0 0 auto;flex:0 0 auto;width:8.3333333333%}.sd-col-lg-2{-ms-flex:0 0 auto;flex:0 0 auto;width:16.6666666667%}.sd-col-lg-3{-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.sd-col-lg-4{-ms-flex:0 0 auto;flex:0 0 auto;width:33.3333333333%}.sd-col-lg-5{-ms-flex:0 0 auto;flex:0 0 auto;width:41.6666666667%}.sd-col-lg-6{-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.sd-col-lg-7{-ms-flex:0 0 auto;flex:0 0 auto;width:58.3333333333%}.sd-col-lg-8{-ms-flex:0 0 auto;flex:0 0 auto;width:66.6666666667%}.sd-col-lg-9{-ms-flex:0 0 auto;flex:0 0 auto;width:75%}.sd-col-lg-10{-ms-flex:0 0 auto;flex:0 0 auto;width:83.3333333333%}.sd-col-lg-11{-ms-flex:0 0 auto;flex:0 0 auto;width:91.6666666667%}.sd-col-lg-12{-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.sd-g-lg-0,.sd-gy-lg-0{--sd-gutter-y: 0}.sd-g-lg-0,.sd-gx-lg-0{--sd-gutter-x: 0}.sd-g-lg-1,.sd-gy-lg-1{--sd-gutter-y: 0.25rem}.sd-g-lg-1,.sd-gx-lg-1{--sd-gutter-x: 0.25rem}.sd-g-lg-2,.sd-gy-lg-2{--sd-gutter-y: 0.5rem}.sd-g-lg-2,.sd-gx-lg-2{--sd-gutter-x: 0.5rem}.sd-g-lg-3,.sd-gy-lg-3{--sd-gutter-y: 1rem}.sd-g-lg-3,.sd-gx-lg-3{--sd-gutter-x: 1rem}.sd-g-lg-4,.sd-gy-lg-4{--sd-gutter-y: 1.5rem}.sd-g-lg-4,.sd-gx-lg-4{--sd-gutter-x: 1.5rem}.sd-g-lg-5,.sd-gy-lg-5{--sd-gutter-y: 3rem}.sd-g-lg-5,.sd-gx-lg-5{--sd-gutter-x: 3rem}}@media(min-width: 1200px){.sd-col-xl-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.sd-col-xl-1{-ms-flex:0 0 auto;flex:0 0 auto;width:8.3333333333%}.sd-col-xl-2{-ms-flex:0 0 auto;flex:0 0 auto;width:16.6666666667%}.sd-col-xl-3{-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.sd-col-xl-4{-ms-flex:0 0 auto;flex:0 0 auto;width:33.3333333333%}.sd-col-xl-5{-ms-flex:0 0 auto;flex:0 0 auto;width:41.6666666667%}.sd-col-xl-6{-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.sd-col-xl-7{-ms-flex:0 0 auto;flex:0 0 auto;width:58.3333333333%}.sd-col-xl-8{-ms-flex:0 0 auto;flex:0 0 auto;width:66.6666666667%}.sd-col-xl-9{-ms-flex:0 0 auto;flex:0 0 auto;width:75%}.sd-col-xl-10{-ms-flex:0 0 auto;flex:0 0 auto;width:83.3333333333%}.sd-col-xl-11{-ms-flex:0 0 auto;flex:0 0 auto;width:91.6666666667%}.sd-col-xl-12{-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.sd-g-xl-0,.sd-gy-xl-0{--sd-gutter-y: 0}.sd-g-xl-0,.sd-gx-xl-0{--sd-gutter-x: 0}.sd-g-xl-1,.sd-gy-xl-1{--sd-gutter-y: 0.25rem}.sd-g-xl-1,.sd-gx-xl-1{--sd-gutter-x: 0.25rem}.sd-g-xl-2,.sd-gy-xl-2{--sd-gutter-y: 0.5rem}.sd-g-xl-2,.sd-gx-xl-2{--sd-gutter-x: 0.5rem}.sd-g-xl-3,.sd-gy-xl-3{--sd-gutter-y: 1rem}.sd-g-xl-3,.sd-gx-xl-3{--sd-gutter-x: 1rem}.sd-g-xl-4,.sd-gy-xl-4{--sd-gutter-y: 1.5rem}.sd-g-xl-4,.sd-gx-xl-4{--sd-gutter-x: 1.5rem}.sd-g-xl-5,.sd-gy-xl-5{--sd-gutter-y: 3rem}.sd-g-xl-5,.sd-gx-xl-5{--sd-gutter-x: 3rem}}.sd-flex-row-reverse{flex-direction:row-reverse !important}details.sd-dropdown{position:relative;font-size:var(--sd-fontsize-dropdown)}details.sd-dropdown:hover{cursor:pointer}details.sd-dropdown .sd-summary-content{cursor:default}details.sd-dropdown summary.sd-summary-title{padding:.5em 1em;font-size:var(--sd-fontsize-dropdown-title);font-weight:var(--sd-fontweight-dropdown-title);user-select:none;-moz-user-select:none;-ms-user-select:none;-webkit-user-select:none;list-style:none;display:inline-flex;justify-content:space-between}details.sd-dropdown summary.sd-summary-title::-webkit-details-marker{display:none}details.sd-dropdown summary.sd-summary-title:focus{outline:none}details.sd-dropdown summary.sd-summary-title .sd-summary-icon{margin-right:.6em;display:inline-flex;align-items:center}details.sd-dropdown summary.sd-summary-title .sd-summary-icon svg{opacity:.8}details.sd-dropdown summary.sd-summary-title .sd-summary-text{flex-grow:1;line-height:1.5;padding-right:.5rem}details.sd-dropdown summary.sd-summary-title .sd-summary-state-marker{pointer-events:none;display:inline-flex;align-items:center}details.sd-dropdown summary.sd-summary-title .sd-summary-state-marker svg{opacity:.6}details.sd-dropdown summary.sd-summary-title:hover .sd-summary-state-marker svg{opacity:1;transform:scale(1.1)}details.sd-dropdown[open] summary .sd-octicon.no-title{visibility:hidden}details.sd-dropdown .sd-summary-chevron-right{transition:.25s}details.sd-dropdown[open]>.sd-summary-title .sd-summary-chevron-right{transform:rotate(90deg)}details.sd-dropdown[open]>.sd-summary-title .sd-summary-chevron-down{transform:rotate(180deg)}details.sd-dropdown:not([open]).sd-card{border:none}details.sd-dropdown:not([open])>.sd-card-header{border:1px solid var(--sd-color-card-border);border-radius:.25rem}details.sd-dropdown.sd-fade-in[open] summary~*{-moz-animation:sd-fade-in .5s ease-in-out;-webkit-animation:sd-fade-in .5s ease-in-out;animation:sd-fade-in .5s ease-in-out}details.sd-dropdown.sd-fade-in-slide-down[open] summary~*{-moz-animation:sd-fade-in .5s ease-in-out,sd-slide-down .5s ease-in-out;-webkit-animation:sd-fade-in .5s ease-in-out,sd-slide-down .5s ease-in-out;animation:sd-fade-in .5s ease-in-out,sd-slide-down .5s ease-in-out}.sd-col>.sd-dropdown{width:100%}.sd-summary-content>.sd-tab-set:first-child{margin-top:0}@keyframes sd-fade-in{0%{opacity:0}100%{opacity:1}}@keyframes sd-slide-down{0%{transform:translate(0, -10px)}100%{transform:translate(0, 0)}}.sd-tab-set{border-radius:.125rem;display:flex;flex-wrap:wrap;margin:1em 0;position:relative}.sd-tab-set>input{opacity:0;position:absolute}.sd-tab-set>input:checked+label{border-color:var(--sd-color-tabs-underline-active);color:var(--sd-color-tabs-label-active)}.sd-tab-set>input:checked+label+.sd-tab-content{display:block}.sd-tab-set>input:not(:checked)+label:hover{color:var(--sd-color-tabs-label-hover);border-color:var(--sd-color-tabs-underline-hover)}.sd-tab-set>input:focus+label{outline-style:auto}.sd-tab-set>input:not(.focus-visible)+label{outline:none;-webkit-tap-highlight-color:transparent}.sd-tab-set>label{border-bottom:.125rem solid transparent;margin-bottom:0;color:var(--sd-color-tabs-label-inactive);border-color:var(--sd-color-tabs-underline-inactive);cursor:pointer;font-size:var(--sd-fontsize-tabs-label);font-weight:700;padding:1em 1.25em .5em;transition:color 250ms;width:auto;z-index:1}html .sd-tab-set>label:hover{color:var(--sd-color-tabs-label-active)}.sd-col>.sd-tab-set{width:100%}.sd-tab-content{box-shadow:0 -0.0625rem var(--sd-color-tabs-overline),0 .0625rem var(--sd-color-tabs-underline);display:none;order:99;padding-bottom:.75rem;padding-top:.75rem;width:100%}.sd-tab-content>:first-child{margin-top:0 !important}.sd-tab-content>:last-child{margin-bottom:0 !important}.sd-tab-content>.sd-tab-set{margin:0}.sd-sphinx-override,.sd-sphinx-override *{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.sd-sphinx-override p{margin-top:0}:root{--sd-color-primary: #0071bc;--sd-color-secondary: #6c757d;--sd-color-success: #28a745;--sd-color-info: #17a2b8;--sd-color-warning: #f0b37e;--sd-color-danger: #dc3545;--sd-color-light: #f8f9fa;--sd-color-muted: #6c757d;--sd-color-dark: #212529;--sd-color-black: black;--sd-color-white: white;--sd-color-primary-highlight: #0060a0;--sd-color-secondary-highlight: #5c636a;--sd-color-success-highlight: #228e3b;--sd-color-info-highlight: #148a9c;--sd-color-warning-highlight: #cc986b;--sd-color-danger-highlight: #bb2d3b;--sd-color-light-highlight: #d3d4d5;--sd-color-muted-highlight: #5c636a;--sd-color-dark-highlight: #1c1f23;--sd-color-black-highlight: black;--sd-color-white-highlight: #d9d9d9;--sd-color-primary-bg: rgba(0, 113, 188, 0.2);--sd-color-secondary-bg: rgba(108, 117, 125, 0.2);--sd-color-success-bg: rgba(40, 167, 69, 0.2);--sd-color-info-bg: rgba(23, 162, 184, 0.2);--sd-color-warning-bg: rgba(240, 179, 126, 0.2);--sd-color-danger-bg: rgba(220, 53, 69, 0.2);--sd-color-light-bg: rgba(248, 249, 250, 0.2);--sd-color-muted-bg: rgba(108, 117, 125, 0.2);--sd-color-dark-bg: rgba(33, 37, 41, 0.2);--sd-color-black-bg: rgba(0, 0, 0, 0.2);--sd-color-white-bg: rgba(255, 255, 255, 0.2);--sd-color-primary-text: #fff;--sd-color-secondary-text: #fff;--sd-color-success-text: #fff;--sd-color-info-text: #fff;--sd-color-warning-text: #212529;--sd-color-danger-text: #fff;--sd-color-light-text: #212529;--sd-color-muted-text: #fff;--sd-color-dark-text: #fff;--sd-color-black-text: #fff;--sd-color-white-text: #212529;--sd-color-shadow: rgba(0, 0, 0, 0.15);--sd-color-card-border: rgba(0, 0, 0, 0.125);--sd-color-card-border-hover: hsla(231, 99%, 66%, 1);--sd-color-card-background: transparent;--sd-color-card-text: inherit;--sd-color-card-header: transparent;--sd-color-card-footer: transparent;--sd-color-tabs-label-active: hsla(231, 99%, 66%, 1);--sd-color-tabs-label-hover: hsla(231, 99%, 66%, 1);--sd-color-tabs-label-inactive: hsl(0, 0%, 66%);--sd-color-tabs-underline-active: hsla(231, 99%, 66%, 1);--sd-color-tabs-underline-hover: rgba(178, 206, 245, 0.62);--sd-color-tabs-underline-inactive: transparent;--sd-color-tabs-overline: rgb(222, 222, 222);--sd-color-tabs-underline: rgb(222, 222, 222);--sd-fontsize-tabs-label: 1rem;--sd-fontsize-dropdown: inherit;--sd-fontsize-dropdown-title: 1rem;--sd-fontweight-dropdown-title: 700} diff --git a/_static/autodoc_pydantic.css b/_static/autodoc_pydantic.css new file mode 100644 index 0000000..994a3e5 --- /dev/null +++ b/_static/autodoc_pydantic.css @@ -0,0 +1,11 @@ +.autodoc_pydantic_validator_arrow { + padding-left: 8px; + } + +.autodoc_pydantic_collapsable_json { + cursor: pointer; + } + +.autodoc_pydantic_collapsable_erd { + cursor: pointer; + } \ No newline at end of file diff --git a/_static/basic.css b/_static/basic.css new file mode 100644 index 0000000..30fee9d --- /dev/null +++ b/_static/basic.css @@ -0,0 +1,925 @@ +/* + * basic.css + * ~~~~~~~~~ + * + * Sphinx stylesheet -- basic theme. + * + * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +/* -- main layout ----------------------------------------------------------- */ + +div.clearer { + clear: both; +} + +div.section::after { + display: block; + content: ''; + clear: left; +} + +/* -- relbar ---------------------------------------------------------------- */ + +div.related { + width: 100%; + font-size: 90%; +} + +div.related h3 { + display: none; +} + +div.related ul { + margin: 0; + padding: 0 0 0 10px; + list-style: none; +} + +div.related li { + display: inline; +} + +div.related li.right { + float: right; + margin-right: 5px; +} + +/* -- sidebar --------------------------------------------------------------- */ + +div.sphinxsidebarwrapper { + padding: 10px 5px 0 10px; +} + +div.sphinxsidebar { + float: left; + width: 230px; + margin-left: -100%; + font-size: 90%; + word-wrap: break-word; + overflow-wrap : break-word; +} + +div.sphinxsidebar ul { + list-style: none; +} + +div.sphinxsidebar ul ul, +div.sphinxsidebar ul.want-points { + margin-left: 20px; + list-style: square; +} + +div.sphinxsidebar ul ul { + margin-top: 0; + margin-bottom: 0; +} + +div.sphinxsidebar form { + margin-top: 10px; +} + +div.sphinxsidebar input { + border: 1px solid #98dbcc; + font-family: sans-serif; + font-size: 1em; +} + +div.sphinxsidebar #searchbox form.search { + overflow: hidden; +} + +div.sphinxsidebar #searchbox input[type="text"] { + float: left; + width: 80%; + padding: 0.25em; + box-sizing: border-box; +} + +div.sphinxsidebar #searchbox input[type="submit"] { + float: left; + width: 20%; + border-left: none; + padding: 0.25em; + box-sizing: border-box; +} + + +img { + border: 0; + max-width: 100%; +} + +/* -- search page ----------------------------------------------------------- */ + +ul.search { + margin: 10px 0 0 20px; + padding: 0; +} + +ul.search li { + padding: 5px 0 5px 20px; + background-image: url(file.png); + background-repeat: no-repeat; + background-position: 0 7px; +} + +ul.search li a { + font-weight: bold; +} + +ul.search li p.context { + color: #888; + margin: 2px 0 0 30px; + text-align: left; +} + +ul.keywordmatches li.goodmatch a { + font-weight: bold; +} + +/* -- index page ------------------------------------------------------------ */ + +table.contentstable { + width: 90%; + margin-left: auto; + margin-right: auto; +} + +table.contentstable p.biglink { + line-height: 150%; +} + +a.biglink { + font-size: 1.3em; +} + +span.linkdescr { + font-style: italic; + padding-top: 5px; + font-size: 90%; +} + +/* -- general index --------------------------------------------------------- */ + +table.indextable { + width: 100%; +} + +table.indextable td { + text-align: left; + vertical-align: top; +} + +table.indextable ul { + margin-top: 0; + margin-bottom: 0; + list-style-type: none; +} + +table.indextable > tbody > tr > td > ul { + padding-left: 0em; +} + +table.indextable tr.pcap { + height: 10px; +} + +table.indextable tr.cap { + margin-top: 10px; + background-color: #f2f2f2; +} + +img.toggler { + margin-right: 3px; + margin-top: 3px; + cursor: pointer; +} + +div.modindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +div.genindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +/* -- domain module index --------------------------------------------------- */ + +table.modindextable td { + padding: 2px; + border-collapse: collapse; +} + +/* -- general body styles --------------------------------------------------- */ + +div.body { + min-width: 360px; + max-width: 800px; +} + +div.body p, div.body dd, div.body li, div.body blockquote { + -moz-hyphens: auto; + -ms-hyphens: auto; + -webkit-hyphens: auto; + hyphens: auto; +} + +a.headerlink { + visibility: hidden; +} + +a:visited { + color: #551A8B; +} + +h1:hover > a.headerlink, +h2:hover > a.headerlink, +h3:hover > a.headerlink, +h4:hover > a.headerlink, +h5:hover > a.headerlink, +h6:hover > a.headerlink, +dt:hover > a.headerlink, +caption:hover > a.headerlink, +p.caption:hover > a.headerlink, +div.code-block-caption:hover > a.headerlink { + visibility: visible; +} + +div.body p.caption { + text-align: inherit; +} + +div.body td { + text-align: left; +} + +.first { + margin-top: 0 !important; +} + +p.rubric { + margin-top: 30px; + font-weight: bold; +} + +img.align-left, figure.align-left, .figure.align-left, object.align-left { + clear: left; + float: left; + margin-right: 1em; +} + +img.align-right, figure.align-right, .figure.align-right, object.align-right { + clear: right; + float: right; + margin-left: 1em; +} + +img.align-center, figure.align-center, .figure.align-center, object.align-center { + display: block; + margin-left: auto; + margin-right: auto; +} + +img.align-default, figure.align-default, .figure.align-default { + display: block; + margin-left: auto; + margin-right: auto; +} + +.align-left { + text-align: left; +} + +.align-center { + text-align: center; +} + +.align-default { + text-align: center; +} + +.align-right { + text-align: right; +} + +/* -- sidebars -------------------------------------------------------------- */ + +div.sidebar, +aside.sidebar { + margin: 0 0 0.5em 1em; + border: 1px solid #ddb; + padding: 7px; + background-color: #ffe; + width: 40%; + float: right; + clear: right; + overflow-x: auto; +} + +p.sidebar-title { + font-weight: bold; +} + +nav.contents, +aside.topic, +div.admonition, div.topic, blockquote { + clear: left; +} + +/* -- topics ---------------------------------------------------------------- */ + +nav.contents, +aside.topic, +div.topic { + border: 1px solid #ccc; + padding: 7px; + margin: 10px 0 10px 0; +} + +p.topic-title { + font-size: 1.1em; + font-weight: bold; + margin-top: 10px; +} + +/* -- admonitions ----------------------------------------------------------- */ + +div.admonition { + margin-top: 10px; + margin-bottom: 10px; + padding: 7px; +} + +div.admonition dt { + font-weight: bold; +} + +p.admonition-title { + margin: 0px 10px 5px 0px; + font-weight: bold; +} + +div.body p.centered { + text-align: center; + margin-top: 25px; +} + +/* -- content of sidebars/topics/admonitions -------------------------------- */ + +div.sidebar > :last-child, +aside.sidebar > :last-child, +nav.contents > :last-child, +aside.topic > :last-child, +div.topic > :last-child, +div.admonition > :last-child { + margin-bottom: 0; +} + +div.sidebar::after, +aside.sidebar::after, +nav.contents::after, +aside.topic::after, +div.topic::after, +div.admonition::after, +blockquote::after { + display: block; + content: ''; + clear: both; +} + +/* -- tables ---------------------------------------------------------------- */ + +table.docutils { + margin-top: 10px; + margin-bottom: 10px; + border: 0; + border-collapse: collapse; +} + +table.align-center { + margin-left: auto; + margin-right: auto; +} + +table.align-default { + margin-left: auto; + margin-right: auto; +} + +table caption span.caption-number { + font-style: italic; +} + +table caption span.caption-text { +} + +table.docutils td, table.docutils th { + padding: 1px 8px 1px 5px; + border-top: 0; + border-left: 0; + border-right: 0; + border-bottom: 1px solid #aaa; +} + +th { + text-align: left; + padding-right: 5px; +} + +table.citation { + border-left: solid 1px gray; + margin-left: 1px; +} + +table.citation td { + border-bottom: none; +} + +th > :first-child, +td > :first-child { + margin-top: 0px; +} + +th > :last-child, +td > :last-child { + margin-bottom: 0px; +} + +/* -- figures --------------------------------------------------------------- */ + +div.figure, figure { + margin: 0.5em; + padding: 0.5em; +} + +div.figure p.caption, figcaption { + padding: 0.3em; +} + +div.figure p.caption span.caption-number, +figcaption span.caption-number { + font-style: italic; +} + +div.figure p.caption span.caption-text, +figcaption span.caption-text { +} + +/* -- field list styles ----------------------------------------------------- */ + +table.field-list td, table.field-list th { + border: 0 !important; +} + +.field-list ul { + margin: 0; + padding-left: 1em; +} + +.field-list p { + margin: 0; +} + +.field-name { + -moz-hyphens: manual; + -ms-hyphens: manual; + -webkit-hyphens: manual; + hyphens: manual; +} + +/* -- hlist styles ---------------------------------------------------------- */ + +table.hlist { + margin: 1em 0; +} + +table.hlist td { + vertical-align: top; +} + +/* -- object description styles --------------------------------------------- */ + +.sig { + font-family: 'Consolas', 'Menlo', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace; +} + +.sig-name, code.descname { + background-color: transparent; + font-weight: bold; +} + +.sig-name { + font-size: 1.1em; +} + +code.descname { + font-size: 1.2em; +} + +.sig-prename, code.descclassname { + background-color: transparent; +} + +.optional { + font-size: 1.3em; +} + +.sig-paren { + font-size: larger; +} + +.sig-param.n { + font-style: italic; +} + +/* C++ specific styling */ + +.sig-inline.c-texpr, +.sig-inline.cpp-texpr { + font-family: unset; +} + +.sig.c .k, .sig.c .kt, +.sig.cpp .k, .sig.cpp .kt { + color: #0033B3; +} + +.sig.c .m, +.sig.cpp .m { + color: #1750EB; +} + +.sig.c .s, .sig.c .sc, +.sig.cpp .s, .sig.cpp .sc { + color: #067D17; +} + + +/* -- other body styles ----------------------------------------------------- */ + +ol.arabic { + list-style: decimal; +} + +ol.loweralpha { + list-style: lower-alpha; +} + +ol.upperalpha { + list-style: upper-alpha; +} + +ol.lowerroman { + list-style: lower-roman; +} + +ol.upperroman { + list-style: upper-roman; +} + +:not(li) > ol > li:first-child > :first-child, +:not(li) > ul > li:first-child > :first-child { + margin-top: 0px; +} + +:not(li) > ol > li:last-child > :last-child, +:not(li) > ul > li:last-child > :last-child { + margin-bottom: 0px; +} + +ol.simple ol p, +ol.simple ul p, +ul.simple ol p, +ul.simple ul p { + margin-top: 0; +} + +ol.simple > li:not(:first-child) > p, +ul.simple > li:not(:first-child) > p { + margin-top: 0; +} + +ol.simple p, +ul.simple p { + margin-bottom: 0; +} + +aside.footnote > span, +div.citation > span { + float: left; +} +aside.footnote > span:last-of-type, +div.citation > span:last-of-type { + padding-right: 0.5em; +} +aside.footnote > p { + margin-left: 2em; +} +div.citation > p { + margin-left: 4em; +} +aside.footnote > p:last-of-type, +div.citation > p:last-of-type { + margin-bottom: 0em; +} +aside.footnote > p:last-of-type:after, +div.citation > p:last-of-type:after { + content: ""; + clear: both; +} + +dl.field-list { + display: grid; + grid-template-columns: fit-content(30%) auto; +} + +dl.field-list > dt { + font-weight: bold; + word-break: break-word; + padding-left: 0.5em; + padding-right: 5px; +} + +dl.field-list > dd { + padding-left: 0.5em; + margin-top: 0em; + margin-left: 0em; + margin-bottom: 0em; +} + +dl { + margin-bottom: 15px; +} + +dd > :first-child { + margin-top: 0px; +} + +dd ul, dd table { + margin-bottom: 10px; +} + +dd { + margin-top: 3px; + margin-bottom: 10px; + margin-left: 30px; +} + +.sig dd { + margin-top: 0px; + margin-bottom: 0px; +} + +.sig dl { + margin-top: 0px; + margin-bottom: 0px; +} + +dl > dd:last-child, +dl > dd:last-child > :last-child { + margin-bottom: 0; +} + +dt:target, span.highlighted { + background-color: #fbe54e; +} + +rect.highlighted { + fill: #fbe54e; +} + +dl.glossary dt { + font-weight: bold; + font-size: 1.1em; +} + +.versionmodified { + font-style: italic; +} + +.system-message { + background-color: #fda; + padding: 5px; + border: 3px solid red; +} + +.footnote:target { + background-color: #ffa; +} + +.line-block { + display: block; + margin-top: 1em; + margin-bottom: 1em; +} + +.line-block .line-block { + margin-top: 0; + margin-bottom: 0; + margin-left: 1.5em; +} + +.guilabel, .menuselection { + font-family: sans-serif; +} + +.accelerator { + text-decoration: underline; +} + +.classifier { + font-style: oblique; +} + +.classifier:before { + font-style: normal; + margin: 0 0.5em; + content: ":"; + display: inline-block; +} + +abbr, acronym { + border-bottom: dotted 1px; + cursor: help; +} + +.translated { + background-color: rgba(207, 255, 207, 0.2) +} + +.untranslated { + background-color: rgba(255, 207, 207, 0.2) +} + +/* -- code displays --------------------------------------------------------- */ + +pre { + overflow: auto; + overflow-y: hidden; /* fixes display issues on Chrome browsers */ +} + +pre, div[class*="highlight-"] { + clear: both; +} + +span.pre { + -moz-hyphens: none; + -ms-hyphens: none; + -webkit-hyphens: none; + hyphens: none; + white-space: nowrap; +} + +div[class*="highlight-"] { + margin: 1em 0; +} + +td.linenos pre { + border: 0; + background-color: transparent; + color: #aaa; +} + +table.highlighttable { + display: block; +} + +table.highlighttable tbody { + display: block; +} + +table.highlighttable tr { + display: flex; +} + +table.highlighttable td { + margin: 0; + padding: 0; +} + +table.highlighttable td.linenos { + padding-right: 0.5em; +} + +table.highlighttable td.code { + flex: 1; + overflow: hidden; +} + +.highlight .hll { + display: block; +} + +div.highlight pre, +table.highlighttable pre { + margin: 0; +} + +div.code-block-caption + div { + margin-top: 0; +} + +div.code-block-caption { + margin-top: 1em; + padding: 2px 5px; + font-size: small; +} + +div.code-block-caption code { + background-color: transparent; +} + +table.highlighttable td.linenos, +span.linenos, +div.highlight span.gp { /* gp: Generic.Prompt */ + user-select: none; + -webkit-user-select: text; /* Safari fallback only */ + -webkit-user-select: none; /* Chrome/Safari */ + -moz-user-select: none; /* Firefox */ + -ms-user-select: none; /* IE10+ */ +} + +div.code-block-caption span.caption-number { + padding: 0.1em 0.3em; + font-style: italic; +} + +div.code-block-caption span.caption-text { +} + +div.literal-block-wrapper { + margin: 1em 0; +} + +code.xref, a code { + background-color: transparent; + font-weight: bold; +} + +h1 code, h2 code, h3 code, h4 code, h5 code, h6 code { + background-color: transparent; +} + +.viewcode-link { + float: right; +} + +.viewcode-back { + float: right; + font-family: sans-serif; +} + +div.viewcode-block:target { + margin: -1px -10px; + padding: 0 10px; +} + +/* -- math display ---------------------------------------------------------- */ + +img.math { + vertical-align: middle; +} + +div.body div.math p { + text-align: center; +} + +span.eqno { + float: right; +} + +span.eqno a.headerlink { + position: absolute; + z-index: 1; +} + +div.math:hover a.headerlink { + visibility: visible; +} + +/* -- printout stylesheet --------------------------------------------------- */ + +@media print { + div.document, + div.documentwrapper, + div.bodywrapper { + margin: 0 !important; + width: 100%; + } + + div.sphinxsidebar, + div.related, + div.footer, + #top-link { + display: none; + } +} \ No newline at end of file diff --git a/_static/check-solid.svg b/_static/check-solid.svg new file mode 100644 index 0000000..92fad4b --- /dev/null +++ b/_static/check-solid.svg @@ -0,0 +1,4 @@ + + + + diff --git a/_static/clipboard.min.js b/_static/clipboard.min.js new file mode 100644 index 0000000..54b3c46 --- /dev/null +++ b/_static/clipboard.min.js @@ -0,0 +1,7 @@ +/*! + * clipboard.js v2.0.8 + * https://clipboardjs.com/ + * + * Licensed MIT © Zeno Rocha + */ +!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.ClipboardJS=e():t.ClipboardJS=e()}(this,function(){return n={686:function(t,e,n){"use strict";n.d(e,{default:function(){return o}});var e=n(279),i=n.n(e),e=n(370),u=n.n(e),e=n(817),c=n.n(e);function a(t){try{return document.execCommand(t)}catch(t){return}}var f=function(t){t=c()(t);return a("cut"),t};var l=function(t){var e,n,o,r=1 + + + + diff --git a/_static/copybutton.css b/_static/copybutton.css new file mode 100644 index 0000000..f1916ec --- /dev/null +++ b/_static/copybutton.css @@ -0,0 +1,94 @@ +/* Copy buttons */ +button.copybtn { + position: absolute; + display: flex; + top: .3em; + right: .3em; + width: 1.7em; + height: 1.7em; + opacity: 0; + transition: opacity 0.3s, border .3s, background-color .3s; + user-select: none; + padding: 0; + border: none; + outline: none; + border-radius: 0.4em; + /* The colors that GitHub uses */ + border: #1b1f2426 1px solid; + background-color: #f6f8fa; + color: #57606a; +} + +button.copybtn.success { + border-color: #22863a; + color: #22863a; +} + +button.copybtn svg { + stroke: currentColor; + width: 1.5em; + height: 1.5em; + padding: 0.1em; +} + +div.highlight { + position: relative; +} + +/* Show the copybutton */ +.highlight:hover button.copybtn, button.copybtn.success { + opacity: 1; +} + +.highlight button.copybtn:hover { + background-color: rgb(235, 235, 235); +} + +.highlight button.copybtn:active { + background-color: rgb(187, 187, 187); +} + +/** + * A minimal CSS-only tooltip copied from: + * https://codepen.io/mildrenben/pen/rVBrpK + * + * To use, write HTML like the following: + * + *

Short

+ */ + .o-tooltip--left { + position: relative; + } + + .o-tooltip--left:after { + opacity: 0; + visibility: hidden; + position: absolute; + content: attr(data-tooltip); + padding: .2em; + font-size: .8em; + left: -.2em; + background: grey; + color: white; + white-space: nowrap; + z-index: 2; + border-radius: 2px; + transform: translateX(-102%) translateY(0); + transition: opacity 0.2s cubic-bezier(0.64, 0.09, 0.08, 1), transform 0.2s cubic-bezier(0.64, 0.09, 0.08, 1); +} + +.o-tooltip--left:hover:after { + display: block; + opacity: 1; + visibility: visible; + transform: translateX(-100%) translateY(0); + transition: opacity 0.2s cubic-bezier(0.64, 0.09, 0.08, 1), transform 0.2s cubic-bezier(0.64, 0.09, 0.08, 1); + transition-delay: .5s; +} + +/* By default the copy button shouldn't show up when printing a page */ +@media print { + button.copybtn { + display: none; + } +} diff --git a/_static/copybutton.js b/_static/copybutton.js new file mode 100644 index 0000000..2ea7ff3 --- /dev/null +++ b/_static/copybutton.js @@ -0,0 +1,248 @@ +// Localization support +const messages = { + 'en': { + 'copy': 'Copy', + 'copy_to_clipboard': 'Copy to clipboard', + 'copy_success': 'Copied!', + 'copy_failure': 'Failed to copy', + }, + 'es' : { + 'copy': 'Copiar', + 'copy_to_clipboard': 'Copiar al portapapeles', + 'copy_success': '¡Copiado!', + 'copy_failure': 'Error al copiar', + }, + 'de' : { + 'copy': 'Kopieren', + 'copy_to_clipboard': 'In die Zwischenablage kopieren', + 'copy_success': 'Kopiert!', + 'copy_failure': 'Fehler beim Kopieren', + }, + 'fr' : { + 'copy': 'Copier', + 'copy_to_clipboard': 'Copier dans le presse-papier', + 'copy_success': 'Copié !', + 'copy_failure': 'Échec de la copie', + }, + 'ru': { + 'copy': 'Скопировать', + 'copy_to_clipboard': 'Скопировать в буфер', + 'copy_success': 'Скопировано!', + 'copy_failure': 'Не удалось скопировать', + }, + 'zh-CN': { + 'copy': '复制', + 'copy_to_clipboard': '复制到剪贴板', + 'copy_success': '复制成功!', + 'copy_failure': '复制失败', + }, + 'it' : { + 'copy': 'Copiare', + 'copy_to_clipboard': 'Copiato negli appunti', + 'copy_success': 'Copiato!', + 'copy_failure': 'Errore durante la copia', + } +} + +let locale = 'en' +if( document.documentElement.lang !== undefined + && messages[document.documentElement.lang] !== undefined ) { + locale = document.documentElement.lang +} + +let doc_url_root = DOCUMENTATION_OPTIONS.URL_ROOT; +if (doc_url_root == '#') { + doc_url_root = ''; +} + +/** + * SVG files for our copy buttons + */ +let iconCheck = ` + ${messages[locale]['copy_success']} + + +` + +// If the user specified their own SVG use that, otherwise use the default +let iconCopy = ``; +if (!iconCopy) { + iconCopy = ` + ${messages[locale]['copy_to_clipboard']} + + + +` +} + +/** + * Set up copy/paste for code blocks + */ + +const runWhenDOMLoaded = cb => { + if (document.readyState != 'loading') { + cb() + } else if (document.addEventListener) { + document.addEventListener('DOMContentLoaded', cb) + } else { + document.attachEvent('onreadystatechange', function() { + if (document.readyState == 'complete') cb() + }) + } +} + +const codeCellId = index => `codecell${index}` + +// Clears selected text since ClipboardJS will select the text when copying +const clearSelection = () => { + if (window.getSelection) { + window.getSelection().removeAllRanges() + } else if (document.selection) { + document.selection.empty() + } +} + +// Changes tooltip text for a moment, then changes it back +// We want the timeout of our `success` class to be a bit shorter than the +// tooltip and icon change, so that we can hide the icon before changing back. +var timeoutIcon = 2000; +var timeoutSuccessClass = 1500; + +const temporarilyChangeTooltip = (el, oldText, newText) => { + el.setAttribute('data-tooltip', newText) + el.classList.add('success') + // Remove success a little bit sooner than we change the tooltip + // So that we can use CSS to hide the copybutton first + setTimeout(() => el.classList.remove('success'), timeoutSuccessClass) + setTimeout(() => el.setAttribute('data-tooltip', oldText), timeoutIcon) +} + +// Changes the copy button icon for two seconds, then changes it back +const temporarilyChangeIcon = (el) => { + el.innerHTML = iconCheck; + setTimeout(() => {el.innerHTML = iconCopy}, timeoutIcon) +} + +const addCopyButtonToCodeCells = () => { + // If ClipboardJS hasn't loaded, wait a bit and try again. This + // happens because we load ClipboardJS asynchronously. + if (window.ClipboardJS === undefined) { + setTimeout(addCopyButtonToCodeCells, 250) + return + } + + // Add copybuttons to all of our code cells + const COPYBUTTON_SELECTOR = 'div.highlight pre'; + const codeCells = document.querySelectorAll(COPYBUTTON_SELECTOR) + codeCells.forEach((codeCell, index) => { + const id = codeCellId(index) + codeCell.setAttribute('id', id) + + const clipboardButton = id => + `` + codeCell.insertAdjacentHTML('afterend', clipboardButton(id)) + }) + +function escapeRegExp(string) { + return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); // $& means the whole matched string +} + +/** + * Removes excluded text from a Node. + * + * @param {Node} target Node to filter. + * @param {string} exclude CSS selector of nodes to exclude. + * @returns {DOMString} Text from `target` with text removed. + */ +function filterText(target, exclude) { + const clone = target.cloneNode(true); // clone as to not modify the live DOM + if (exclude) { + // remove excluded nodes + clone.querySelectorAll(exclude).forEach(node => node.remove()); + } + return clone.innerText; +} + +// Callback when a copy button is clicked. Will be passed the node that was clicked +// should then grab the text and replace pieces of text that shouldn't be used in output +function formatCopyText(textContent, copybuttonPromptText, isRegexp = false, onlyCopyPromptLines = true, removePrompts = true, copyEmptyLines = true, lineContinuationChar = "", hereDocDelim = "") { + var regexp; + var match; + + // Do we check for line continuation characters and "HERE-documents"? + var useLineCont = !!lineContinuationChar + var useHereDoc = !!hereDocDelim + + // create regexp to capture prompt and remaining line + if (isRegexp) { + regexp = new RegExp('^(' + copybuttonPromptText + ')(.*)') + } else { + regexp = new RegExp('^(' + escapeRegExp(copybuttonPromptText) + ')(.*)') + } + + const outputLines = []; + var promptFound = false; + var gotLineCont = false; + var gotHereDoc = false; + const lineGotPrompt = []; + for (const line of textContent.split('\n')) { + match = line.match(regexp) + if (match || gotLineCont || gotHereDoc) { + promptFound = regexp.test(line) + lineGotPrompt.push(promptFound) + if (removePrompts && promptFound) { + outputLines.push(match[2]) + } else { + outputLines.push(line) + } + gotLineCont = line.endsWith(lineContinuationChar) & useLineCont + if (line.includes(hereDocDelim) & useHereDoc) + gotHereDoc = !gotHereDoc + } else if (!onlyCopyPromptLines) { + outputLines.push(line) + } else if (copyEmptyLines && line.trim() === '') { + outputLines.push(line) + } + } + + // If no lines with the prompt were found then just use original lines + if (lineGotPrompt.some(v => v === true)) { + textContent = outputLines.join('\n'); + } + + // Remove a trailing newline to avoid auto-running when pasting + if (textContent.endsWith("\n")) { + textContent = textContent.slice(0, -1) + } + return textContent +} + + +var copyTargetText = (trigger) => { + var target = document.querySelector(trigger.attributes['data-clipboard-target'].value); + + // get filtered text + let exclude = '.linenos'; + + let text = filterText(target, exclude); + return formatCopyText(text, '', false, true, true, true, '', '') +} + + // Initialize with a callback so we can modify the text before copy + const clipboard = new ClipboardJS('.copybtn', {text: copyTargetText}) + + // Update UI with error/success messages + clipboard.on('success', event => { + clearSelection() + temporarilyChangeTooltip(event.trigger, messages[locale]['copy'], messages[locale]['copy_success']) + temporarilyChangeIcon(event.trigger) + }) + + clipboard.on('error', event => { + temporarilyChangeTooltip(event.trigger, messages[locale]['copy'], messages[locale]['copy_failure']) + }) +} + +runWhenDOMLoaded(addCopyButtonToCodeCells) \ No newline at end of file diff --git a/_static/copybutton_funcs.js b/_static/copybutton_funcs.js new file mode 100644 index 0000000..dbe1aaa --- /dev/null +++ b/_static/copybutton_funcs.js @@ -0,0 +1,73 @@ +function escapeRegExp(string) { + return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); // $& means the whole matched string +} + +/** + * Removes excluded text from a Node. + * + * @param {Node} target Node to filter. + * @param {string} exclude CSS selector of nodes to exclude. + * @returns {DOMString} Text from `target` with text removed. + */ +export function filterText(target, exclude) { + const clone = target.cloneNode(true); // clone as to not modify the live DOM + if (exclude) { + // remove excluded nodes + clone.querySelectorAll(exclude).forEach(node => node.remove()); + } + return clone.innerText; +} + +// Callback when a copy button is clicked. Will be passed the node that was clicked +// should then grab the text and replace pieces of text that shouldn't be used in output +export function formatCopyText(textContent, copybuttonPromptText, isRegexp = false, onlyCopyPromptLines = true, removePrompts = true, copyEmptyLines = true, lineContinuationChar = "", hereDocDelim = "") { + var regexp; + var match; + + // Do we check for line continuation characters and "HERE-documents"? + var useLineCont = !!lineContinuationChar + var useHereDoc = !!hereDocDelim + + // create regexp to capture prompt and remaining line + if (isRegexp) { + regexp = new RegExp('^(' + copybuttonPromptText + ')(.*)') + } else { + regexp = new RegExp('^(' + escapeRegExp(copybuttonPromptText) + ')(.*)') + } + + const outputLines = []; + var promptFound = false; + var gotLineCont = false; + var gotHereDoc = false; + const lineGotPrompt = []; + for (const line of textContent.split('\n')) { + match = line.match(regexp) + if (match || gotLineCont || gotHereDoc) { + promptFound = regexp.test(line) + lineGotPrompt.push(promptFound) + if (removePrompts && promptFound) { + outputLines.push(match[2]) + } else { + outputLines.push(line) + } + gotLineCont = line.endsWith(lineContinuationChar) & useLineCont + if (line.includes(hereDocDelim) & useHereDoc) + gotHereDoc = !gotHereDoc + } else if (!onlyCopyPromptLines) { + outputLines.push(line) + } else if (copyEmptyLines && line.trim() === '') { + outputLines.push(line) + } + } + + // If no lines with the prompt were found then just use original lines + if (lineGotPrompt.some(v => v === true)) { + textContent = outputLines.join('\n'); + } + + // Remove a trailing newline to avoid auto-running when pasting + if (textContent.endsWith("\n")) { + textContent = textContent.slice(0, -1) + } + return textContent +} diff --git a/_static/debug.css b/_static/debug.css new file mode 100644 index 0000000..74d4aec --- /dev/null +++ b/_static/debug.css @@ -0,0 +1,69 @@ +/* + This CSS file should be overridden by the theme authors. It's + meant for debugging and developing the skeleton that this theme provides. +*/ +body { + font-family: -apple-system, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, + "Apple Color Emoji", "Segoe UI Emoji"; + background: lavender; +} +.sb-announcement { + background: rgb(131, 131, 131); +} +.sb-announcement__inner { + background: black; + color: white; +} +.sb-header { + background: lightskyblue; +} +.sb-header__inner { + background: royalblue; + color: white; +} +.sb-header-secondary { + background: lightcyan; +} +.sb-header-secondary__inner { + background: cornflowerblue; + color: white; +} +.sb-sidebar-primary { + background: lightgreen; +} +.sb-main { + background: blanchedalmond; +} +.sb-main__inner { + background: antiquewhite; +} +.sb-header-article { + background: lightsteelblue; +} +.sb-article-container { + background: snow; +} +.sb-article-main { + background: white; +} +.sb-footer-article { + background: lightpink; +} +.sb-sidebar-secondary { + background: lightgoldenrodyellow; +} +.sb-footer-content { + background: plum; +} +.sb-footer-content__inner { + background: palevioletred; +} +.sb-footer { + background: pink; +} +.sb-footer__inner { + background: salmon; +} +.sb-article { + background: white; +} diff --git a/_static/design-tabs.js b/_static/design-tabs.js new file mode 100644 index 0000000..b25bd6a --- /dev/null +++ b/_static/design-tabs.js @@ -0,0 +1,101 @@ +// @ts-check + +// Extra JS capability for selected tabs to be synced +// The selection is stored in local storage so that it persists across page loads. + +/** + * @type {Record} + */ +let sd_id_to_elements = {}; +const storageKeyPrefix = "sphinx-design-tab-id-"; + +/** + * Create a key for a tab element. + * @param {HTMLElement} el - The tab element. + * @returns {[string, string, string] | null} - The key. + * + */ +function create_key(el) { + let syncId = el.getAttribute("data-sync-id"); + let syncGroup = el.getAttribute("data-sync-group"); + if (!syncId || !syncGroup) return null; + return [syncGroup, syncId, syncGroup + "--" + syncId]; +} + +/** + * Initialize the tab selection. + * + */ +function ready() { + // Find all tabs with sync data + + /** @type {string[]} */ + let groups = []; + + document.querySelectorAll(".sd-tab-label").forEach((label) => { + if (label instanceof HTMLElement) { + let data = create_key(label); + if (data) { + let [group, id, key] = data; + + // add click event listener + // @ts-ignore + label.onclick = onSDLabelClick; + + // store map of key to elements + if (!sd_id_to_elements[key]) { + sd_id_to_elements[key] = []; + } + sd_id_to_elements[key].push(label); + + if (groups.indexOf(group) === -1) { + groups.push(group); + // Check if a specific tab has been selected via URL parameter + const tabParam = new URLSearchParams(window.location.search).get( + group + ); + if (tabParam) { + console.log( + "sphinx-design: Selecting tab id for group '" + + group + + "' from URL parameter: " + + tabParam + ); + window.sessionStorage.setItem(storageKeyPrefix + group, tabParam); + } + } + + // Check is a specific tab has been selected previously + let previousId = window.sessionStorage.getItem( + storageKeyPrefix + group + ); + if (previousId === id) { + // console.log( + // "sphinx-design: Selecting tab from session storage: " + id + // ); + // @ts-ignore + label.previousElementSibling.checked = true; + } + } + } + }); +} + +/** + * Activate other tabs with the same sync id. + * + * @this {HTMLElement} - The element that was clicked. + */ +function onSDLabelClick() { + let data = create_key(this); + if (!data) return; + let [group, id, key] = data; + for (const label of sd_id_to_elements[key]) { + if (label === this) continue; + // @ts-ignore + label.previousElementSibling.checked = true; + } + window.sessionStorage.setItem(storageKeyPrefix + group, id); +} + +document.addEventListener("DOMContentLoaded", ready, false); diff --git a/_static/doctools.js b/_static/doctools.js new file mode 100644 index 0000000..d06a71d --- /dev/null +++ b/_static/doctools.js @@ -0,0 +1,156 @@ +/* + * doctools.js + * ~~~~~~~~~~~ + * + * Base JavaScript utilities for all Sphinx HTML documentation. + * + * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ +"use strict"; + +const BLACKLISTED_KEY_CONTROL_ELEMENTS = new Set([ + "TEXTAREA", + "INPUT", + "SELECT", + "BUTTON", +]); + +const _ready = (callback) => { + if (document.readyState !== "loading") { + callback(); + } else { + document.addEventListener("DOMContentLoaded", callback); + } +}; + +/** + * Small JavaScript module for the documentation. + */ +const Documentation = { + init: () => { + Documentation.initDomainIndexTable(); + Documentation.initOnKeyListeners(); + }, + + /** + * i18n support + */ + TRANSLATIONS: {}, + PLURAL_EXPR: (n) => (n === 1 ? 0 : 1), + LOCALE: "unknown", + + // gettext and ngettext don't access this so that the functions + // can safely bound to a different name (_ = Documentation.gettext) + gettext: (string) => { + const translated = Documentation.TRANSLATIONS[string]; + switch (typeof translated) { + case "undefined": + return string; // no translation + case "string": + return translated; // translation exists + default: + return translated[0]; // (singular, plural) translation tuple exists + } + }, + + ngettext: (singular, plural, n) => { + const translated = Documentation.TRANSLATIONS[singular]; + if (typeof translated !== "undefined") + return translated[Documentation.PLURAL_EXPR(n)]; + return n === 1 ? singular : plural; + }, + + addTranslations: (catalog) => { + Object.assign(Documentation.TRANSLATIONS, catalog.messages); + Documentation.PLURAL_EXPR = new Function( + "n", + `return (${catalog.plural_expr})` + ); + Documentation.LOCALE = catalog.locale; + }, + + /** + * helper function to focus on search bar + */ + focusSearchBar: () => { + document.querySelectorAll("input[name=q]")[0]?.focus(); + }, + + /** + * Initialise the domain index toggle buttons + */ + initDomainIndexTable: () => { + const toggler = (el) => { + const idNumber = el.id.substr(7); + const toggledRows = document.querySelectorAll(`tr.cg-${idNumber}`); + if (el.src.substr(-9) === "minus.png") { + el.src = `${el.src.substr(0, el.src.length - 9)}plus.png`; + toggledRows.forEach((el) => (el.style.display = "none")); + } else { + el.src = `${el.src.substr(0, el.src.length - 8)}minus.png`; + toggledRows.forEach((el) => (el.style.display = "")); + } + }; + + const togglerElements = document.querySelectorAll("img.toggler"); + togglerElements.forEach((el) => + el.addEventListener("click", (event) => toggler(event.currentTarget)) + ); + togglerElements.forEach((el) => (el.style.display = "")); + if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) togglerElements.forEach(toggler); + }, + + initOnKeyListeners: () => { + // only install a listener if it is really needed + if ( + !DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS && + !DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS + ) + return; + + document.addEventListener("keydown", (event) => { + // bail for input elements + if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return; + // bail with special keys + if (event.altKey || event.ctrlKey || event.metaKey) return; + + if (!event.shiftKey) { + switch (event.key) { + case "ArrowLeft": + if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break; + + const prevLink = document.querySelector('link[rel="prev"]'); + if (prevLink && prevLink.href) { + window.location.href = prevLink.href; + event.preventDefault(); + } + break; + case "ArrowRight": + if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break; + + const nextLink = document.querySelector('link[rel="next"]'); + if (nextLink && nextLink.href) { + window.location.href = nextLink.href; + event.preventDefault(); + } + break; + } + } + + // some keyboard layouts may need Shift to get / + switch (event.key) { + case "/": + if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) break; + Documentation.focusSearchBar(); + event.preventDefault(); + } + }); + }, +}; + +// quick alias for translations +const _ = Documentation.gettext; + +_ready(Documentation.init); diff --git a/_static/documentation_options.js b/_static/documentation_options.js new file mode 100644 index 0000000..13d90ff --- /dev/null +++ b/_static/documentation_options.js @@ -0,0 +1,13 @@ +const DOCUMENTATION_OPTIONS = { + VERSION: '0.1.0', + LANGUAGE: 'en', + COLLAPSE_INDEX: false, + BUILDER: 'html', + FILE_SUFFIX: '.html', + LINK_SUFFIX: '.html', + HAS_SOURCE: true, + SOURCELINK_SUFFIX: '.txt', + NAVIGATION_WITH_KEYS: false, + SHOW_SEARCH_SUMMARY: true, + ENABLE_SEARCH_SHORTCUTS: true, +}; \ No newline at end of file diff --git a/_static/file.png b/_static/file.png new file mode 100644 index 0000000000000000000000000000000000000000..a858a410e4faa62ce324d814e4b816fff83a6fb3 GIT binary patch literal 286 zcmV+(0pb3MP)s`hMrGg#P~ix$^RISR_I47Y|r1 z_CyJOe}D1){SET-^Amu_i71Lt6eYfZjRyw@I6OQAIXXHDfiX^GbOlHe=Ae4>0m)d(f|Me07*qoM6N<$f}vM^LjV8( literal 0 HcmV?d00001 diff --git a/_static/graphviz.css b/_static/graphviz.css new file mode 100644 index 0000000..8d81c02 --- /dev/null +++ b/_static/graphviz.css @@ -0,0 +1,19 @@ +/* + * graphviz.css + * ~~~~~~~~~~~~ + * + * Sphinx stylesheet -- graphviz extension. + * + * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +img.graphviz { + border: 0; + max-width: 100%; +} + +object.graphviz { + max-width: 100%; +} diff --git a/_static/language_data.js b/_static/language_data.js new file mode 100644 index 0000000..250f566 --- /dev/null +++ b/_static/language_data.js @@ -0,0 +1,199 @@ +/* + * language_data.js + * ~~~~~~~~~~~~~~~~ + * + * This script contains the language-specific data used by searchtools.js, + * namely the list of stopwords, stemmer, scorer and splitter. + * + * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +var stopwords = ["a", "and", "are", "as", "at", "be", "but", "by", "for", "if", "in", "into", "is", "it", "near", "no", "not", "of", "on", "or", "such", "that", "the", "their", "then", "there", "these", "they", "this", "to", "was", "will", "with"]; + + +/* Non-minified version is copied as a separate JS file, is available */ + +/** + * Porter Stemmer + */ +var Stemmer = function() { + + var step2list = { + ational: 'ate', + tional: 'tion', + enci: 'ence', + anci: 'ance', + izer: 'ize', + bli: 'ble', + alli: 'al', + entli: 'ent', + eli: 'e', + ousli: 'ous', + ization: 'ize', + ation: 'ate', + ator: 'ate', + alism: 'al', + iveness: 'ive', + fulness: 'ful', + ousness: 'ous', + aliti: 'al', + iviti: 'ive', + biliti: 'ble', + logi: 'log' + }; + + var step3list = { + icate: 'ic', + ative: '', + alize: 'al', + iciti: 'ic', + ical: 'ic', + ful: '', + ness: '' + }; + + var c = "[^aeiou]"; // consonant + var v = "[aeiouy]"; // vowel + var C = c + "[^aeiouy]*"; // consonant sequence + var V = v + "[aeiou]*"; // vowel sequence + + var mgr0 = "^(" + C + ")?" + V + C; // [C]VC... is m>0 + var meq1 = "^(" + C + ")?" + V + C + "(" + V + ")?$"; // [C]VC[V] is m=1 + var mgr1 = "^(" + C + ")?" + V + C + V + C; // [C]VCVC... is m>1 + var s_v = "^(" + C + ")?" + v; // vowel in stem + + this.stemWord = function (w) { + var stem; + var suffix; + var firstch; + var origword = w; + + if (w.length < 3) + return w; + + var re; + var re2; + var re3; + var re4; + + firstch = w.substr(0,1); + if (firstch == "y") + w = firstch.toUpperCase() + w.substr(1); + + // Step 1a + re = /^(.+?)(ss|i)es$/; + re2 = /^(.+?)([^s])s$/; + + if (re.test(w)) + w = w.replace(re,"$1$2"); + else if (re2.test(w)) + w = w.replace(re2,"$1$2"); + + // Step 1b + re = /^(.+?)eed$/; + re2 = /^(.+?)(ed|ing)$/; + if (re.test(w)) { + var fp = re.exec(w); + re = new RegExp(mgr0); + if (re.test(fp[1])) { + re = /.$/; + w = w.replace(re,""); + } + } + else if (re2.test(w)) { + var fp = re2.exec(w); + stem = fp[1]; + re2 = new RegExp(s_v); + if (re2.test(stem)) { + w = stem; + re2 = /(at|bl|iz)$/; + re3 = new RegExp("([^aeiouylsz])\\1$"); + re4 = new RegExp("^" + C + v + "[^aeiouwxy]$"); + if (re2.test(w)) + w = w + "e"; + else if (re3.test(w)) { + re = /.$/; + w = w.replace(re,""); + } + else if (re4.test(w)) + w = w + "e"; + } + } + + // Step 1c + re = /^(.+?)y$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(s_v); + if (re.test(stem)) + w = stem + "i"; + } + + // Step 2 + re = /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + suffix = fp[2]; + re = new RegExp(mgr0); + if (re.test(stem)) + w = stem + step2list[suffix]; + } + + // Step 3 + re = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + suffix = fp[2]; + re = new RegExp(mgr0); + if (re.test(stem)) + w = stem + step3list[suffix]; + } + + // Step 4 + re = /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/; + re2 = /^(.+?)(s|t)(ion)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(mgr1); + if (re.test(stem)) + w = stem; + } + else if (re2.test(w)) { + var fp = re2.exec(w); + stem = fp[1] + fp[2]; + re2 = new RegExp(mgr1); + if (re2.test(stem)) + w = stem; + } + + // Step 5 + re = /^(.+?)e$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(mgr1); + re2 = new RegExp(meq1); + re3 = new RegExp("^" + C + v + "[^aeiouwxy]$"); + if (re.test(stem) || (re2.test(stem) && !(re3.test(stem)))) + w = stem; + } + re = /ll$/; + re2 = new RegExp(mgr1); + if (re.test(w) && re2.test(w)) { + re = /.$/; + w = w.replace(re,""); + } + + // and turn initial Y back to y + if (firstch == "y") + w = firstch.toLowerCase() + w.substr(1); + return w; + } +} + diff --git a/_static/minus.png b/_static/minus.png new file mode 100644 index 0000000000000000000000000000000000000000..d96755fdaf8bb2214971e0db9c1fd3077d7c419d GIT binary patch literal 90 zcmeAS@N?(olHy`uVBq!ia0vp^+#t*WBp7;*Yy1LIik>cxAr*|t7R?Mi>2?kWtu=nj kDsEF_5m^0CR;1wuP-*O&G^0G}KYk!hp00i_>zopr08q^qX#fBK literal 0 HcmV?d00001 diff --git a/_static/plus.png b/_static/plus.png new file mode 100644 index 0000000000000000000000000000000000000000..7107cec93a979b9a5f64843235a16651d563ce2d GIT binary patch literal 90 zcmeAS@N?(olHy`uVBq!ia0vp^+#t*WBp7;*Yy1LIik>cxAr*|t7R?Mi>2?kWtu>-2 m3q%Vub%g%s<8sJhVPMczOq}xhg9DJoz~JfX=d#Wzp$Pyb1r*Kz literal 0 HcmV?d00001 diff --git a/_static/pygments.css b/_static/pygments.css new file mode 100644 index 0000000..d0ae3b8 --- /dev/null +++ b/_static/pygments.css @@ -0,0 +1,249 @@ +.highlight pre { line-height: 125%; } +.highlight td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +.highlight span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +.highlight td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +.highlight span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +.highlight .hll { background-color: #ffffcc } +.highlight { background: #eeffcc; } +.highlight .c { color: #408090; font-style: italic } /* Comment */ +.highlight .err { border: 1px solid #FF0000 } /* Error */ +.highlight .k { color: #007020; font-weight: bold } /* Keyword */ +.highlight .o { color: #666666 } /* Operator */ +.highlight .ch { color: #408090; font-style: italic } /* Comment.Hashbang */ +.highlight .cm { color: #408090; font-style: italic } /* Comment.Multiline */ +.highlight .cp { color: #007020 } /* Comment.Preproc */ +.highlight .cpf { color: #408090; font-style: italic } /* Comment.PreprocFile */ +.highlight .c1 { color: #408090; font-style: italic } /* Comment.Single */ +.highlight .cs { color: #408090; background-color: #fff0f0 } /* Comment.Special */ +.highlight .gd { color: #A00000 } /* Generic.Deleted */ +.highlight .ge { font-style: italic } /* Generic.Emph */ +.highlight .ges { font-weight: bold; font-style: italic } /* Generic.EmphStrong */ +.highlight .gr { color: #FF0000 } /* Generic.Error */ +.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */ +.highlight .gi { color: #00A000 } /* Generic.Inserted */ +.highlight .go { color: #333333 } /* Generic.Output */ +.highlight .gp { color: #c65d09; font-weight: bold } /* Generic.Prompt */ +.highlight .gs { font-weight: bold } /* Generic.Strong */ +.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */ +.highlight .gt { color: #0044DD } /* Generic.Traceback */ +.highlight .kc { color: #007020; font-weight: bold } /* Keyword.Constant */ +.highlight .kd { color: #007020; font-weight: bold } /* Keyword.Declaration */ +.highlight .kn { color: #007020; font-weight: bold } /* Keyword.Namespace */ +.highlight .kp { color: #007020 } /* Keyword.Pseudo */ +.highlight .kr { color: #007020; font-weight: bold } /* Keyword.Reserved */ +.highlight .kt { color: #902000 } /* Keyword.Type */ +.highlight .m { color: #208050 } /* Literal.Number */ +.highlight .s { color: #4070a0 } /* Literal.String */ +.highlight .na { color: #4070a0 } /* Name.Attribute */ +.highlight .nb { color: #007020 } /* Name.Builtin */ +.highlight .nc { color: #0e84b5; font-weight: bold } /* Name.Class */ +.highlight .no { color: #60add5 } /* Name.Constant */ +.highlight .nd { color: #555555; font-weight: bold } /* Name.Decorator */ +.highlight .ni { color: #d55537; font-weight: bold } /* Name.Entity */ +.highlight .ne { color: #007020 } /* Name.Exception */ +.highlight .nf { color: #06287e } /* Name.Function */ +.highlight .nl { color: #002070; font-weight: bold } /* Name.Label */ +.highlight .nn { color: #0e84b5; font-weight: bold } /* Name.Namespace */ +.highlight .nt { color: #062873; font-weight: bold } /* Name.Tag */ +.highlight .nv { color: #bb60d5 } /* Name.Variable */ +.highlight .ow { color: #007020; font-weight: bold } /* Operator.Word */ +.highlight .w { color: #bbbbbb } /* Text.Whitespace */ +.highlight .mb { color: #208050 } /* Literal.Number.Bin */ +.highlight .mf { color: #208050 } /* Literal.Number.Float */ +.highlight .mh { color: #208050 } /* Literal.Number.Hex */ +.highlight .mi { color: #208050 } /* Literal.Number.Integer */ +.highlight .mo { color: #208050 } /* Literal.Number.Oct */ +.highlight .sa { color: #4070a0 } /* Literal.String.Affix */ +.highlight .sb { color: #4070a0 } /* Literal.String.Backtick */ +.highlight .sc { color: #4070a0 } /* Literal.String.Char */ +.highlight .dl { color: #4070a0 } /* Literal.String.Delimiter */ +.highlight .sd { color: #4070a0; font-style: italic } /* Literal.String.Doc */ +.highlight .s2 { color: #4070a0 } /* Literal.String.Double */ +.highlight .se { color: #4070a0; font-weight: bold } /* Literal.String.Escape */ +.highlight .sh { color: #4070a0 } /* Literal.String.Heredoc */ +.highlight .si { color: #70a0d0; font-style: italic } /* Literal.String.Interpol */ +.highlight .sx { color: #c65d09 } /* Literal.String.Other */ +.highlight .sr { color: #235388 } /* Literal.String.Regex */ +.highlight .s1 { color: #4070a0 } /* Literal.String.Single */ +.highlight .ss { color: #517918 } /* Literal.String.Symbol */ +.highlight .bp { color: #007020 } /* Name.Builtin.Pseudo */ +.highlight .fm { color: #06287e } /* Name.Function.Magic */ +.highlight .vc { color: #bb60d5 } /* Name.Variable.Class */ +.highlight .vg { color: #bb60d5 } /* Name.Variable.Global */ +.highlight .vi { color: #bb60d5 } /* Name.Variable.Instance */ +.highlight .vm { color: #bb60d5 } /* Name.Variable.Magic */ +.highlight .il { color: #208050 } /* Literal.Number.Integer.Long */ +@media not print { +body[data-theme="dark"] .highlight pre { line-height: 125%; } +body[data-theme="dark"] .highlight td.linenos .normal { color: #aaaaaa; background-color: transparent; padding-left: 5px; padding-right: 5px; } +body[data-theme="dark"] .highlight span.linenos { color: #aaaaaa; background-color: transparent; padding-left: 5px; padding-right: 5px; } +body[data-theme="dark"] .highlight td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +body[data-theme="dark"] .highlight span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +body[data-theme="dark"] .highlight .hll { background-color: #404040 } +body[data-theme="dark"] .highlight { background: #202020; color: #d0d0d0 } +body[data-theme="dark"] .highlight .c { color: #ababab; font-style: italic } /* Comment */ +body[data-theme="dark"] .highlight .err { color: #a61717; background-color: #e3d2d2 } /* Error */ +body[data-theme="dark"] .highlight .esc { color: #d0d0d0 } /* Escape */ +body[data-theme="dark"] .highlight .g { color: #d0d0d0 } /* Generic */ +body[data-theme="dark"] .highlight .k { color: #6ebf26; font-weight: bold } /* Keyword */ +body[data-theme="dark"] .highlight .l { color: #d0d0d0 } /* Literal */ +body[data-theme="dark"] .highlight .n { color: #d0d0d0 } /* Name */ +body[data-theme="dark"] .highlight .o { color: #d0d0d0 } /* Operator */ +body[data-theme="dark"] .highlight .x { color: #d0d0d0 } /* Other */ +body[data-theme="dark"] .highlight .p { color: #d0d0d0 } /* Punctuation */ +body[data-theme="dark"] .highlight .ch { color: #ababab; font-style: italic } /* Comment.Hashbang */ +body[data-theme="dark"] .highlight .cm { color: #ababab; font-style: italic } /* Comment.Multiline */ +body[data-theme="dark"] .highlight .cp { color: #ff3a3a; font-weight: bold } /* Comment.Preproc */ +body[data-theme="dark"] .highlight .cpf { color: #ababab; font-style: italic } /* Comment.PreprocFile */ +body[data-theme="dark"] .highlight .c1 { color: #ababab; font-style: italic } /* Comment.Single */ +body[data-theme="dark"] .highlight .cs { color: #e50808; font-weight: bold; background-color: #520000 } /* Comment.Special */ +body[data-theme="dark"] .highlight .gd { color: #ff3a3a } /* Generic.Deleted */ +body[data-theme="dark"] .highlight .ge { color: #d0d0d0; font-style: italic } /* Generic.Emph */ +body[data-theme="dark"] .highlight .ges { color: #d0d0d0; font-weight: bold; font-style: italic } /* Generic.EmphStrong */ +body[data-theme="dark"] .highlight .gr { color: #ff3a3a } /* Generic.Error */ +body[data-theme="dark"] .highlight .gh { color: #ffffff; font-weight: bold } /* Generic.Heading */ +body[data-theme="dark"] .highlight .gi { color: #589819 } /* Generic.Inserted */ +body[data-theme="dark"] .highlight .go { color: #cccccc } /* Generic.Output */ +body[data-theme="dark"] .highlight .gp { color: #aaaaaa } /* Generic.Prompt */ +body[data-theme="dark"] .highlight .gs { color: #d0d0d0; font-weight: bold } /* Generic.Strong */ +body[data-theme="dark"] .highlight .gu { color: #ffffff; text-decoration: underline } /* Generic.Subheading */ +body[data-theme="dark"] .highlight .gt { color: #ff3a3a } /* Generic.Traceback */ +body[data-theme="dark"] .highlight .kc { color: #6ebf26; font-weight: bold } /* Keyword.Constant */ +body[data-theme="dark"] .highlight .kd { color: #6ebf26; font-weight: bold } /* Keyword.Declaration */ +body[data-theme="dark"] .highlight .kn { color: #6ebf26; font-weight: bold } /* Keyword.Namespace */ +body[data-theme="dark"] .highlight .kp { color: #6ebf26 } /* Keyword.Pseudo */ +body[data-theme="dark"] .highlight .kr { color: #6ebf26; font-weight: bold } /* Keyword.Reserved */ +body[data-theme="dark"] .highlight .kt { color: #6ebf26; font-weight: bold } /* Keyword.Type */ +body[data-theme="dark"] .highlight .ld { color: #d0d0d0 } /* Literal.Date */ +body[data-theme="dark"] .highlight .m { color: #51b2fd } /* Literal.Number */ +body[data-theme="dark"] .highlight .s { color: #ed9d13 } /* Literal.String */ +body[data-theme="dark"] .highlight .na { color: #bbbbbb } /* Name.Attribute */ +body[data-theme="dark"] .highlight .nb { color: #2fbccd } /* Name.Builtin */ +body[data-theme="dark"] .highlight .nc { color: #71adff; text-decoration: underline } /* Name.Class */ +body[data-theme="dark"] .highlight .no { color: #40ffff } /* Name.Constant */ +body[data-theme="dark"] .highlight .nd { color: #ffa500 } /* Name.Decorator */ +body[data-theme="dark"] .highlight .ni { color: #d0d0d0 } /* Name.Entity */ +body[data-theme="dark"] .highlight .ne { color: #bbbbbb } /* Name.Exception */ +body[data-theme="dark"] .highlight .nf { color: #71adff } /* Name.Function */ +body[data-theme="dark"] .highlight .nl { color: #d0d0d0 } /* Name.Label */ +body[data-theme="dark"] .highlight .nn { color: #71adff; text-decoration: underline } /* Name.Namespace */ +body[data-theme="dark"] .highlight .nx { color: #d0d0d0 } /* Name.Other */ +body[data-theme="dark"] .highlight .py { color: #d0d0d0 } /* Name.Property */ +body[data-theme="dark"] .highlight .nt { color: #6ebf26; font-weight: bold } /* Name.Tag */ +body[data-theme="dark"] .highlight .nv { color: #40ffff } /* Name.Variable */ +body[data-theme="dark"] .highlight .ow { color: #6ebf26; font-weight: bold } /* Operator.Word */ +body[data-theme="dark"] .highlight .pm { color: #d0d0d0 } /* Punctuation.Marker */ +body[data-theme="dark"] .highlight .w { color: #666666 } /* Text.Whitespace */ +body[data-theme="dark"] .highlight .mb { color: #51b2fd } /* Literal.Number.Bin */ +body[data-theme="dark"] .highlight .mf { color: #51b2fd } /* Literal.Number.Float */ +body[data-theme="dark"] .highlight .mh { color: #51b2fd } /* Literal.Number.Hex */ +body[data-theme="dark"] .highlight .mi { color: #51b2fd } /* Literal.Number.Integer */ +body[data-theme="dark"] .highlight .mo { color: #51b2fd } /* Literal.Number.Oct */ +body[data-theme="dark"] .highlight .sa { color: #ed9d13 } /* Literal.String.Affix */ +body[data-theme="dark"] .highlight .sb { color: #ed9d13 } /* Literal.String.Backtick */ +body[data-theme="dark"] .highlight .sc { color: #ed9d13 } /* Literal.String.Char */ +body[data-theme="dark"] .highlight .dl { color: #ed9d13 } /* Literal.String.Delimiter */ +body[data-theme="dark"] .highlight .sd { color: #ed9d13 } /* Literal.String.Doc */ +body[data-theme="dark"] .highlight .s2 { color: #ed9d13 } /* Literal.String.Double */ +body[data-theme="dark"] .highlight .se { color: #ed9d13 } /* Literal.String.Escape */ +body[data-theme="dark"] .highlight .sh { color: #ed9d13 } /* Literal.String.Heredoc */ +body[data-theme="dark"] .highlight .si { color: #ed9d13 } /* Literal.String.Interpol */ +body[data-theme="dark"] .highlight .sx { color: #ffa500 } /* Literal.String.Other */ +body[data-theme="dark"] .highlight .sr { color: #ed9d13 } /* Literal.String.Regex */ +body[data-theme="dark"] .highlight .s1 { color: #ed9d13 } /* Literal.String.Single */ +body[data-theme="dark"] .highlight .ss { color: #ed9d13 } /* Literal.String.Symbol */ +body[data-theme="dark"] .highlight .bp { color: #2fbccd } /* Name.Builtin.Pseudo */ +body[data-theme="dark"] .highlight .fm { color: #71adff } /* Name.Function.Magic */ +body[data-theme="dark"] .highlight .vc { color: #40ffff } /* Name.Variable.Class */ +body[data-theme="dark"] .highlight .vg { color: #40ffff } /* Name.Variable.Global */ +body[data-theme="dark"] .highlight .vi { color: #40ffff } /* Name.Variable.Instance */ +body[data-theme="dark"] .highlight .vm { color: #40ffff } /* Name.Variable.Magic */ +body[data-theme="dark"] .highlight .il { color: #51b2fd } /* Literal.Number.Integer.Long */ +@media (prefers-color-scheme: dark) { +body:not([data-theme="light"]) .highlight pre { line-height: 125%; } +body:not([data-theme="light"]) .highlight td.linenos .normal { color: #aaaaaa; background-color: transparent; padding-left: 5px; padding-right: 5px; } +body:not([data-theme="light"]) .highlight span.linenos { color: #aaaaaa; background-color: transparent; padding-left: 5px; padding-right: 5px; } +body:not([data-theme="light"]) .highlight td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +body:not([data-theme="light"]) .highlight span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +body:not([data-theme="light"]) .highlight .hll { background-color: #404040 } +body:not([data-theme="light"]) .highlight { background: #202020; color: #d0d0d0 } +body:not([data-theme="light"]) .highlight .c { color: #ababab; font-style: italic } /* Comment */ +body:not([data-theme="light"]) .highlight .err { color: #a61717; background-color: #e3d2d2 } /* Error */ +body:not([data-theme="light"]) .highlight .esc { color: #d0d0d0 } /* Escape */ +body:not([data-theme="light"]) .highlight .g { color: #d0d0d0 } /* Generic */ +body:not([data-theme="light"]) .highlight .k { color: #6ebf26; font-weight: bold } /* Keyword */ +body:not([data-theme="light"]) .highlight .l { color: #d0d0d0 } /* Literal */ +body:not([data-theme="light"]) .highlight .n { color: #d0d0d0 } /* Name */ +body:not([data-theme="light"]) .highlight .o { color: #d0d0d0 } /* Operator */ +body:not([data-theme="light"]) .highlight .x { color: #d0d0d0 } /* Other */ +body:not([data-theme="light"]) .highlight .p { color: #d0d0d0 } /* Punctuation */ +body:not([data-theme="light"]) .highlight .ch { color: #ababab; font-style: italic } /* Comment.Hashbang */ +body:not([data-theme="light"]) .highlight .cm { color: #ababab; font-style: italic } /* Comment.Multiline */ +body:not([data-theme="light"]) .highlight .cp { color: #ff3a3a; font-weight: bold } /* Comment.Preproc */ +body:not([data-theme="light"]) .highlight .cpf { color: #ababab; font-style: italic } /* Comment.PreprocFile */ +body:not([data-theme="light"]) .highlight .c1 { color: #ababab; font-style: italic } /* Comment.Single */ +body:not([data-theme="light"]) .highlight .cs { color: #e50808; font-weight: bold; background-color: #520000 } /* Comment.Special */ +body:not([data-theme="light"]) .highlight .gd { color: #ff3a3a } /* Generic.Deleted */ +body:not([data-theme="light"]) .highlight .ge { color: #d0d0d0; font-style: italic } /* Generic.Emph */ +body:not([data-theme="light"]) .highlight .ges { color: #d0d0d0; font-weight: bold; font-style: italic } /* Generic.EmphStrong */ +body:not([data-theme="light"]) .highlight .gr { color: #ff3a3a } /* Generic.Error */ +body:not([data-theme="light"]) .highlight .gh { color: #ffffff; font-weight: bold } /* Generic.Heading */ +body:not([data-theme="light"]) .highlight .gi { color: #589819 } /* Generic.Inserted */ +body:not([data-theme="light"]) .highlight .go { color: #cccccc } /* Generic.Output */ +body:not([data-theme="light"]) .highlight .gp { color: #aaaaaa } /* Generic.Prompt */ +body:not([data-theme="light"]) .highlight .gs { color: #d0d0d0; font-weight: bold } /* Generic.Strong */ +body:not([data-theme="light"]) .highlight .gu { color: #ffffff; text-decoration: underline } /* Generic.Subheading */ +body:not([data-theme="light"]) .highlight .gt { color: #ff3a3a } /* Generic.Traceback */ +body:not([data-theme="light"]) .highlight .kc { color: #6ebf26; font-weight: bold } /* Keyword.Constant */ +body:not([data-theme="light"]) .highlight .kd { color: #6ebf26; font-weight: bold } /* Keyword.Declaration */ +body:not([data-theme="light"]) .highlight .kn { color: #6ebf26; font-weight: bold } /* Keyword.Namespace */ +body:not([data-theme="light"]) .highlight .kp { color: #6ebf26 } /* Keyword.Pseudo */ +body:not([data-theme="light"]) .highlight .kr { color: #6ebf26; font-weight: bold } /* Keyword.Reserved */ +body:not([data-theme="light"]) .highlight .kt { color: #6ebf26; font-weight: bold } /* Keyword.Type */ +body:not([data-theme="light"]) .highlight .ld { color: #d0d0d0 } /* Literal.Date */ +body:not([data-theme="light"]) .highlight .m { color: #51b2fd } /* Literal.Number */ +body:not([data-theme="light"]) .highlight .s { color: #ed9d13 } /* Literal.String */ +body:not([data-theme="light"]) .highlight .na { color: #bbbbbb } /* Name.Attribute */ +body:not([data-theme="light"]) .highlight .nb { color: #2fbccd } /* Name.Builtin */ +body:not([data-theme="light"]) .highlight .nc { color: #71adff; text-decoration: underline } /* Name.Class */ +body:not([data-theme="light"]) .highlight .no { color: #40ffff } /* Name.Constant */ +body:not([data-theme="light"]) .highlight .nd { color: #ffa500 } /* Name.Decorator */ +body:not([data-theme="light"]) .highlight .ni { color: #d0d0d0 } /* Name.Entity */ +body:not([data-theme="light"]) .highlight .ne { color: #bbbbbb } /* Name.Exception */ +body:not([data-theme="light"]) .highlight .nf { color: #71adff } /* Name.Function */ +body:not([data-theme="light"]) .highlight .nl { color: #d0d0d0 } /* Name.Label */ +body:not([data-theme="light"]) .highlight .nn { color: #71adff; text-decoration: underline } /* Name.Namespace */ +body:not([data-theme="light"]) .highlight .nx { color: #d0d0d0 } /* Name.Other */ +body:not([data-theme="light"]) .highlight .py { color: #d0d0d0 } /* Name.Property */ +body:not([data-theme="light"]) .highlight .nt { color: #6ebf26; font-weight: bold } /* Name.Tag */ +body:not([data-theme="light"]) .highlight .nv { color: #40ffff } /* Name.Variable */ +body:not([data-theme="light"]) .highlight .ow { color: #6ebf26; font-weight: bold } /* Operator.Word */ +body:not([data-theme="light"]) .highlight .pm { color: #d0d0d0 } /* Punctuation.Marker */ +body:not([data-theme="light"]) .highlight .w { color: #666666 } /* Text.Whitespace */ +body:not([data-theme="light"]) .highlight .mb { color: #51b2fd } /* Literal.Number.Bin */ +body:not([data-theme="light"]) .highlight .mf { color: #51b2fd } /* Literal.Number.Float */ +body:not([data-theme="light"]) .highlight .mh { color: #51b2fd } /* Literal.Number.Hex */ +body:not([data-theme="light"]) .highlight .mi { color: #51b2fd } /* Literal.Number.Integer */ +body:not([data-theme="light"]) .highlight .mo { color: #51b2fd } /* Literal.Number.Oct */ +body:not([data-theme="light"]) .highlight .sa { color: #ed9d13 } /* Literal.String.Affix */ +body:not([data-theme="light"]) .highlight .sb { color: #ed9d13 } /* Literal.String.Backtick */ +body:not([data-theme="light"]) .highlight .sc { color: #ed9d13 } /* Literal.String.Char */ +body:not([data-theme="light"]) .highlight .dl { color: #ed9d13 } /* Literal.String.Delimiter */ +body:not([data-theme="light"]) .highlight .sd { color: #ed9d13 } /* Literal.String.Doc */ +body:not([data-theme="light"]) .highlight .s2 { color: #ed9d13 } /* Literal.String.Double */ +body:not([data-theme="light"]) .highlight .se { color: #ed9d13 } /* Literal.String.Escape */ +body:not([data-theme="light"]) .highlight .sh { color: #ed9d13 } /* Literal.String.Heredoc */ +body:not([data-theme="light"]) .highlight .si { color: #ed9d13 } /* Literal.String.Interpol */ +body:not([data-theme="light"]) .highlight .sx { color: #ffa500 } /* Literal.String.Other */ +body:not([data-theme="light"]) .highlight .sr { color: #ed9d13 } /* Literal.String.Regex */ +body:not([data-theme="light"]) .highlight .s1 { color: #ed9d13 } /* Literal.String.Single */ +body:not([data-theme="light"]) .highlight .ss { color: #ed9d13 } /* Literal.String.Symbol */ +body:not([data-theme="light"]) .highlight .bp { color: #2fbccd } /* Name.Builtin.Pseudo */ +body:not([data-theme="light"]) .highlight .fm { color: #71adff } /* Name.Function.Magic */ +body:not([data-theme="light"]) .highlight .vc { color: #40ffff } /* Name.Variable.Class */ +body:not([data-theme="light"]) .highlight .vg { color: #40ffff } /* Name.Variable.Global */ +body:not([data-theme="light"]) .highlight .vi { color: #40ffff } /* Name.Variable.Instance */ +body:not([data-theme="light"]) .highlight .vm { color: #40ffff } /* Name.Variable.Magic */ +body:not([data-theme="light"]) .highlight .il { color: #51b2fd } /* Literal.Number.Integer.Long */ +} +} \ No newline at end of file diff --git a/_static/scripts/furo-extensions.js b/_static/scripts/furo-extensions.js new file mode 100644 index 0000000..e69de29 diff --git a/_static/scripts/furo.js b/_static/scripts/furo.js new file mode 100644 index 0000000..0abb2af --- /dev/null +++ b/_static/scripts/furo.js @@ -0,0 +1,3 @@ +/*! For license information please see furo.js.LICENSE.txt */ +(()=>{var t={856:function(t,e,n){var o,r;r=void 0!==n.g?n.g:"undefined"!=typeof window?window:this,o=function(){return function(t){"use strict";var e={navClass:"active",contentClass:"active",nested:!1,nestedClass:"active",offset:0,reflow:!1,events:!0},n=function(t,e,n){if(n.settings.events){var o=new CustomEvent(t,{bubbles:!0,cancelable:!0,detail:n});e.dispatchEvent(o)}},o=function(t){var e=0;if(t.offsetParent)for(;t;)e+=t.offsetTop,t=t.offsetParent;return e>=0?e:0},r=function(t){t&&t.sort((function(t,e){return o(t.content)=Math.max(document.body.scrollHeight,document.documentElement.scrollHeight,document.body.offsetHeight,document.documentElement.offsetHeight,document.body.clientHeight,document.documentElement.clientHeight)},l=function(t,e){var n=t[t.length-1];if(function(t,e){return!(!s()||!c(t.content,e,!0))}(n,e))return n;for(var o=t.length-1;o>=0;o--)if(c(t[o].content,e))return t[o]},a=function(t,e){if(e.nested&&t.parentNode){var n=t.parentNode.closest("li");n&&(n.classList.remove(e.nestedClass),a(n,e))}},i=function(t,e){if(t){var o=t.nav.closest("li");o&&(o.classList.remove(e.navClass),t.content.classList.remove(e.contentClass),a(o,e),n("gumshoeDeactivate",o,{link:t.nav,content:t.content,settings:e}))}},u=function(t,e){if(e.nested){var n=t.parentNode.closest("li");n&&(n.classList.add(e.nestedClass),u(n,e))}};return function(o,c){var s,a,d,f,m,v={setup:function(){s=document.querySelectorAll(o),a=[],Array.prototype.forEach.call(s,(function(t){var e=document.getElementById(decodeURIComponent(t.hash.substr(1)));e&&a.push({nav:t,content:e})})),r(a)},detect:function(){var t=l(a,m);t?d&&t.content===d.content||(i(d,m),function(t,e){if(t){var o=t.nav.closest("li");o&&(o.classList.add(e.navClass),t.content.classList.add(e.contentClass),u(o,e),n("gumshoeActivate",o,{link:t.nav,content:t.content,settings:e}))}}(t,m),d=t):d&&(i(d,m),d=null)}},h=function(e){f&&t.cancelAnimationFrame(f),f=t.requestAnimationFrame(v.detect)},g=function(e){f&&t.cancelAnimationFrame(f),f=t.requestAnimationFrame((function(){r(a),v.detect()}))};return v.destroy=function(){d&&i(d,m),t.removeEventListener("scroll",h,!1),m.reflow&&t.removeEventListener("resize",g,!1),a=null,s=null,d=null,f=null,m=null},m=function(){var t={};return Array.prototype.forEach.call(arguments,(function(e){for(var n in e){if(!e.hasOwnProperty(n))return;t[n]=e[n]}})),t}(e,c||{}),v.setup(),v.detect(),t.addEventListener("scroll",h,!1),m.reflow&&t.addEventListener("resize",g,!1),v}}(r)}.apply(e,[]),void 0===o||(t.exports=o)}},e={};function n(o){var r=e[o];if(void 0!==r)return r.exports;var c=e[o]={exports:{}};return t[o].call(c.exports,c,c.exports,n),c.exports}n.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return n.d(e,{a:e}),e},n.d=(t,e)=>{for(var o in e)n.o(e,o)&&!n.o(t,o)&&Object.defineProperty(t,o,{enumerable:!0,get:e[o]})},n.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),n.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),(()=>{"use strict";var t=n(856),e=n.n(t),o=null,r=null,c=document.documentElement.scrollTop;const s=64;function l(){const t=localStorage.getItem("theme")||"auto";var e;"light"!==(e=window.matchMedia("(prefers-color-scheme: dark)").matches?"auto"===t?"light":"light"==t?"dark":"auto":"auto"===t?"dark":"dark"==t?"light":"auto")&&"dark"!==e&&"auto"!==e&&(console.error(`Got invalid theme mode: ${e}. Resetting to auto.`),e="auto"),document.body.dataset.theme=e,localStorage.setItem("theme",e),console.log(`Changed to ${e} mode.`)}function a(){!function(){const t=document.getElementsByClassName("theme-toggle");Array.from(t).forEach((t=>{t.addEventListener("click",l)}))}(),function(){let t=0,e=!1;window.addEventListener("scroll",(function(n){t=window.scrollY,e||(window.requestAnimationFrame((function(){var n;(function(t){const e=Math.floor(r.getBoundingClientRect().top);console.log(`headerTop: ${e}`),0==e&&t!=e?r.classList.add("scrolled"):r.classList.remove("scrolled")})(n=t),function(t){tc&&document.documentElement.classList.remove("show-back-to-top"),c=t}(n),function(t){null!==o&&(0==t?o.scrollTo(0,0):Math.ceil(t)>=Math.floor(document.documentElement.scrollHeight-window.innerHeight)?o.scrollTo(0,o.scrollHeight):document.querySelector(".scroll-current"))}(n),e=!1})),e=!0)})),window.scroll()}(),null!==o&&new(e())(".toc-tree a",{reflow:!0,recursive:!0,navClass:"scroll-current",offset:()=>{let t=parseFloat(getComputedStyle(document.documentElement).fontSize);return r.getBoundingClientRect().height+2.5*t+1}})}document.addEventListener("DOMContentLoaded",(function(){document.body.parentNode.classList.remove("no-js"),r=document.querySelector("header"),o=document.querySelector(".toc-scroll"),a()}))})()})(); +//# sourceMappingURL=furo.js.map \ No newline at end of file diff --git a/_static/scripts/furo.js.LICENSE.txt b/_static/scripts/furo.js.LICENSE.txt new file mode 100644 index 0000000..1632189 --- /dev/null +++ b/_static/scripts/furo.js.LICENSE.txt @@ -0,0 +1,7 @@ +/*! + * gumshoejs v5.1.2 (patched by @pradyunsg) + * A simple, framework-agnostic scrollspy script. + * (c) 2019 Chris Ferdinandi + * MIT License + * http://github.com/cferdinandi/gumshoe + */ diff --git a/_static/scripts/furo.js.map b/_static/scripts/furo.js.map new file mode 100644 index 0000000..80ea12b --- /dev/null +++ b/_static/scripts/furo.js.map @@ -0,0 +1 @@ +{"version":3,"file":"scripts/furo.js","mappings":";iCAAA,MAQWA,SAWS,IAAX,EAAAC,EACH,EAAAA,EACkB,oBAAXC,OACLA,OACAC,KAbO,EAAF,WACP,OAaJ,SAAUD,GACR,aAMA,IAAIE,EAAW,CAEbC,SAAU,SACVC,aAAc,SAGdC,QAAQ,EACRC,YAAa,SAGbC,OAAQ,EACRC,QAAQ,EAGRC,QAAQ,GA6BNC,EAAY,SAAUC,EAAMC,EAAMC,GAEpC,GAAKA,EAAOC,SAASL,OAArB,CAGA,IAAIM,EAAQ,IAAIC,YAAYL,EAAM,CAChCM,SAAS,EACTC,YAAY,EACZL,OAAQA,IAIVD,EAAKO,cAAcJ,EAVgB,CAWrC,EAOIK,EAAe,SAAUR,GAC3B,IAAIS,EAAW,EACf,GAAIT,EAAKU,aACP,KAAOV,GACLS,GAAYT,EAAKW,UACjBX,EAAOA,EAAKU,aAGhB,OAAOD,GAAY,EAAIA,EAAW,CACpC,EAMIG,EAAe,SAAUC,GACvBA,GACFA,EAASC,MAAK,SAAUC,EAAOC,GAG7B,OAFcR,EAAaO,EAAME,SACnBT,EAAaQ,EAAMC,UACF,EACxB,CACT,GAEJ,EAwCIC,EAAW,SAAUlB,EAAME,EAAUiB,GACvC,IAAIC,EAASpB,EAAKqB,wBACd1B,EAnCU,SAAUO,GAExB,MAA+B,mBAApBA,EAASP,OACX2B,WAAWpB,EAASP,UAItB2B,WAAWpB,EAASP,OAC7B,CA2Be4B,CAAUrB,GACvB,OAAIiB,EAEAK,SAASJ,EAAOD,OAAQ,KACvB/B,EAAOqC,aAAeC,SAASC,gBAAgBC,cAG7CJ,SAASJ,EAAOS,IAAK,KAAOlC,CACrC,EAMImC,EAAa,WACf,OACEC,KAAKC,KAAK5C,EAAOqC,YAAcrC,EAAO6C,cAnCjCF,KAAKG,IACVR,SAASS,KAAKC,aACdV,SAASC,gBAAgBS,aACzBV,SAASS,KAAKE,aACdX,SAASC,gBAAgBU,aACzBX,SAASS,KAAKP,aACdF,SAASC,gBAAgBC,aAkC7B,EAmBIU,EAAY,SAAUzB,EAAUX,GAClC,IAAIqC,EAAO1B,EAASA,EAAS2B,OAAS,GACtC,GAbgB,SAAUC,EAAMvC,GAChC,SAAI4B,MAAgBZ,EAASuB,EAAKxB,QAASf,GAAU,GAEvD,CAUMwC,CAAYH,EAAMrC,GAAW,OAAOqC,EACxC,IAAK,IAAII,EAAI9B,EAAS2B,OAAS,EAAGG,GAAK,EAAGA,IACxC,GAAIzB,EAASL,EAAS8B,GAAG1B,QAASf,GAAW,OAAOW,EAAS8B,EAEjE,EAOIC,EAAmB,SAAUC,EAAK3C,GAEpC,GAAKA,EAAST,QAAWoD,EAAIC,WAA7B,CAGA,IAAIC,EAAKF,EAAIC,WAAWE,QAAQ,MAC3BD,IAGLA,EAAGE,UAAUC,OAAOhD,EAASR,aAG7BkD,EAAiBG,EAAI7C,GAV0B,CAWjD,EAOIiD,EAAa,SAAUC,EAAOlD,GAEhC,GAAKkD,EAAL,CAGA,IAAIL,EAAKK,EAAMP,IAAIG,QAAQ,MACtBD,IAGLA,EAAGE,UAAUC,OAAOhD,EAASX,UAC7B6D,EAAMnC,QAAQgC,UAAUC,OAAOhD,EAASV,cAGxCoD,EAAiBG,EAAI7C,GAGrBJ,EAAU,oBAAqBiD,EAAI,CACjCM,KAAMD,EAAMP,IACZ5B,QAASmC,EAAMnC,QACff,SAAUA,IAjBM,CAmBpB,EAOIoD,EAAiB,SAAUT,EAAK3C,GAElC,GAAKA,EAAST,OAAd,CAGA,IAAIsD,EAAKF,EAAIC,WAAWE,QAAQ,MAC3BD,IAGLA,EAAGE,UAAUM,IAAIrD,EAASR,aAG1B4D,EAAeP,EAAI7C,GAVS,CAW9B,EA6LA,OA1JkB,SAAUsD,EAAUC,GAKpC,IACIC,EAAU7C,EAAU8C,EAASC,EAAS1D,EADtC2D,EAAa,CAUjBA,MAAmB,WAEjBH,EAAWhC,SAASoC,iBAAiBN,GAGrC3C,EAAW,GAGXkD,MAAMC,UAAUC,QAAQC,KAAKR,GAAU,SAAUjB,GAE/C,IAAIxB,EAAUS,SAASyC,eACrBC,mBAAmB3B,EAAK4B,KAAKC,OAAO,KAEjCrD,GAGLJ,EAAS0D,KAAK,CACZ1B,IAAKJ,EACLxB,QAASA,GAEb,IAGAL,EAAaC,EACf,EAKAgD,OAAoB,WAElB,IAAIW,EAASlC,EAAUzB,EAAUX,GAG5BsE,EASDb,GAAWa,EAAOvD,UAAY0C,EAAQ1C,UAG1CkC,EAAWQ,EAASzD,GAzFT,SAAUkD,EAAOlD,GAE9B,GAAKkD,EAAL,CAGA,IAAIL,EAAKK,EAAMP,IAAIG,QAAQ,MACtBD,IAGLA,EAAGE,UAAUM,IAAIrD,EAASX,UAC1B6D,EAAMnC,QAAQgC,UAAUM,IAAIrD,EAASV,cAGrC8D,EAAeP,EAAI7C,GAGnBJ,EAAU,kBAAmBiD,EAAI,CAC/BM,KAAMD,EAAMP,IACZ5B,QAASmC,EAAMnC,QACff,SAAUA,IAjBM,CAmBpB,CAqEIuE,CAASD,EAAQtE,GAGjByD,EAAUa,GAfJb,IACFR,EAAWQ,EAASzD,GACpByD,EAAU,KAchB,GAMIe,EAAgB,SAAUvE,GAExByD,GACFxE,EAAOuF,qBAAqBf,GAI9BA,EAAUxE,EAAOwF,sBAAsBf,EAAWgB,OACpD,EAMIC,EAAgB,SAAU3E,GAExByD,GACFxE,EAAOuF,qBAAqBf,GAI9BA,EAAUxE,EAAOwF,uBAAsB,WACrChE,EAAaC,GACbgD,EAAWgB,QACb,GACF,EAkDA,OA7CAhB,EAAWkB,QAAU,WAEfpB,GACFR,EAAWQ,EAASzD,GAItBd,EAAO4F,oBAAoB,SAAUN,GAAe,GAChDxE,EAASN,QACXR,EAAO4F,oBAAoB,SAAUF,GAAe,GAItDjE,EAAW,KACX6C,EAAW,KACXC,EAAU,KACVC,EAAU,KACV1D,EAAW,IACb,EAOEA,EA3XS,WACX,IAAI+E,EAAS,CAAC,EAOd,OANAlB,MAAMC,UAAUC,QAAQC,KAAKgB,WAAW,SAAUC,GAChD,IAAK,IAAIC,KAAOD,EAAK,CACnB,IAAKA,EAAIE,eAAeD,GAAM,OAC9BH,EAAOG,GAAOD,EAAIC,EACpB,CACF,IACOH,CACT,CAkXeK,CAAOhG,EAAUmE,GAAW,CAAC,GAGxCI,EAAW0B,QAGX1B,EAAWgB,SAGXzF,EAAOoG,iBAAiB,SAAUd,GAAe,GAC7CxE,EAASN,QACXR,EAAOoG,iBAAiB,SAAUV,GAAe,GAS9CjB,CACT,CAOF,CArcW4B,CAAQvG,EAChB,UAFM,SAEN,uBCXDwG,EAA2B,CAAC,EAGhC,SAASC,EAAoBC,GAE5B,IAAIC,EAAeH,EAAyBE,GAC5C,QAAqBE,IAAjBD,EACH,OAAOA,EAAaE,QAGrB,IAAIC,EAASN,EAAyBE,GAAY,CAGjDG,QAAS,CAAC,GAOX,OAHAE,EAAoBL,GAAU1B,KAAK8B,EAAOD,QAASC,EAAQA,EAAOD,QAASJ,GAGpEK,EAAOD,OACf,CCrBAJ,EAAoBO,EAAKF,IACxB,IAAIG,EAASH,GAAUA,EAAOI,WAC7B,IAAOJ,EAAiB,QACxB,IAAM,EAEP,OADAL,EAAoBU,EAAEF,EAAQ,CAAEG,EAAGH,IAC5BA,CAAM,ECLdR,EAAoBU,EAAI,CAACN,EAASQ,KACjC,IAAI,IAAInB,KAAOmB,EACXZ,EAAoBa,EAAED,EAAYnB,KAASO,EAAoBa,EAAET,EAASX,IAC5EqB,OAAOC,eAAeX,EAASX,EAAK,CAAEuB,YAAY,EAAMC,IAAKL,EAAWnB,IAE1E,ECNDO,EAAoBxG,EAAI,WACvB,GAA0B,iBAAf0H,WAAyB,OAAOA,WAC3C,IACC,OAAOxH,MAAQ,IAAIyH,SAAS,cAAb,EAChB,CAAE,MAAOC,GACR,GAAsB,iBAAX3H,OAAqB,OAAOA,MACxC,CACA,CAPuB,GCAxBuG,EAAoBa,EAAI,CAACrB,EAAK6B,IAAUP,OAAOzC,UAAUqB,eAAenB,KAAKiB,EAAK6B,4CCK9EC,EAAY,KACZC,EAAS,KACTC,EAAgBzF,SAASC,gBAAgByF,UAC7C,MAAMC,EAAmB,GA8EzB,SAASC,IACP,MAAMC,EAAeC,aAAaC,QAAQ,UAAY,OAZxD,IAAkBC,EACH,WADGA,EAaItI,OAAOuI,WAAW,gCAAgCC,QAI/C,SAAjBL,EACO,QACgB,SAAhBA,EACA,OAEA,OAIU,SAAjBA,EACO,OACgB,QAAhBA,EACA,QAEA,SA9BoB,SAATG,GAA4B,SAATA,IACzCG,QAAQC,MAAM,2BAA2BJ,yBACzCA,EAAO,QAGThG,SAASS,KAAK4F,QAAQC,MAAQN,EAC9BF,aAAaS,QAAQ,QAASP,GAC9BG,QAAQK,IAAI,cAAcR,UA0B5B,CAkDA,SAASnC,KART,WAEE,MAAM4C,EAAUzG,SAAS0G,uBAAuB,gBAChDrE,MAAMsE,KAAKF,GAASlE,SAASqE,IAC3BA,EAAI9C,iBAAiB,QAAS8B,EAAe,GAEjD,CAGEiB,GA9CF,WAEE,IAAIC,EAA6B,EAC7BC,GAAU,EAEdrJ,OAAOoG,iBAAiB,UAAU,SAAUuB,GAC1CyB,EAA6BpJ,OAAOsJ,QAE/BD,IACHrJ,OAAOwF,uBAAsB,WAzDnC,IAAuB+D,GAxDvB,SAAgCA,GAC9B,MAAMC,EAAY7G,KAAK8G,MAAM3B,EAAO7F,wBAAwBQ,KAE5DgG,QAAQK,IAAI,cAAcU,KACT,GAAbA,GAAkBD,GAAaC,EACjC1B,EAAOjE,UAAUM,IAAI,YAErB2D,EAAOjE,UAAUC,OAAO,WAE5B,EAgDE4F,CADqBH,EA0DDH,GAvGtB,SAAmCG,GAC7BA,EAAYtB,EACd3F,SAASC,gBAAgBsB,UAAUC,OAAO,oBAEtCyF,EAAYxB,EACdzF,SAASC,gBAAgBsB,UAAUM,IAAI,oBAC9BoF,EAAYxB,GACrBzF,SAASC,gBAAgBsB,UAAUC,OAAO,oBAG9CiE,EAAgBwB,CAClB,CAoCEI,CAA0BJ,GAlC5B,SAA6BA,GACT,OAAd1B,IAKa,GAAb0B,EACF1B,EAAU+B,SAAS,EAAG,GAGtBjH,KAAKC,KAAK2G,IACV5G,KAAK8G,MAAMnH,SAASC,gBAAgBS,aAAehD,OAAOqC,aAE1DwF,EAAU+B,SAAS,EAAG/B,EAAU7E,cAGhBV,SAASuH,cAAc,mBAc3C,CAKEC,CAAoBP,GAwDdF,GAAU,CACZ,IAEAA,GAAU,EAEd,IACArJ,OAAO+J,QACT,CA6BEC,GA1BkB,OAAdnC,GAKJ,IAAI,IAAJ,CAAY,cAAe,CACzBrH,QAAQ,EACRyJ,WAAW,EACX9J,SAAU,iBACVI,OAAQ,KACN,IAAI2J,EAAMhI,WAAWiI,iBAAiB7H,SAASC,iBAAiB6H,UAChE,OAAOtC,EAAO7F,wBAAwBoI,OAAS,IAAMH,EAAM,CAAC,GAiBlE,CAcA5H,SAAS8D,iBAAiB,oBAT1B,WACE9D,SAASS,KAAKW,WAAWG,UAAUC,OAAO,SAE1CgE,EAASxF,SAASuH,cAAc,UAChChC,EAAYvF,SAASuH,cAAc,eAEnC1D,GACF","sources":["webpack:///./src/furo/assets/scripts/gumshoe-patched.js","webpack:///webpack/bootstrap","webpack:///webpack/runtime/compat get default export","webpack:///webpack/runtime/define property getters","webpack:///webpack/runtime/global","webpack:///webpack/runtime/hasOwnProperty shorthand","webpack:///./src/furo/assets/scripts/furo.js"],"sourcesContent":["/*!\n * gumshoejs v5.1.2 (patched by @pradyunsg)\n * A simple, framework-agnostic scrollspy script.\n * (c) 2019 Chris Ferdinandi\n * MIT License\n * http://github.com/cferdinandi/gumshoe\n */\n\n(function (root, factory) {\n if (typeof define === \"function\" && define.amd) {\n define([], function () {\n return factory(root);\n });\n } else if (typeof exports === \"object\") {\n module.exports = factory(root);\n } else {\n root.Gumshoe = factory(root);\n }\n})(\n typeof global !== \"undefined\"\n ? global\n : typeof window !== \"undefined\"\n ? window\n : this,\n function (window) {\n \"use strict\";\n\n //\n // Defaults\n //\n\n var defaults = {\n // Active classes\n navClass: \"active\",\n contentClass: \"active\",\n\n // Nested navigation\n nested: false,\n nestedClass: \"active\",\n\n // Offset & reflow\n offset: 0,\n reflow: false,\n\n // Event support\n events: true,\n };\n\n //\n // Methods\n //\n\n /**\n * Merge two or more objects together.\n * @param {Object} objects The objects to merge together\n * @returns {Object} Merged values of defaults and options\n */\n var extend = function () {\n var merged = {};\n Array.prototype.forEach.call(arguments, function (obj) {\n for (var key in obj) {\n if (!obj.hasOwnProperty(key)) return;\n merged[key] = obj[key];\n }\n });\n return merged;\n };\n\n /**\n * Emit a custom event\n * @param {String} type The event type\n * @param {Node} elem The element to attach the event to\n * @param {Object} detail Any details to pass along with the event\n */\n var emitEvent = function (type, elem, detail) {\n // Make sure events are enabled\n if (!detail.settings.events) return;\n\n // Create a new event\n var event = new CustomEvent(type, {\n bubbles: true,\n cancelable: true,\n detail: detail,\n });\n\n // Dispatch the event\n elem.dispatchEvent(event);\n };\n\n /**\n * Get an element's distance from the top of the Document.\n * @param {Node} elem The element\n * @return {Number} Distance from the top in pixels\n */\n var getOffsetTop = function (elem) {\n var location = 0;\n if (elem.offsetParent) {\n while (elem) {\n location += elem.offsetTop;\n elem = elem.offsetParent;\n }\n }\n return location >= 0 ? location : 0;\n };\n\n /**\n * Sort content from first to last in the DOM\n * @param {Array} contents The content areas\n */\n var sortContents = function (contents) {\n if (contents) {\n contents.sort(function (item1, item2) {\n var offset1 = getOffsetTop(item1.content);\n var offset2 = getOffsetTop(item2.content);\n if (offset1 < offset2) return -1;\n return 1;\n });\n }\n };\n\n /**\n * Get the offset to use for calculating position\n * @param {Object} settings The settings for this instantiation\n * @return {Float} The number of pixels to offset the calculations\n */\n var getOffset = function (settings) {\n // if the offset is a function run it\n if (typeof settings.offset === \"function\") {\n return parseFloat(settings.offset());\n }\n\n // Otherwise, return it as-is\n return parseFloat(settings.offset);\n };\n\n /**\n * Get the document element's height\n * @private\n * @returns {Number}\n */\n var getDocumentHeight = function () {\n return Math.max(\n document.body.scrollHeight,\n document.documentElement.scrollHeight,\n document.body.offsetHeight,\n document.documentElement.offsetHeight,\n document.body.clientHeight,\n document.documentElement.clientHeight,\n );\n };\n\n /**\n * Determine if an element is in view\n * @param {Node} elem The element\n * @param {Object} settings The settings for this instantiation\n * @param {Boolean} bottom If true, check if element is above bottom of viewport instead\n * @return {Boolean} Returns true if element is in the viewport\n */\n var isInView = function (elem, settings, bottom) {\n var bounds = elem.getBoundingClientRect();\n var offset = getOffset(settings);\n if (bottom) {\n return (\n parseInt(bounds.bottom, 10) <\n (window.innerHeight || document.documentElement.clientHeight)\n );\n }\n return parseInt(bounds.top, 10) <= offset;\n };\n\n /**\n * Check if at the bottom of the viewport\n * @return {Boolean} If true, page is at the bottom of the viewport\n */\n var isAtBottom = function () {\n if (\n Math.ceil(window.innerHeight + window.pageYOffset) >=\n getDocumentHeight()\n )\n return true;\n return false;\n };\n\n /**\n * Check if the last item should be used (even if not at the top of the page)\n * @param {Object} item The last item\n * @param {Object} settings The settings for this instantiation\n * @return {Boolean} If true, use the last item\n */\n var useLastItem = function (item, settings) {\n if (isAtBottom() && isInView(item.content, settings, true)) return true;\n return false;\n };\n\n /**\n * Get the active content\n * @param {Array} contents The content areas\n * @param {Object} settings The settings for this instantiation\n * @return {Object} The content area and matching navigation link\n */\n var getActive = function (contents, settings) {\n var last = contents[contents.length - 1];\n if (useLastItem(last, settings)) return last;\n for (var i = contents.length - 1; i >= 0; i--) {\n if (isInView(contents[i].content, settings)) return contents[i];\n }\n };\n\n /**\n * Deactivate parent navs in a nested navigation\n * @param {Node} nav The starting navigation element\n * @param {Object} settings The settings for this instantiation\n */\n var deactivateNested = function (nav, settings) {\n // If nesting isn't activated, bail\n if (!settings.nested || !nav.parentNode) return;\n\n // Get the parent navigation\n var li = nav.parentNode.closest(\"li\");\n if (!li) return;\n\n // Remove the active class\n li.classList.remove(settings.nestedClass);\n\n // Apply recursively to any parent navigation elements\n deactivateNested(li, settings);\n };\n\n /**\n * Deactivate a nav and content area\n * @param {Object} items The nav item and content to deactivate\n * @param {Object} settings The settings for this instantiation\n */\n var deactivate = function (items, settings) {\n // Make sure there are items to deactivate\n if (!items) return;\n\n // Get the parent list item\n var li = items.nav.closest(\"li\");\n if (!li) return;\n\n // Remove the active class from the nav and content\n li.classList.remove(settings.navClass);\n items.content.classList.remove(settings.contentClass);\n\n // Deactivate any parent navs in a nested navigation\n deactivateNested(li, settings);\n\n // Emit a custom event\n emitEvent(\"gumshoeDeactivate\", li, {\n link: items.nav,\n content: items.content,\n settings: settings,\n });\n };\n\n /**\n * Activate parent navs in a nested navigation\n * @param {Node} nav The starting navigation element\n * @param {Object} settings The settings for this instantiation\n */\n var activateNested = function (nav, settings) {\n // If nesting isn't activated, bail\n if (!settings.nested) return;\n\n // Get the parent navigation\n var li = nav.parentNode.closest(\"li\");\n if (!li) return;\n\n // Add the active class\n li.classList.add(settings.nestedClass);\n\n // Apply recursively to any parent navigation elements\n activateNested(li, settings);\n };\n\n /**\n * Activate a nav and content area\n * @param {Object} items The nav item and content to activate\n * @param {Object} settings The settings for this instantiation\n */\n var activate = function (items, settings) {\n // Make sure there are items to activate\n if (!items) return;\n\n // Get the parent list item\n var li = items.nav.closest(\"li\");\n if (!li) return;\n\n // Add the active class to the nav and content\n li.classList.add(settings.navClass);\n items.content.classList.add(settings.contentClass);\n\n // Activate any parent navs in a nested navigation\n activateNested(li, settings);\n\n // Emit a custom event\n emitEvent(\"gumshoeActivate\", li, {\n link: items.nav,\n content: items.content,\n settings: settings,\n });\n };\n\n /**\n * Create the Constructor object\n * @param {String} selector The selector to use for navigation items\n * @param {Object} options User options and settings\n */\n var Constructor = function (selector, options) {\n //\n // Variables\n //\n\n var publicAPIs = {};\n var navItems, contents, current, timeout, settings;\n\n //\n // Methods\n //\n\n /**\n * Set variables from DOM elements\n */\n publicAPIs.setup = function () {\n // Get all nav items\n navItems = document.querySelectorAll(selector);\n\n // Create contents array\n contents = [];\n\n // Loop through each item, get it's matching content, and push to the array\n Array.prototype.forEach.call(navItems, function (item) {\n // Get the content for the nav item\n var content = document.getElementById(\n decodeURIComponent(item.hash.substr(1)),\n );\n if (!content) return;\n\n // Push to the contents array\n contents.push({\n nav: item,\n content: content,\n });\n });\n\n // Sort contents by the order they appear in the DOM\n sortContents(contents);\n };\n\n /**\n * Detect which content is currently active\n */\n publicAPIs.detect = function () {\n // Get the active content\n var active = getActive(contents, settings);\n\n // if there's no active content, deactivate and bail\n if (!active) {\n if (current) {\n deactivate(current, settings);\n current = null;\n }\n return;\n }\n\n // If the active content is the one currently active, do nothing\n if (current && active.content === current.content) return;\n\n // Deactivate the current content and activate the new content\n deactivate(current, settings);\n activate(active, settings);\n\n // Update the currently active content\n current = active;\n };\n\n /**\n * Detect the active content on scroll\n * Debounced for performance\n */\n var scrollHandler = function (event) {\n // If there's a timer, cancel it\n if (timeout) {\n window.cancelAnimationFrame(timeout);\n }\n\n // Setup debounce callback\n timeout = window.requestAnimationFrame(publicAPIs.detect);\n };\n\n /**\n * Update content sorting on resize\n * Debounced for performance\n */\n var resizeHandler = function (event) {\n // If there's a timer, cancel it\n if (timeout) {\n window.cancelAnimationFrame(timeout);\n }\n\n // Setup debounce callback\n timeout = window.requestAnimationFrame(function () {\n sortContents(contents);\n publicAPIs.detect();\n });\n };\n\n /**\n * Destroy the current instantiation\n */\n publicAPIs.destroy = function () {\n // Undo DOM changes\n if (current) {\n deactivate(current, settings);\n }\n\n // Remove event listeners\n window.removeEventListener(\"scroll\", scrollHandler, false);\n if (settings.reflow) {\n window.removeEventListener(\"resize\", resizeHandler, false);\n }\n\n // Reset variables\n contents = null;\n navItems = null;\n current = null;\n timeout = null;\n settings = null;\n };\n\n /**\n * Initialize the current instantiation\n */\n var init = function () {\n // Merge user options into defaults\n settings = extend(defaults, options || {});\n\n // Setup variables based on the current DOM\n publicAPIs.setup();\n\n // Find the currently active content\n publicAPIs.detect();\n\n // Setup event listeners\n window.addEventListener(\"scroll\", scrollHandler, false);\n if (settings.reflow) {\n window.addEventListener(\"resize\", resizeHandler, false);\n }\n };\n\n //\n // Initialize and return the public APIs\n //\n\n init();\n return publicAPIs;\n };\n\n //\n // Return the Constructor\n //\n\n return Constructor;\n },\n);\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","import Gumshoe from \"./gumshoe-patched.js\";\n\n////////////////////////////////////////////////////////////////////////////////\n// Scroll Handling\n////////////////////////////////////////////////////////////////////////////////\nvar tocScroll = null;\nvar header = null;\nvar lastScrollTop = document.documentElement.scrollTop;\nconst GO_TO_TOP_OFFSET = 64;\n\nfunction scrollHandlerForHeader(positionY) {\n const headerTop = Math.floor(header.getBoundingClientRect().top);\n\n console.log(`headerTop: ${headerTop}`);\n if (headerTop == 0 && positionY != headerTop) {\n header.classList.add(\"scrolled\");\n } else {\n header.classList.remove(\"scrolled\");\n }\n}\n\nfunction scrollHandlerForBackToTop(positionY) {\n if (positionY < GO_TO_TOP_OFFSET) {\n document.documentElement.classList.remove(\"show-back-to-top\");\n } else {\n if (positionY < lastScrollTop) {\n document.documentElement.classList.add(\"show-back-to-top\");\n } else if (positionY > lastScrollTop) {\n document.documentElement.classList.remove(\"show-back-to-top\");\n }\n }\n lastScrollTop = positionY;\n}\n\nfunction scrollHandlerForTOC(positionY) {\n if (tocScroll === null) {\n return;\n }\n\n // top of page.\n if (positionY == 0) {\n tocScroll.scrollTo(0, 0);\n } else if (\n // bottom of page.\n Math.ceil(positionY) >=\n Math.floor(document.documentElement.scrollHeight - window.innerHeight)\n ) {\n tocScroll.scrollTo(0, tocScroll.scrollHeight);\n } else {\n // somewhere in the middle.\n const current = document.querySelector(\".scroll-current\");\n if (current == null) {\n return;\n }\n\n // https://github.com/pypa/pip/issues/9159 This breaks scroll behaviours.\n // // scroll the currently \"active\" heading in toc, into view.\n // const rect = current.getBoundingClientRect();\n // if (0 > rect.top) {\n // current.scrollIntoView(true); // the argument is \"alignTop\"\n // } else if (rect.bottom > window.innerHeight) {\n // current.scrollIntoView(false);\n // }\n }\n}\n\nfunction scrollHandler(positionY) {\n scrollHandlerForHeader(positionY);\n scrollHandlerForBackToTop(positionY);\n scrollHandlerForTOC(positionY);\n}\n\n////////////////////////////////////////////////////////////////////////////////\n// Theme Toggle\n////////////////////////////////////////////////////////////////////////////////\nfunction setTheme(mode) {\n if (mode !== \"light\" && mode !== \"dark\" && mode !== \"auto\") {\n console.error(`Got invalid theme mode: ${mode}. Resetting to auto.`);\n mode = \"auto\";\n }\n\n document.body.dataset.theme = mode;\n localStorage.setItem(\"theme\", mode);\n console.log(`Changed to ${mode} mode.`);\n}\n\nfunction cycleThemeOnce() {\n const currentTheme = localStorage.getItem(\"theme\") || \"auto\";\n const prefersDark = window.matchMedia(\"(prefers-color-scheme: dark)\").matches;\n\n if (prefersDark) {\n // Auto (dark) -> Light -> Dark\n if (currentTheme === \"auto\") {\n setTheme(\"light\");\n } else if (currentTheme == \"light\") {\n setTheme(\"dark\");\n } else {\n setTheme(\"auto\");\n }\n } else {\n // Auto (light) -> Dark -> Light\n if (currentTheme === \"auto\") {\n setTheme(\"dark\");\n } else if (currentTheme == \"dark\") {\n setTheme(\"light\");\n } else {\n setTheme(\"auto\");\n }\n }\n}\n\n////////////////////////////////////////////////////////////////////////////////\n// Setup\n////////////////////////////////////////////////////////////////////////////////\nfunction setupScrollHandler() {\n // Taken from https://developer.mozilla.org/en-US/docs/Web/API/Document/scroll_event\n let last_known_scroll_position = 0;\n let ticking = false;\n\n window.addEventListener(\"scroll\", function (e) {\n last_known_scroll_position = window.scrollY;\n\n if (!ticking) {\n window.requestAnimationFrame(function () {\n scrollHandler(last_known_scroll_position);\n ticking = false;\n });\n\n ticking = true;\n }\n });\n window.scroll();\n}\n\nfunction setupScrollSpy() {\n if (tocScroll === null) {\n return;\n }\n\n // Scrollspy -- highlight table on contents, based on scroll\n new Gumshoe(\".toc-tree a\", {\n reflow: true,\n recursive: true,\n navClass: \"scroll-current\",\n offset: () => {\n let rem = parseFloat(getComputedStyle(document.documentElement).fontSize);\n return header.getBoundingClientRect().height + 2.5 * rem + 1;\n },\n });\n}\n\nfunction setupTheme() {\n // Attach event handlers for toggling themes\n const buttons = document.getElementsByClassName(\"theme-toggle\");\n Array.from(buttons).forEach((btn) => {\n btn.addEventListener(\"click\", cycleThemeOnce);\n });\n}\n\nfunction setup() {\n setupTheme();\n setupScrollHandler();\n setupScrollSpy();\n}\n\n////////////////////////////////////////////////////////////////////////////////\n// Main entrypoint\n////////////////////////////////////////////////////////////////////////////////\nfunction main() {\n document.body.parentNode.classList.remove(\"no-js\");\n\n header = document.querySelector(\"header\");\n tocScroll = document.querySelector(\".toc-scroll\");\n\n setup();\n}\n\ndocument.addEventListener(\"DOMContentLoaded\", main);\n"],"names":["root","g","window","this","defaults","navClass","contentClass","nested","nestedClass","offset","reflow","events","emitEvent","type","elem","detail","settings","event","CustomEvent","bubbles","cancelable","dispatchEvent","getOffsetTop","location","offsetParent","offsetTop","sortContents","contents","sort","item1","item2","content","isInView","bottom","bounds","getBoundingClientRect","parseFloat","getOffset","parseInt","innerHeight","document","documentElement","clientHeight","top","isAtBottom","Math","ceil","pageYOffset","max","body","scrollHeight","offsetHeight","getActive","last","length","item","useLastItem","i","deactivateNested","nav","parentNode","li","closest","classList","remove","deactivate","items","link","activateNested","add","selector","options","navItems","current","timeout","publicAPIs","querySelectorAll","Array","prototype","forEach","call","getElementById","decodeURIComponent","hash","substr","push","active","activate","scrollHandler","cancelAnimationFrame","requestAnimationFrame","detect","resizeHandler","destroy","removeEventListener","merged","arguments","obj","key","hasOwnProperty","extend","setup","addEventListener","factory","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","exports","module","__webpack_modules__","n","getter","__esModule","d","a","definition","o","Object","defineProperty","enumerable","get","globalThis","Function","e","prop","tocScroll","header","lastScrollTop","scrollTop","GO_TO_TOP_OFFSET","cycleThemeOnce","currentTheme","localStorage","getItem","mode","matchMedia","matches","console","error","dataset","theme","setItem","log","buttons","getElementsByClassName","from","btn","setupTheme","last_known_scroll_position","ticking","scrollY","positionY","headerTop","floor","scrollHandlerForHeader","scrollHandlerForBackToTop","scrollTo","querySelector","scrollHandlerForTOC","scroll","setupScrollHandler","recursive","rem","getComputedStyle","fontSize","height"],"sourceRoot":""} \ No newline at end of file diff --git a/_static/searchtools.js b/_static/searchtools.js new file mode 100644 index 0000000..7918c3f --- /dev/null +++ b/_static/searchtools.js @@ -0,0 +1,574 @@ +/* + * searchtools.js + * ~~~~~~~~~~~~~~~~ + * + * Sphinx JavaScript utilities for the full-text search. + * + * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ +"use strict"; + +/** + * Simple result scoring code. + */ +if (typeof Scorer === "undefined") { + var Scorer = { + // Implement the following function to further tweak the score for each result + // The function takes a result array [docname, title, anchor, descr, score, filename] + // and returns the new score. + /* + score: result => { + const [docname, title, anchor, descr, score, filename] = result + return score + }, + */ + + // query matches the full name of an object + objNameMatch: 11, + // or matches in the last dotted part of the object name + objPartialMatch: 6, + // Additive scores depending on the priority of the object + objPrio: { + 0: 15, // used to be importantResults + 1: 5, // used to be objectResults + 2: -5, // used to be unimportantResults + }, + // Used when the priority is not in the mapping. + objPrioDefault: 0, + + // query found in title + title: 15, + partialTitle: 7, + // query found in terms + term: 5, + partialTerm: 2, + }; +} + +const _removeChildren = (element) => { + while (element && element.lastChild) element.removeChild(element.lastChild); +}; + +/** + * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions#escaping + */ +const _escapeRegExp = (string) => + string.replace(/[.*+\-?^${}()|[\]\\]/g, "\\$&"); // $& means the whole matched string + +const _displayItem = (item, searchTerms, highlightTerms) => { + const docBuilder = DOCUMENTATION_OPTIONS.BUILDER; + const docFileSuffix = DOCUMENTATION_OPTIONS.FILE_SUFFIX; + const docLinkSuffix = DOCUMENTATION_OPTIONS.LINK_SUFFIX; + const showSearchSummary = DOCUMENTATION_OPTIONS.SHOW_SEARCH_SUMMARY; + const contentRoot = document.documentElement.dataset.content_root; + + const [docName, title, anchor, descr, score, _filename] = item; + + let listItem = document.createElement("li"); + let requestUrl; + let linkUrl; + if (docBuilder === "dirhtml") { + // dirhtml builder + let dirname = docName + "/"; + if (dirname.match(/\/index\/$/)) + dirname = dirname.substring(0, dirname.length - 6); + else if (dirname === "index/") dirname = ""; + requestUrl = contentRoot + dirname; + linkUrl = requestUrl; + } else { + // normal html builders + requestUrl = contentRoot + docName + docFileSuffix; + linkUrl = docName + docLinkSuffix; + } + let linkEl = listItem.appendChild(document.createElement("a")); + linkEl.href = linkUrl + anchor; + linkEl.dataset.score = score; + linkEl.innerHTML = title; + if (descr) { + listItem.appendChild(document.createElement("span")).innerHTML = + " (" + descr + ")"; + // highlight search terms in the description + if (SPHINX_HIGHLIGHT_ENABLED) // set in sphinx_highlight.js + highlightTerms.forEach((term) => _highlightText(listItem, term, "highlighted")); + } + else if (showSearchSummary) + fetch(requestUrl) + .then((responseData) => responseData.text()) + .then((data) => { + if (data) + listItem.appendChild( + Search.makeSearchSummary(data, searchTerms) + ); + // highlight search terms in the summary + if (SPHINX_HIGHLIGHT_ENABLED) // set in sphinx_highlight.js + highlightTerms.forEach((term) => _highlightText(listItem, term, "highlighted")); + }); + Search.output.appendChild(listItem); +}; +const _finishSearch = (resultCount) => { + Search.stopPulse(); + Search.title.innerText = _("Search Results"); + if (!resultCount) + Search.status.innerText = Documentation.gettext( + "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories." + ); + else + Search.status.innerText = _( + `Search finished, found ${resultCount} page(s) matching the search query.` + ); +}; +const _displayNextItem = ( + results, + resultCount, + searchTerms, + highlightTerms, +) => { + // results left, load the summary and display it + // this is intended to be dynamic (don't sub resultsCount) + if (results.length) { + _displayItem(results.pop(), searchTerms, highlightTerms); + setTimeout( + () => _displayNextItem(results, resultCount, searchTerms, highlightTerms), + 5 + ); + } + // search finished, update title and status message + else _finishSearch(resultCount); +}; + +/** + * Default splitQuery function. Can be overridden in ``sphinx.search`` with a + * custom function per language. + * + * The regular expression works by splitting the string on consecutive characters + * that are not Unicode letters, numbers, underscores, or emoji characters. + * This is the same as ``\W+`` in Python, preserving the surrogate pair area. + */ +if (typeof splitQuery === "undefined") { + var splitQuery = (query) => query + .split(/[^\p{Letter}\p{Number}_\p{Emoji_Presentation}]+/gu) + .filter(term => term) // remove remaining empty strings +} + +/** + * Search Module + */ +const Search = { + _index: null, + _queued_query: null, + _pulse_status: -1, + + htmlToText: (htmlString) => { + const htmlElement = new DOMParser().parseFromString(htmlString, 'text/html'); + htmlElement.querySelectorAll(".headerlink").forEach((el) => { el.remove() }); + const docContent = htmlElement.querySelector('[role="main"]'); + if (docContent !== undefined) return docContent.textContent; + console.warn( + "Content block not found. Sphinx search tries to obtain it via '[role=main]'. Could you check your theme or template." + ); + return ""; + }, + + init: () => { + const query = new URLSearchParams(window.location.search).get("q"); + document + .querySelectorAll('input[name="q"]') + .forEach((el) => (el.value = query)); + if (query) Search.performSearch(query); + }, + + loadIndex: (url) => + (document.body.appendChild(document.createElement("script")).src = url), + + setIndex: (index) => { + Search._index = index; + if (Search._queued_query !== null) { + const query = Search._queued_query; + Search._queued_query = null; + Search.query(query); + } + }, + + hasIndex: () => Search._index !== null, + + deferQuery: (query) => (Search._queued_query = query), + + stopPulse: () => (Search._pulse_status = -1), + + startPulse: () => { + if (Search._pulse_status >= 0) return; + + const pulse = () => { + Search._pulse_status = (Search._pulse_status + 1) % 4; + Search.dots.innerText = ".".repeat(Search._pulse_status); + if (Search._pulse_status >= 0) window.setTimeout(pulse, 500); + }; + pulse(); + }, + + /** + * perform a search for something (or wait until index is loaded) + */ + performSearch: (query) => { + // create the required interface elements + const searchText = document.createElement("h2"); + searchText.textContent = _("Searching"); + const searchSummary = document.createElement("p"); + searchSummary.classList.add("search-summary"); + searchSummary.innerText = ""; + const searchList = document.createElement("ul"); + searchList.classList.add("search"); + + const out = document.getElementById("search-results"); + Search.title = out.appendChild(searchText); + Search.dots = Search.title.appendChild(document.createElement("span")); + Search.status = out.appendChild(searchSummary); + Search.output = out.appendChild(searchList); + + const searchProgress = document.getElementById("search-progress"); + // Some themes don't use the search progress node + if (searchProgress) { + searchProgress.innerText = _("Preparing search..."); + } + Search.startPulse(); + + // index already loaded, the browser was quick! + if (Search.hasIndex()) Search.query(query); + else Search.deferQuery(query); + }, + + /** + * execute search (requires search index to be loaded) + */ + query: (query) => { + const filenames = Search._index.filenames; + const docNames = Search._index.docnames; + const titles = Search._index.titles; + const allTitles = Search._index.alltitles; + const indexEntries = Search._index.indexentries; + + // stem the search terms and add them to the correct list + const stemmer = new Stemmer(); + const searchTerms = new Set(); + const excludedTerms = new Set(); + const highlightTerms = new Set(); + const objectTerms = new Set(splitQuery(query.toLowerCase().trim())); + splitQuery(query.trim()).forEach((queryTerm) => { + const queryTermLower = queryTerm.toLowerCase(); + + // maybe skip this "word" + // stopwords array is from language_data.js + if ( + stopwords.indexOf(queryTermLower) !== -1 || + queryTerm.match(/^\d+$/) + ) + return; + + // stem the word + let word = stemmer.stemWord(queryTermLower); + // select the correct list + if (word[0] === "-") excludedTerms.add(word.substr(1)); + else { + searchTerms.add(word); + highlightTerms.add(queryTermLower); + } + }); + + if (SPHINX_HIGHLIGHT_ENABLED) { // set in sphinx_highlight.js + localStorage.setItem("sphinx_highlight_terms", [...highlightTerms].join(" ")) + } + + // console.debug("SEARCH: searching for:"); + // console.info("required: ", [...searchTerms]); + // console.info("excluded: ", [...excludedTerms]); + + // array of [docname, title, anchor, descr, score, filename] + let results = []; + _removeChildren(document.getElementById("search-progress")); + + const queryLower = query.toLowerCase(); + for (const [title, foundTitles] of Object.entries(allTitles)) { + if (title.toLowerCase().includes(queryLower) && (queryLower.length >= title.length/2)) { + for (const [file, id] of foundTitles) { + let score = Math.round(100 * queryLower.length / title.length) + results.push([ + docNames[file], + titles[file] !== title ? `${titles[file]} > ${title}` : title, + id !== null ? "#" + id : "", + null, + score, + filenames[file], + ]); + } + } + } + + // search for explicit entries in index directives + for (const [entry, foundEntries] of Object.entries(indexEntries)) { + if (entry.includes(queryLower) && (queryLower.length >= entry.length/2)) { + for (const [file, id] of foundEntries) { + let score = Math.round(100 * queryLower.length / entry.length) + results.push([ + docNames[file], + titles[file], + id ? "#" + id : "", + null, + score, + filenames[file], + ]); + } + } + } + + // lookup as object + objectTerms.forEach((term) => + results.push(...Search.performObjectSearch(term, objectTerms)) + ); + + // lookup as search terms in fulltext + results.push(...Search.performTermsSearch(searchTerms, excludedTerms)); + + // let the scorer override scores with a custom scoring function + if (Scorer.score) results.forEach((item) => (item[4] = Scorer.score(item))); + + // now sort the results by score (in opposite order of appearance, since the + // display function below uses pop() to retrieve items) and then + // alphabetically + results.sort((a, b) => { + const leftScore = a[4]; + const rightScore = b[4]; + if (leftScore === rightScore) { + // same score: sort alphabetically + const leftTitle = a[1].toLowerCase(); + const rightTitle = b[1].toLowerCase(); + if (leftTitle === rightTitle) return 0; + return leftTitle > rightTitle ? -1 : 1; // inverted is intentional + } + return leftScore > rightScore ? 1 : -1; + }); + + // remove duplicate search results + // note the reversing of results, so that in the case of duplicates, the highest-scoring entry is kept + let seen = new Set(); + results = results.reverse().reduce((acc, result) => { + let resultStr = result.slice(0, 4).concat([result[5]]).map(v => String(v)).join(','); + if (!seen.has(resultStr)) { + acc.push(result); + seen.add(resultStr); + } + return acc; + }, []); + + results = results.reverse(); + + // for debugging + //Search.lastresults = results.slice(); // a copy + // console.info("search results:", Search.lastresults); + + // print the results + _displayNextItem(results, results.length, searchTerms, highlightTerms); + }, + + /** + * search for object names + */ + performObjectSearch: (object, objectTerms) => { + const filenames = Search._index.filenames; + const docNames = Search._index.docnames; + const objects = Search._index.objects; + const objNames = Search._index.objnames; + const titles = Search._index.titles; + + const results = []; + + const objectSearchCallback = (prefix, match) => { + const name = match[4] + const fullname = (prefix ? prefix + "." : "") + name; + const fullnameLower = fullname.toLowerCase(); + if (fullnameLower.indexOf(object) < 0) return; + + let score = 0; + const parts = fullnameLower.split("."); + + // check for different match types: exact matches of full name or + // "last name" (i.e. last dotted part) + if (fullnameLower === object || parts.slice(-1)[0] === object) + score += Scorer.objNameMatch; + else if (parts.slice(-1)[0].indexOf(object) > -1) + score += Scorer.objPartialMatch; // matches in last name + + const objName = objNames[match[1]][2]; + const title = titles[match[0]]; + + // If more than one term searched for, we require other words to be + // found in the name/title/description + const otherTerms = new Set(objectTerms); + otherTerms.delete(object); + if (otherTerms.size > 0) { + const haystack = `${prefix} ${name} ${objName} ${title}`.toLowerCase(); + if ( + [...otherTerms].some((otherTerm) => haystack.indexOf(otherTerm) < 0) + ) + return; + } + + let anchor = match[3]; + if (anchor === "") anchor = fullname; + else if (anchor === "-") anchor = objNames[match[1]][1] + "-" + fullname; + + const descr = objName + _(", in ") + title; + + // add custom score for some objects according to scorer + if (Scorer.objPrio.hasOwnProperty(match[2])) + score += Scorer.objPrio[match[2]]; + else score += Scorer.objPrioDefault; + + results.push([ + docNames[match[0]], + fullname, + "#" + anchor, + descr, + score, + filenames[match[0]], + ]); + }; + Object.keys(objects).forEach((prefix) => + objects[prefix].forEach((array) => + objectSearchCallback(prefix, array) + ) + ); + return results; + }, + + /** + * search for full-text terms in the index + */ + performTermsSearch: (searchTerms, excludedTerms) => { + // prepare search + const terms = Search._index.terms; + const titleTerms = Search._index.titleterms; + const filenames = Search._index.filenames; + const docNames = Search._index.docnames; + const titles = Search._index.titles; + + const scoreMap = new Map(); + const fileMap = new Map(); + + // perform the search on the required terms + searchTerms.forEach((word) => { + const files = []; + const arr = [ + { files: terms[word], score: Scorer.term }, + { files: titleTerms[word], score: Scorer.title }, + ]; + // add support for partial matches + if (word.length > 2) { + const escapedWord = _escapeRegExp(word); + Object.keys(terms).forEach((term) => { + if (term.match(escapedWord) && !terms[word]) + arr.push({ files: terms[term], score: Scorer.partialTerm }); + }); + Object.keys(titleTerms).forEach((term) => { + if (term.match(escapedWord) && !titleTerms[word]) + arr.push({ files: titleTerms[word], score: Scorer.partialTitle }); + }); + } + + // no match but word was a required one + if (arr.every((record) => record.files === undefined)) return; + + // found search word in contents + arr.forEach((record) => { + if (record.files === undefined) return; + + let recordFiles = record.files; + if (recordFiles.length === undefined) recordFiles = [recordFiles]; + files.push(...recordFiles); + + // set score for the word in each file + recordFiles.forEach((file) => { + if (!scoreMap.has(file)) scoreMap.set(file, {}); + scoreMap.get(file)[word] = record.score; + }); + }); + + // create the mapping + files.forEach((file) => { + if (fileMap.has(file) && fileMap.get(file).indexOf(word) === -1) + fileMap.get(file).push(word); + else fileMap.set(file, [word]); + }); + }); + + // now check if the files don't contain excluded terms + const results = []; + for (const [file, wordList] of fileMap) { + // check if all requirements are matched + + // as search terms with length < 3 are discarded + const filteredTermCount = [...searchTerms].filter( + (term) => term.length > 2 + ).length; + if ( + wordList.length !== searchTerms.size && + wordList.length !== filteredTermCount + ) + continue; + + // ensure that none of the excluded terms is in the search result + if ( + [...excludedTerms].some( + (term) => + terms[term] === file || + titleTerms[term] === file || + (terms[term] || []).includes(file) || + (titleTerms[term] || []).includes(file) + ) + ) + break; + + // select one (max) score for the file. + const score = Math.max(...wordList.map((w) => scoreMap.get(file)[w])); + // add result to the result list + results.push([ + docNames[file], + titles[file], + "", + null, + score, + filenames[file], + ]); + } + return results; + }, + + /** + * helper function to return a node containing the + * search summary for a given text. keywords is a list + * of stemmed words. + */ + makeSearchSummary: (htmlText, keywords) => { + const text = Search.htmlToText(htmlText); + if (text === "") return null; + + const textLower = text.toLowerCase(); + const actualStartPosition = [...keywords] + .map((k) => textLower.indexOf(k.toLowerCase())) + .filter((i) => i > -1) + .slice(-1)[0]; + const startWithContext = Math.max(actualStartPosition - 120, 0); + + const top = startWithContext === 0 ? "" : "..."; + const tail = startWithContext + 240 < text.length ? "..." : ""; + + let summary = document.createElement("p"); + summary.classList.add("context"); + summary.textContent = top + text.substr(startWithContext, 240).trim() + tail; + + return summary; + }, +}; + +_ready(Search.init); diff --git a/_static/skeleton.css b/_static/skeleton.css new file mode 100644 index 0000000..467c878 --- /dev/null +++ b/_static/skeleton.css @@ -0,0 +1,296 @@ +/* Some sane resets. */ +html { + height: 100%; +} + +body { + margin: 0; + min-height: 100%; +} + +/* All the flexbox magic! */ +body, +.sb-announcement, +.sb-content, +.sb-main, +.sb-container, +.sb-container__inner, +.sb-article-container, +.sb-footer-content, +.sb-header, +.sb-header-secondary, +.sb-footer { + display: flex; +} + +/* These order things vertically */ +body, +.sb-main, +.sb-article-container { + flex-direction: column; +} + +/* Put elements in the center */ +.sb-header, +.sb-header-secondary, +.sb-container, +.sb-content, +.sb-footer, +.sb-footer-content { + justify-content: center; +} +/* Put elements at the ends */ +.sb-article-container { + justify-content: space-between; +} + +/* These elements grow. */ +.sb-main, +.sb-content, +.sb-container, +article { + flex-grow: 1; +} + +/* Because padding making this wider is not fun */ +article { + box-sizing: border-box; +} + +/* The announcements element should never be wider than the page. */ +.sb-announcement { + max-width: 100%; +} + +.sb-sidebar-primary, +.sb-sidebar-secondary { + flex-shrink: 0; + width: 17rem; +} + +.sb-announcement__inner { + justify-content: center; + + box-sizing: border-box; + height: 3rem; + + overflow-x: auto; + white-space: nowrap; +} + +/* Sidebars, with checkbox-based toggle */ +.sb-sidebar-primary, +.sb-sidebar-secondary { + position: fixed; + height: 100%; + top: 0; +} + +.sb-sidebar-primary { + left: -17rem; + transition: left 250ms ease-in-out; +} +.sb-sidebar-secondary { + right: -17rem; + transition: right 250ms ease-in-out; +} + +.sb-sidebar-toggle { + display: none; +} +.sb-sidebar-overlay { + position: fixed; + top: 0; + width: 0; + height: 0; + + transition: width 0ms ease 250ms, height 0ms ease 250ms, opacity 250ms ease; + + opacity: 0; + background-color: rgba(0, 0, 0, 0.54); +} + +#sb-sidebar-toggle--primary:checked + ~ .sb-sidebar-overlay[for="sb-sidebar-toggle--primary"], +#sb-sidebar-toggle--secondary:checked + ~ .sb-sidebar-overlay[for="sb-sidebar-toggle--secondary"] { + width: 100%; + height: 100%; + opacity: 1; + transition: width 0ms ease, height 0ms ease, opacity 250ms ease; +} + +#sb-sidebar-toggle--primary:checked ~ .sb-container .sb-sidebar-primary { + left: 0; +} +#sb-sidebar-toggle--secondary:checked ~ .sb-container .sb-sidebar-secondary { + right: 0; +} + +/* Full-width mode */ +.drop-secondary-sidebar-for-full-width-content + .hide-when-secondary-sidebar-shown { + display: none !important; +} +.drop-secondary-sidebar-for-full-width-content .sb-sidebar-secondary { + display: none !important; +} + +/* Mobile views */ +.sb-page-width { + width: 100%; +} + +.sb-article-container, +.sb-footer-content__inner, +.drop-secondary-sidebar-for-full-width-content .sb-article, +.drop-secondary-sidebar-for-full-width-content .match-content-width { + width: 100vw; +} + +.sb-article, +.match-content-width { + padding: 0 1rem; + box-sizing: border-box; +} + +@media (min-width: 32rem) { + .sb-article, + .match-content-width { + padding: 0 2rem; + } +} + +/* Tablet views */ +@media (min-width: 42rem) { + .sb-article-container { + width: auto; + } + .sb-footer-content__inner, + .drop-secondary-sidebar-for-full-width-content .sb-article, + .drop-secondary-sidebar-for-full-width-content .match-content-width { + width: 42rem; + } + .sb-article, + .match-content-width { + width: 42rem; + } +} +@media (min-width: 46rem) { + .sb-footer-content__inner, + .drop-secondary-sidebar-for-full-width-content .sb-article, + .drop-secondary-sidebar-for-full-width-content .match-content-width { + width: 46rem; + } + .sb-article, + .match-content-width { + width: 46rem; + } +} +@media (min-width: 50rem) { + .sb-footer-content__inner, + .drop-secondary-sidebar-for-full-width-content .sb-article, + .drop-secondary-sidebar-for-full-width-content .match-content-width { + width: 50rem; + } + .sb-article, + .match-content-width { + width: 50rem; + } +} + +/* Tablet views */ +@media (min-width: 59rem) { + .sb-sidebar-secondary { + position: static; + } + .hide-when-secondary-sidebar-shown { + display: none !important; + } + .sb-footer-content__inner, + .drop-secondary-sidebar-for-full-width-content .sb-article, + .drop-secondary-sidebar-for-full-width-content .match-content-width { + width: 59rem; + } + .sb-article, + .match-content-width { + width: 42rem; + } +} +@media (min-width: 63rem) { + .sb-footer-content__inner, + .drop-secondary-sidebar-for-full-width-content .sb-article, + .drop-secondary-sidebar-for-full-width-content .match-content-width { + width: 63rem; + } + .sb-article, + .match-content-width { + width: 46rem; + } +} +@media (min-width: 67rem) { + .sb-footer-content__inner, + .drop-secondary-sidebar-for-full-width-content .sb-article, + .drop-secondary-sidebar-for-full-width-content .match-content-width { + width: 67rem; + } + .sb-article, + .match-content-width { + width: 50rem; + } +} + +/* Desktop views */ +@media (min-width: 76rem) { + .sb-sidebar-primary { + position: static; + } + .hide-when-primary-sidebar-shown { + display: none !important; + } + .sb-footer-content__inner, + .drop-secondary-sidebar-for-full-width-content .sb-article, + .drop-secondary-sidebar-for-full-width-content .match-content-width { + width: 59rem; + } + .sb-article, + .match-content-width { + width: 42rem; + } +} + +/* Full desktop views */ +@media (min-width: 80rem) { + .sb-article, + .match-content-width { + width: 46rem; + } + .sb-footer-content__inner, + .drop-secondary-sidebar-for-full-width-content .sb-article, + .drop-secondary-sidebar-for-full-width-content .match-content-width { + width: 63rem; + } +} + +@media (min-width: 84rem) { + .sb-article, + .match-content-width { + width: 50rem; + } + .sb-footer-content__inner, + .drop-secondary-sidebar-for-full-width-content .sb-article, + .drop-secondary-sidebar-for-full-width-content .match-content-width { + width: 67rem; + } +} + +@media (min-width: 88rem) { + .sb-footer-content__inner, + .drop-secondary-sidebar-for-full-width-content .sb-article, + .drop-secondary-sidebar-for-full-width-content .match-content-width { + width: 67rem; + } + .sb-page-width { + width: 88rem; + } +} diff --git a/_static/sphinx-design.min.css b/_static/sphinx-design.min.css new file mode 100644 index 0000000..a325746 --- /dev/null +++ b/_static/sphinx-design.min.css @@ -0,0 +1 @@ +.sd-bg-primary{background-color:var(--sd-color-primary) !important}.sd-bg-text-primary{color:var(--sd-color-primary-text) !important}button.sd-bg-primary:focus,button.sd-bg-primary:hover{background-color:var(--sd-color-primary-highlight) !important}a.sd-bg-primary:focus,a.sd-bg-primary:hover{background-color:var(--sd-color-primary-highlight) !important}.sd-bg-secondary{background-color:var(--sd-color-secondary) !important}.sd-bg-text-secondary{color:var(--sd-color-secondary-text) !important}button.sd-bg-secondary:focus,button.sd-bg-secondary:hover{background-color:var(--sd-color-secondary-highlight) !important}a.sd-bg-secondary:focus,a.sd-bg-secondary:hover{background-color:var(--sd-color-secondary-highlight) !important}.sd-bg-success{background-color:var(--sd-color-success) !important}.sd-bg-text-success{color:var(--sd-color-success-text) !important}button.sd-bg-success:focus,button.sd-bg-success:hover{background-color:var(--sd-color-success-highlight) !important}a.sd-bg-success:focus,a.sd-bg-success:hover{background-color:var(--sd-color-success-highlight) !important}.sd-bg-info{background-color:var(--sd-color-info) !important}.sd-bg-text-info{color:var(--sd-color-info-text) !important}button.sd-bg-info:focus,button.sd-bg-info:hover{background-color:var(--sd-color-info-highlight) !important}a.sd-bg-info:focus,a.sd-bg-info:hover{background-color:var(--sd-color-info-highlight) !important}.sd-bg-warning{background-color:var(--sd-color-warning) !important}.sd-bg-text-warning{color:var(--sd-color-warning-text) !important}button.sd-bg-warning:focus,button.sd-bg-warning:hover{background-color:var(--sd-color-warning-highlight) !important}a.sd-bg-warning:focus,a.sd-bg-warning:hover{background-color:var(--sd-color-warning-highlight) !important}.sd-bg-danger{background-color:var(--sd-color-danger) !important}.sd-bg-text-danger{color:var(--sd-color-danger-text) !important}button.sd-bg-danger:focus,button.sd-bg-danger:hover{background-color:var(--sd-color-danger-highlight) !important}a.sd-bg-danger:focus,a.sd-bg-danger:hover{background-color:var(--sd-color-danger-highlight) !important}.sd-bg-light{background-color:var(--sd-color-light) !important}.sd-bg-text-light{color:var(--sd-color-light-text) !important}button.sd-bg-light:focus,button.sd-bg-light:hover{background-color:var(--sd-color-light-highlight) !important}a.sd-bg-light:focus,a.sd-bg-light:hover{background-color:var(--sd-color-light-highlight) !important}.sd-bg-muted{background-color:var(--sd-color-muted) !important}.sd-bg-text-muted{color:var(--sd-color-muted-text) !important}button.sd-bg-muted:focus,button.sd-bg-muted:hover{background-color:var(--sd-color-muted-highlight) !important}a.sd-bg-muted:focus,a.sd-bg-muted:hover{background-color:var(--sd-color-muted-highlight) !important}.sd-bg-dark{background-color:var(--sd-color-dark) !important}.sd-bg-text-dark{color:var(--sd-color-dark-text) !important}button.sd-bg-dark:focus,button.sd-bg-dark:hover{background-color:var(--sd-color-dark-highlight) !important}a.sd-bg-dark:focus,a.sd-bg-dark:hover{background-color:var(--sd-color-dark-highlight) !important}.sd-bg-black{background-color:var(--sd-color-black) !important}.sd-bg-text-black{color:var(--sd-color-black-text) !important}button.sd-bg-black:focus,button.sd-bg-black:hover{background-color:var(--sd-color-black-highlight) !important}a.sd-bg-black:focus,a.sd-bg-black:hover{background-color:var(--sd-color-black-highlight) !important}.sd-bg-white{background-color:var(--sd-color-white) !important}.sd-bg-text-white{color:var(--sd-color-white-text) !important}button.sd-bg-white:focus,button.sd-bg-white:hover{background-color:var(--sd-color-white-highlight) !important}a.sd-bg-white:focus,a.sd-bg-white:hover{background-color:var(--sd-color-white-highlight) !important}.sd-text-primary,.sd-text-primary>p{color:var(--sd-color-primary) !important}a.sd-text-primary:focus,a.sd-text-primary:hover{color:var(--sd-color-primary-highlight) !important}.sd-text-secondary,.sd-text-secondary>p{color:var(--sd-color-secondary) !important}a.sd-text-secondary:focus,a.sd-text-secondary:hover{color:var(--sd-color-secondary-highlight) !important}.sd-text-success,.sd-text-success>p{color:var(--sd-color-success) !important}a.sd-text-success:focus,a.sd-text-success:hover{color:var(--sd-color-success-highlight) !important}.sd-text-info,.sd-text-info>p{color:var(--sd-color-info) !important}a.sd-text-info:focus,a.sd-text-info:hover{color:var(--sd-color-info-highlight) !important}.sd-text-warning,.sd-text-warning>p{color:var(--sd-color-warning) !important}a.sd-text-warning:focus,a.sd-text-warning:hover{color:var(--sd-color-warning-highlight) !important}.sd-text-danger,.sd-text-danger>p{color:var(--sd-color-danger) !important}a.sd-text-danger:focus,a.sd-text-danger:hover{color:var(--sd-color-danger-highlight) !important}.sd-text-light,.sd-text-light>p{color:var(--sd-color-light) !important}a.sd-text-light:focus,a.sd-text-light:hover{color:var(--sd-color-light-highlight) !important}.sd-text-muted,.sd-text-muted>p{color:var(--sd-color-muted) !important}a.sd-text-muted:focus,a.sd-text-muted:hover{color:var(--sd-color-muted-highlight) !important}.sd-text-dark,.sd-text-dark>p{color:var(--sd-color-dark) !important}a.sd-text-dark:focus,a.sd-text-dark:hover{color:var(--sd-color-dark-highlight) !important}.sd-text-black,.sd-text-black>p{color:var(--sd-color-black) !important}a.sd-text-black:focus,a.sd-text-black:hover{color:var(--sd-color-black-highlight) !important}.sd-text-white,.sd-text-white>p{color:var(--sd-color-white) !important}a.sd-text-white:focus,a.sd-text-white:hover{color:var(--sd-color-white-highlight) !important}.sd-outline-primary{border-color:var(--sd-color-primary) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-primary:focus,a.sd-outline-primary:hover{border-color:var(--sd-color-primary-highlight) !important}.sd-outline-secondary{border-color:var(--sd-color-secondary) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-secondary:focus,a.sd-outline-secondary:hover{border-color:var(--sd-color-secondary-highlight) !important}.sd-outline-success{border-color:var(--sd-color-success) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-success:focus,a.sd-outline-success:hover{border-color:var(--sd-color-success-highlight) !important}.sd-outline-info{border-color:var(--sd-color-info) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-info:focus,a.sd-outline-info:hover{border-color:var(--sd-color-info-highlight) !important}.sd-outline-warning{border-color:var(--sd-color-warning) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-warning:focus,a.sd-outline-warning:hover{border-color:var(--sd-color-warning-highlight) !important}.sd-outline-danger{border-color:var(--sd-color-danger) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-danger:focus,a.sd-outline-danger:hover{border-color:var(--sd-color-danger-highlight) !important}.sd-outline-light{border-color:var(--sd-color-light) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-light:focus,a.sd-outline-light:hover{border-color:var(--sd-color-light-highlight) !important}.sd-outline-muted{border-color:var(--sd-color-muted) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-muted:focus,a.sd-outline-muted:hover{border-color:var(--sd-color-muted-highlight) !important}.sd-outline-dark{border-color:var(--sd-color-dark) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-dark:focus,a.sd-outline-dark:hover{border-color:var(--sd-color-dark-highlight) !important}.sd-outline-black{border-color:var(--sd-color-black) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-black:focus,a.sd-outline-black:hover{border-color:var(--sd-color-black-highlight) !important}.sd-outline-white{border-color:var(--sd-color-white) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-white:focus,a.sd-outline-white:hover{border-color:var(--sd-color-white-highlight) !important}.sd-bg-transparent{background-color:transparent !important}.sd-outline-transparent{border-color:transparent !important}.sd-text-transparent{color:transparent !important}.sd-p-0{padding:0 !important}.sd-pt-0,.sd-py-0{padding-top:0 !important}.sd-pr-0,.sd-px-0{padding-right:0 !important}.sd-pb-0,.sd-py-0{padding-bottom:0 !important}.sd-pl-0,.sd-px-0{padding-left:0 !important}.sd-p-1{padding:.25rem !important}.sd-pt-1,.sd-py-1{padding-top:.25rem !important}.sd-pr-1,.sd-px-1{padding-right:.25rem !important}.sd-pb-1,.sd-py-1{padding-bottom:.25rem !important}.sd-pl-1,.sd-px-1{padding-left:.25rem !important}.sd-p-2{padding:.5rem !important}.sd-pt-2,.sd-py-2{padding-top:.5rem !important}.sd-pr-2,.sd-px-2{padding-right:.5rem !important}.sd-pb-2,.sd-py-2{padding-bottom:.5rem !important}.sd-pl-2,.sd-px-2{padding-left:.5rem !important}.sd-p-3{padding:1rem !important}.sd-pt-3,.sd-py-3{padding-top:1rem !important}.sd-pr-3,.sd-px-3{padding-right:1rem !important}.sd-pb-3,.sd-py-3{padding-bottom:1rem !important}.sd-pl-3,.sd-px-3{padding-left:1rem !important}.sd-p-4{padding:1.5rem !important}.sd-pt-4,.sd-py-4{padding-top:1.5rem !important}.sd-pr-4,.sd-px-4{padding-right:1.5rem !important}.sd-pb-4,.sd-py-4{padding-bottom:1.5rem !important}.sd-pl-4,.sd-px-4{padding-left:1.5rem !important}.sd-p-5{padding:3rem !important}.sd-pt-5,.sd-py-5{padding-top:3rem !important}.sd-pr-5,.sd-px-5{padding-right:3rem !important}.sd-pb-5,.sd-py-5{padding-bottom:3rem !important}.sd-pl-5,.sd-px-5{padding-left:3rem !important}.sd-m-auto{margin:auto !important}.sd-mt-auto,.sd-my-auto{margin-top:auto !important}.sd-mr-auto,.sd-mx-auto{margin-right:auto !important}.sd-mb-auto,.sd-my-auto{margin-bottom:auto !important}.sd-ml-auto,.sd-mx-auto{margin-left:auto !important}.sd-m-0{margin:0 !important}.sd-mt-0,.sd-my-0{margin-top:0 !important}.sd-mr-0,.sd-mx-0{margin-right:0 !important}.sd-mb-0,.sd-my-0{margin-bottom:0 !important}.sd-ml-0,.sd-mx-0{margin-left:0 !important}.sd-m-1{margin:.25rem !important}.sd-mt-1,.sd-my-1{margin-top:.25rem !important}.sd-mr-1,.sd-mx-1{margin-right:.25rem !important}.sd-mb-1,.sd-my-1{margin-bottom:.25rem !important}.sd-ml-1,.sd-mx-1{margin-left:.25rem !important}.sd-m-2{margin:.5rem !important}.sd-mt-2,.sd-my-2{margin-top:.5rem !important}.sd-mr-2,.sd-mx-2{margin-right:.5rem !important}.sd-mb-2,.sd-my-2{margin-bottom:.5rem !important}.sd-ml-2,.sd-mx-2{margin-left:.5rem !important}.sd-m-3{margin:1rem !important}.sd-mt-3,.sd-my-3{margin-top:1rem !important}.sd-mr-3,.sd-mx-3{margin-right:1rem !important}.sd-mb-3,.sd-my-3{margin-bottom:1rem !important}.sd-ml-3,.sd-mx-3{margin-left:1rem !important}.sd-m-4{margin:1.5rem !important}.sd-mt-4,.sd-my-4{margin-top:1.5rem !important}.sd-mr-4,.sd-mx-4{margin-right:1.5rem !important}.sd-mb-4,.sd-my-4{margin-bottom:1.5rem !important}.sd-ml-4,.sd-mx-4{margin-left:1.5rem !important}.sd-m-5{margin:3rem !important}.sd-mt-5,.sd-my-5{margin-top:3rem !important}.sd-mr-5,.sd-mx-5{margin-right:3rem !important}.sd-mb-5,.sd-my-5{margin-bottom:3rem !important}.sd-ml-5,.sd-mx-5{margin-left:3rem !important}.sd-w-25{width:25% !important}.sd-w-50{width:50% !important}.sd-w-75{width:75% !important}.sd-w-100{width:100% !important}.sd-w-auto{width:auto !important}.sd-h-25{height:25% !important}.sd-h-50{height:50% !important}.sd-h-75{height:75% !important}.sd-h-100{height:100% !important}.sd-h-auto{height:auto !important}.sd-d-none{display:none !important}.sd-d-inline{display:inline !important}.sd-d-inline-block{display:inline-block !important}.sd-d-block{display:block !important}.sd-d-grid{display:grid !important}.sd-d-flex-row{display:-ms-flexbox !important;display:flex !important;flex-direction:row !important}.sd-d-flex-column{display:-ms-flexbox !important;display:flex !important;flex-direction:column !important}.sd-d-inline-flex{display:-ms-inline-flexbox !important;display:inline-flex !important}@media(min-width: 576px){.sd-d-sm-none{display:none !important}.sd-d-sm-inline{display:inline !important}.sd-d-sm-inline-block{display:inline-block !important}.sd-d-sm-block{display:block !important}.sd-d-sm-grid{display:grid !important}.sd-d-sm-flex{display:-ms-flexbox !important;display:flex !important}.sd-d-sm-inline-flex{display:-ms-inline-flexbox !important;display:inline-flex !important}}@media(min-width: 768px){.sd-d-md-none{display:none !important}.sd-d-md-inline{display:inline !important}.sd-d-md-inline-block{display:inline-block !important}.sd-d-md-block{display:block !important}.sd-d-md-grid{display:grid !important}.sd-d-md-flex{display:-ms-flexbox !important;display:flex !important}.sd-d-md-inline-flex{display:-ms-inline-flexbox !important;display:inline-flex !important}}@media(min-width: 992px){.sd-d-lg-none{display:none !important}.sd-d-lg-inline{display:inline !important}.sd-d-lg-inline-block{display:inline-block !important}.sd-d-lg-block{display:block !important}.sd-d-lg-grid{display:grid !important}.sd-d-lg-flex{display:-ms-flexbox !important;display:flex !important}.sd-d-lg-inline-flex{display:-ms-inline-flexbox !important;display:inline-flex !important}}@media(min-width: 1200px){.sd-d-xl-none{display:none !important}.sd-d-xl-inline{display:inline !important}.sd-d-xl-inline-block{display:inline-block !important}.sd-d-xl-block{display:block !important}.sd-d-xl-grid{display:grid !important}.sd-d-xl-flex{display:-ms-flexbox !important;display:flex !important}.sd-d-xl-inline-flex{display:-ms-inline-flexbox !important;display:inline-flex !important}}.sd-align-major-start{justify-content:flex-start !important}.sd-align-major-end{justify-content:flex-end !important}.sd-align-major-center{justify-content:center !important}.sd-align-major-justify{justify-content:space-between !important}.sd-align-major-spaced{justify-content:space-evenly !important}.sd-align-minor-start{align-items:flex-start !important}.sd-align-minor-end{align-items:flex-end !important}.sd-align-minor-center{align-items:center !important}.sd-align-minor-stretch{align-items:stretch !important}.sd-text-justify{text-align:justify !important}.sd-text-left{text-align:left !important}.sd-text-right{text-align:right !important}.sd-text-center{text-align:center !important}.sd-font-weight-light{font-weight:300 !important}.sd-font-weight-lighter{font-weight:lighter !important}.sd-font-weight-normal{font-weight:400 !important}.sd-font-weight-bold{font-weight:700 !important}.sd-font-weight-bolder{font-weight:bolder !important}.sd-font-italic{font-style:italic !important}.sd-text-decoration-none{text-decoration:none !important}.sd-text-lowercase{text-transform:lowercase !important}.sd-text-uppercase{text-transform:uppercase !important}.sd-text-capitalize{text-transform:capitalize !important}.sd-text-wrap{white-space:normal !important}.sd-text-nowrap{white-space:nowrap !important}.sd-text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.sd-fs-1,.sd-fs-1>p{font-size:calc(1.375rem + 1.5vw) !important;line-height:unset !important}.sd-fs-2,.sd-fs-2>p{font-size:calc(1.325rem + 0.9vw) !important;line-height:unset !important}.sd-fs-3,.sd-fs-3>p{font-size:calc(1.3rem + 0.6vw) !important;line-height:unset !important}.sd-fs-4,.sd-fs-4>p{font-size:calc(1.275rem + 0.3vw) !important;line-height:unset !important}.sd-fs-5,.sd-fs-5>p{font-size:1.25rem !important;line-height:unset !important}.sd-fs-6,.sd-fs-6>p{font-size:1rem !important;line-height:unset !important}.sd-border-0{border:0 solid !important}.sd-border-top-0{border-top:0 solid !important}.sd-border-bottom-0{border-bottom:0 solid !important}.sd-border-right-0{border-right:0 solid !important}.sd-border-left-0{border-left:0 solid !important}.sd-border-1{border:1px solid !important}.sd-border-top-1{border-top:1px solid !important}.sd-border-bottom-1{border-bottom:1px solid !important}.sd-border-right-1{border-right:1px solid !important}.sd-border-left-1{border-left:1px solid !important}.sd-border-2{border:2px solid !important}.sd-border-top-2{border-top:2px solid !important}.sd-border-bottom-2{border-bottom:2px solid !important}.sd-border-right-2{border-right:2px solid !important}.sd-border-left-2{border-left:2px solid !important}.sd-border-3{border:3px solid !important}.sd-border-top-3{border-top:3px solid !important}.sd-border-bottom-3{border-bottom:3px solid !important}.sd-border-right-3{border-right:3px solid !important}.sd-border-left-3{border-left:3px solid !important}.sd-border-4{border:4px solid !important}.sd-border-top-4{border-top:4px solid !important}.sd-border-bottom-4{border-bottom:4px solid !important}.sd-border-right-4{border-right:4px solid !important}.sd-border-left-4{border-left:4px solid !important}.sd-border-5{border:5px solid !important}.sd-border-top-5{border-top:5px solid !important}.sd-border-bottom-5{border-bottom:5px solid !important}.sd-border-right-5{border-right:5px solid !important}.sd-border-left-5{border-left:5px solid !important}.sd-rounded-0{border-radius:0 !important}.sd-rounded-1{border-radius:.2rem !important}.sd-rounded-2{border-radius:.3rem !important}.sd-rounded-3{border-radius:.5rem !important}.sd-rounded-pill{border-radius:50rem !important}.sd-rounded-circle{border-radius:50% !important}.shadow-none{box-shadow:none !important}.sd-shadow-sm{box-shadow:0 .125rem .25rem var(--sd-color-shadow) !important}.sd-shadow-md{box-shadow:0 .5rem 1rem var(--sd-color-shadow) !important}.sd-shadow-lg{box-shadow:0 1rem 3rem var(--sd-color-shadow) !important}@keyframes sd-slide-from-left{0%{transform:translateX(-100%)}100%{transform:translateX(0)}}@keyframes sd-slide-from-right{0%{transform:translateX(200%)}100%{transform:translateX(0)}}@keyframes sd-grow100{0%{transform:scale(0);opacity:.5}100%{transform:scale(1);opacity:1}}@keyframes sd-grow50{0%{transform:scale(0.5);opacity:.5}100%{transform:scale(1);opacity:1}}@keyframes sd-grow50-rot20{0%{transform:scale(0.5) rotateZ(-20deg);opacity:.5}75%{transform:scale(1) rotateZ(5deg);opacity:1}95%{transform:scale(1) rotateZ(-1deg);opacity:1}100%{transform:scale(1) rotateZ(0);opacity:1}}.sd-animate-slide-from-left{animation:1s ease-out 0s 1 normal none running sd-slide-from-left}.sd-animate-slide-from-right{animation:1s ease-out 0s 1 normal none running sd-slide-from-right}.sd-animate-grow100{animation:1s ease-out 0s 1 normal none running sd-grow100}.sd-animate-grow50{animation:1s ease-out 0s 1 normal none running sd-grow50}.sd-animate-grow50-rot20{animation:1s ease-out 0s 1 normal none running sd-grow50-rot20}.sd-badge{display:inline-block;padding:.35em .65em;font-size:.75em;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem}.sd-badge:empty{display:none}a.sd-badge{text-decoration:none}.sd-btn .sd-badge{position:relative;top:-1px}.sd-btn{background-color:transparent;border:1px solid transparent;border-radius:.25rem;cursor:pointer;display:inline-block;font-weight:400;font-size:1rem;line-height:1.5;padding:.375rem .75rem;text-align:center;text-decoration:none;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;vertical-align:middle;user-select:none;-moz-user-select:none;-ms-user-select:none;-webkit-user-select:none}.sd-btn:hover{text-decoration:none}@media(prefers-reduced-motion: reduce){.sd-btn{transition:none}}.sd-btn-primary,.sd-btn-outline-primary:hover,.sd-btn-outline-primary:focus{color:var(--sd-color-primary-text) !important;background-color:var(--sd-color-primary) !important;border-color:var(--sd-color-primary) !important;border-width:1px !important;border-style:solid !important}.sd-btn-primary:hover,.sd-btn-primary:focus{color:var(--sd-color-primary-text) !important;background-color:var(--sd-color-primary-highlight) !important;border-color:var(--sd-color-primary-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-primary{color:var(--sd-color-primary) !important;border-color:var(--sd-color-primary) !important;border-width:1px !important;border-style:solid !important}.sd-btn-secondary,.sd-btn-outline-secondary:hover,.sd-btn-outline-secondary:focus{color:var(--sd-color-secondary-text) !important;background-color:var(--sd-color-secondary) !important;border-color:var(--sd-color-secondary) !important;border-width:1px !important;border-style:solid !important}.sd-btn-secondary:hover,.sd-btn-secondary:focus{color:var(--sd-color-secondary-text) !important;background-color:var(--sd-color-secondary-highlight) !important;border-color:var(--sd-color-secondary-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-secondary{color:var(--sd-color-secondary) !important;border-color:var(--sd-color-secondary) !important;border-width:1px !important;border-style:solid !important}.sd-btn-success,.sd-btn-outline-success:hover,.sd-btn-outline-success:focus{color:var(--sd-color-success-text) !important;background-color:var(--sd-color-success) !important;border-color:var(--sd-color-success) !important;border-width:1px !important;border-style:solid !important}.sd-btn-success:hover,.sd-btn-success:focus{color:var(--sd-color-success-text) !important;background-color:var(--sd-color-success-highlight) !important;border-color:var(--sd-color-success-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-success{color:var(--sd-color-success) !important;border-color:var(--sd-color-success) !important;border-width:1px !important;border-style:solid !important}.sd-btn-info,.sd-btn-outline-info:hover,.sd-btn-outline-info:focus{color:var(--sd-color-info-text) !important;background-color:var(--sd-color-info) !important;border-color:var(--sd-color-info) !important;border-width:1px !important;border-style:solid !important}.sd-btn-info:hover,.sd-btn-info:focus{color:var(--sd-color-info-text) !important;background-color:var(--sd-color-info-highlight) !important;border-color:var(--sd-color-info-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-info{color:var(--sd-color-info) !important;border-color:var(--sd-color-info) !important;border-width:1px !important;border-style:solid !important}.sd-btn-warning,.sd-btn-outline-warning:hover,.sd-btn-outline-warning:focus{color:var(--sd-color-warning-text) !important;background-color:var(--sd-color-warning) !important;border-color:var(--sd-color-warning) !important;border-width:1px !important;border-style:solid !important}.sd-btn-warning:hover,.sd-btn-warning:focus{color:var(--sd-color-warning-text) !important;background-color:var(--sd-color-warning-highlight) !important;border-color:var(--sd-color-warning-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-warning{color:var(--sd-color-warning) !important;border-color:var(--sd-color-warning) !important;border-width:1px !important;border-style:solid !important}.sd-btn-danger,.sd-btn-outline-danger:hover,.sd-btn-outline-danger:focus{color:var(--sd-color-danger-text) !important;background-color:var(--sd-color-danger) !important;border-color:var(--sd-color-danger) !important;border-width:1px !important;border-style:solid !important}.sd-btn-danger:hover,.sd-btn-danger:focus{color:var(--sd-color-danger-text) !important;background-color:var(--sd-color-danger-highlight) !important;border-color:var(--sd-color-danger-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-danger{color:var(--sd-color-danger) !important;border-color:var(--sd-color-danger) !important;border-width:1px !important;border-style:solid !important}.sd-btn-light,.sd-btn-outline-light:hover,.sd-btn-outline-light:focus{color:var(--sd-color-light-text) !important;background-color:var(--sd-color-light) !important;border-color:var(--sd-color-light) !important;border-width:1px !important;border-style:solid !important}.sd-btn-light:hover,.sd-btn-light:focus{color:var(--sd-color-light-text) !important;background-color:var(--sd-color-light-highlight) !important;border-color:var(--sd-color-light-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-light{color:var(--sd-color-light) !important;border-color:var(--sd-color-light) !important;border-width:1px !important;border-style:solid !important}.sd-btn-muted,.sd-btn-outline-muted:hover,.sd-btn-outline-muted:focus{color:var(--sd-color-muted-text) !important;background-color:var(--sd-color-muted) !important;border-color:var(--sd-color-muted) !important;border-width:1px !important;border-style:solid !important}.sd-btn-muted:hover,.sd-btn-muted:focus{color:var(--sd-color-muted-text) !important;background-color:var(--sd-color-muted-highlight) !important;border-color:var(--sd-color-muted-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-muted{color:var(--sd-color-muted) !important;border-color:var(--sd-color-muted) !important;border-width:1px !important;border-style:solid !important}.sd-btn-dark,.sd-btn-outline-dark:hover,.sd-btn-outline-dark:focus{color:var(--sd-color-dark-text) !important;background-color:var(--sd-color-dark) !important;border-color:var(--sd-color-dark) !important;border-width:1px !important;border-style:solid !important}.sd-btn-dark:hover,.sd-btn-dark:focus{color:var(--sd-color-dark-text) !important;background-color:var(--sd-color-dark-highlight) !important;border-color:var(--sd-color-dark-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-dark{color:var(--sd-color-dark) !important;border-color:var(--sd-color-dark) !important;border-width:1px !important;border-style:solid !important}.sd-btn-black,.sd-btn-outline-black:hover,.sd-btn-outline-black:focus{color:var(--sd-color-black-text) !important;background-color:var(--sd-color-black) !important;border-color:var(--sd-color-black) !important;border-width:1px !important;border-style:solid !important}.sd-btn-black:hover,.sd-btn-black:focus{color:var(--sd-color-black-text) !important;background-color:var(--sd-color-black-highlight) !important;border-color:var(--sd-color-black-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-black{color:var(--sd-color-black) !important;border-color:var(--sd-color-black) !important;border-width:1px !important;border-style:solid !important}.sd-btn-white,.sd-btn-outline-white:hover,.sd-btn-outline-white:focus{color:var(--sd-color-white-text) !important;background-color:var(--sd-color-white) !important;border-color:var(--sd-color-white) !important;border-width:1px !important;border-style:solid !important}.sd-btn-white:hover,.sd-btn-white:focus{color:var(--sd-color-white-text) !important;background-color:var(--sd-color-white-highlight) !important;border-color:var(--sd-color-white-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-white{color:var(--sd-color-white) !important;border-color:var(--sd-color-white) !important;border-width:1px !important;border-style:solid !important}.sd-stretched-link::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;content:""}.sd-hide-link-text{font-size:0}.sd-octicon,.sd-material-icon{display:inline-block;fill:currentColor;vertical-align:middle}.sd-avatar-xs{border-radius:50%;object-fit:cover;object-position:center;width:1rem;height:1rem}.sd-avatar-sm{border-radius:50%;object-fit:cover;object-position:center;width:3rem;height:3rem}.sd-avatar-md{border-radius:50%;object-fit:cover;object-position:center;width:5rem;height:5rem}.sd-avatar-lg{border-radius:50%;object-fit:cover;object-position:center;width:7rem;height:7rem}.sd-avatar-xl{border-radius:50%;object-fit:cover;object-position:center;width:10rem;height:10rem}.sd-avatar-inherit{border-radius:50%;object-fit:cover;object-position:center;width:inherit;height:inherit}.sd-avatar-initial{border-radius:50%;object-fit:cover;object-position:center;width:initial;height:initial}.sd-card{background-clip:border-box;background-color:var(--sd-color-card-background);border:1px solid var(--sd-color-card-border);border-radius:.25rem;color:var(--sd-color-card-text);display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;min-width:0;position:relative;word-wrap:break-word}.sd-card>hr{margin-left:0;margin-right:0}.sd-card-hover:hover{border-color:var(--sd-color-card-border-hover);transform:scale(1.01)}.sd-card-body{-ms-flex:1 1 auto;flex:1 1 auto;padding:1rem 1rem}.sd-card-title{margin-bottom:.5rem}.sd-card-subtitle{margin-top:-0.25rem;margin-bottom:0}.sd-card-text:last-child{margin-bottom:0}.sd-card-link:hover{text-decoration:none}.sd-card-link+.card-link{margin-left:1rem}.sd-card-header{padding:.5rem 1rem;margin-bottom:0;background-color:var(--sd-color-card-header);border-bottom:1px solid var(--sd-color-card-border)}.sd-card-header:first-child{border-radius:calc(0.25rem - 1px) calc(0.25rem - 1px) 0 0}.sd-card-footer{padding:.5rem 1rem;background-color:var(--sd-color-card-footer);border-top:1px solid var(--sd-color-card-border)}.sd-card-footer:last-child{border-radius:0 0 calc(0.25rem - 1px) calc(0.25rem - 1px)}.sd-card-header-tabs{margin-right:-0.5rem;margin-bottom:-0.5rem;margin-left:-0.5rem;border-bottom:0}.sd-card-header-pills{margin-right:-0.5rem;margin-left:-0.5rem}.sd-card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1rem;border-radius:calc(0.25rem - 1px)}.sd-card-img,.sd-card-img-bottom,.sd-card-img-top{width:100%}.sd-card-img,.sd-card-img-top{border-top-left-radius:calc(0.25rem - 1px);border-top-right-radius:calc(0.25rem - 1px)}.sd-card-img,.sd-card-img-bottom{border-bottom-left-radius:calc(0.25rem - 1px);border-bottom-right-radius:calc(0.25rem - 1px)}.sd-cards-carousel{width:100%;display:flex;flex-wrap:nowrap;-ms-flex-direction:row;flex-direction:row;overflow-x:hidden;scroll-snap-type:x mandatory}.sd-cards-carousel.sd-show-scrollbar{overflow-x:auto}.sd-cards-carousel:hover,.sd-cards-carousel:focus{overflow-x:auto}.sd-cards-carousel>.sd-card{flex-shrink:0;scroll-snap-align:start}.sd-cards-carousel>.sd-card:not(:last-child){margin-right:3px}.sd-card-cols-1>.sd-card{width:90%}.sd-card-cols-2>.sd-card{width:45%}.sd-card-cols-3>.sd-card{width:30%}.sd-card-cols-4>.sd-card{width:22.5%}.sd-card-cols-5>.sd-card{width:18%}.sd-card-cols-6>.sd-card{width:15%}.sd-card-cols-7>.sd-card{width:12.8571428571%}.sd-card-cols-8>.sd-card{width:11.25%}.sd-card-cols-9>.sd-card{width:10%}.sd-card-cols-10>.sd-card{width:9%}.sd-card-cols-11>.sd-card{width:8.1818181818%}.sd-card-cols-12>.sd-card{width:7.5%}.sd-container,.sd-container-fluid,.sd-container-lg,.sd-container-md,.sd-container-sm,.sd-container-xl{margin-left:auto;margin-right:auto;padding-left:var(--sd-gutter-x, 0.75rem);padding-right:var(--sd-gutter-x, 0.75rem);width:100%}@media(min-width: 576px){.sd-container-sm,.sd-container{max-width:540px}}@media(min-width: 768px){.sd-container-md,.sd-container-sm,.sd-container{max-width:720px}}@media(min-width: 992px){.sd-container-lg,.sd-container-md,.sd-container-sm,.sd-container{max-width:960px}}@media(min-width: 1200px){.sd-container-xl,.sd-container-lg,.sd-container-md,.sd-container-sm,.sd-container{max-width:1140px}}.sd-row{--sd-gutter-x: 1.5rem;--sd-gutter-y: 0;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-top:calc(var(--sd-gutter-y) * -1);margin-right:calc(var(--sd-gutter-x) * -0.5);margin-left:calc(var(--sd-gutter-x) * -0.5)}.sd-row>*{box-sizing:border-box;flex-shrink:0;width:100%;max-width:100%;padding-right:calc(var(--sd-gutter-x) * 0.5);padding-left:calc(var(--sd-gutter-x) * 0.5);margin-top:var(--sd-gutter-y)}.sd-col{flex:1 0 0%;-ms-flex:1 0 0%}.sd-row-cols-auto>*{flex:0 0 auto;width:auto}.sd-row-cols-1>*{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-row-cols-2>*{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-row-cols-3>*{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-row-cols-4>*{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-row-cols-5>*{flex:0 0 auto;-ms-flex:0 0 auto;width:20%}.sd-row-cols-6>*{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-row-cols-7>*{flex:0 0 auto;-ms-flex:0 0 auto;width:14.2857142857%}.sd-row-cols-8>*{flex:0 0 auto;-ms-flex:0 0 auto;width:12.5%}.sd-row-cols-9>*{flex:0 0 auto;-ms-flex:0 0 auto;width:11.1111111111%}.sd-row-cols-10>*{flex:0 0 auto;-ms-flex:0 0 auto;width:10%}.sd-row-cols-11>*{flex:0 0 auto;-ms-flex:0 0 auto;width:9.0909090909%}.sd-row-cols-12>*{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}@media(min-width: 576px){.sd-col-sm{flex:1 0 0%;-ms-flex:1 0 0%}.sd-row-cols-sm-auto{flex:1 0 auto;-ms-flex:1 0 auto;width:100%}.sd-row-cols-sm-1>*{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-row-cols-sm-2>*{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-row-cols-sm-3>*{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-row-cols-sm-4>*{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-row-cols-sm-5>*{flex:0 0 auto;-ms-flex:0 0 auto;width:20%}.sd-row-cols-sm-6>*{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-row-cols-sm-7>*{flex:0 0 auto;-ms-flex:0 0 auto;width:14.2857142857%}.sd-row-cols-sm-8>*{flex:0 0 auto;-ms-flex:0 0 auto;width:12.5%}.sd-row-cols-sm-9>*{flex:0 0 auto;-ms-flex:0 0 auto;width:11.1111111111%}.sd-row-cols-sm-10>*{flex:0 0 auto;-ms-flex:0 0 auto;width:10%}.sd-row-cols-sm-11>*{flex:0 0 auto;-ms-flex:0 0 auto;width:9.0909090909%}.sd-row-cols-sm-12>*{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}}@media(min-width: 768px){.sd-col-md{flex:1 0 0%;-ms-flex:1 0 0%}.sd-row-cols-md-auto{flex:1 0 auto;-ms-flex:1 0 auto;width:100%}.sd-row-cols-md-1>*{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-row-cols-md-2>*{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-row-cols-md-3>*{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-row-cols-md-4>*{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-row-cols-md-5>*{flex:0 0 auto;-ms-flex:0 0 auto;width:20%}.sd-row-cols-md-6>*{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-row-cols-md-7>*{flex:0 0 auto;-ms-flex:0 0 auto;width:14.2857142857%}.sd-row-cols-md-8>*{flex:0 0 auto;-ms-flex:0 0 auto;width:12.5%}.sd-row-cols-md-9>*{flex:0 0 auto;-ms-flex:0 0 auto;width:11.1111111111%}.sd-row-cols-md-10>*{flex:0 0 auto;-ms-flex:0 0 auto;width:10%}.sd-row-cols-md-11>*{flex:0 0 auto;-ms-flex:0 0 auto;width:9.0909090909%}.sd-row-cols-md-12>*{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}}@media(min-width: 992px){.sd-col-lg{flex:1 0 0%;-ms-flex:1 0 0%}.sd-row-cols-lg-auto{flex:1 0 auto;-ms-flex:1 0 auto;width:100%}.sd-row-cols-lg-1>*{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-row-cols-lg-2>*{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-row-cols-lg-3>*{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-row-cols-lg-4>*{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-row-cols-lg-5>*{flex:0 0 auto;-ms-flex:0 0 auto;width:20%}.sd-row-cols-lg-6>*{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-row-cols-lg-7>*{flex:0 0 auto;-ms-flex:0 0 auto;width:14.2857142857%}.sd-row-cols-lg-8>*{flex:0 0 auto;-ms-flex:0 0 auto;width:12.5%}.sd-row-cols-lg-9>*{flex:0 0 auto;-ms-flex:0 0 auto;width:11.1111111111%}.sd-row-cols-lg-10>*{flex:0 0 auto;-ms-flex:0 0 auto;width:10%}.sd-row-cols-lg-11>*{flex:0 0 auto;-ms-flex:0 0 auto;width:9.0909090909%}.sd-row-cols-lg-12>*{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}}@media(min-width: 1200px){.sd-col-xl{flex:1 0 0%;-ms-flex:1 0 0%}.sd-row-cols-xl-auto{flex:1 0 auto;-ms-flex:1 0 auto;width:100%}.sd-row-cols-xl-1>*{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-row-cols-xl-2>*{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-row-cols-xl-3>*{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-row-cols-xl-4>*{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-row-cols-xl-5>*{flex:0 0 auto;-ms-flex:0 0 auto;width:20%}.sd-row-cols-xl-6>*{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-row-cols-xl-7>*{flex:0 0 auto;-ms-flex:0 0 auto;width:14.2857142857%}.sd-row-cols-xl-8>*{flex:0 0 auto;-ms-flex:0 0 auto;width:12.5%}.sd-row-cols-xl-9>*{flex:0 0 auto;-ms-flex:0 0 auto;width:11.1111111111%}.sd-row-cols-xl-10>*{flex:0 0 auto;-ms-flex:0 0 auto;width:10%}.sd-row-cols-xl-11>*{flex:0 0 auto;-ms-flex:0 0 auto;width:9.0909090909%}.sd-row-cols-xl-12>*{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}}.sd-col-auto{flex:0 0 auto;-ms-flex:0 0 auto;width:auto}.sd-col-1{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}.sd-col-2{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-col-3{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-col-4{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-col-5{flex:0 0 auto;-ms-flex:0 0 auto;width:41.6666666667%}.sd-col-6{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-col-7{flex:0 0 auto;-ms-flex:0 0 auto;width:58.3333333333%}.sd-col-8{flex:0 0 auto;-ms-flex:0 0 auto;width:66.6666666667%}.sd-col-9{flex:0 0 auto;-ms-flex:0 0 auto;width:75%}.sd-col-10{flex:0 0 auto;-ms-flex:0 0 auto;width:83.3333333333%}.sd-col-11{flex:0 0 auto;-ms-flex:0 0 auto;width:91.6666666667%}.sd-col-12{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-g-0,.sd-gy-0{--sd-gutter-y: 0}.sd-g-0,.sd-gx-0{--sd-gutter-x: 0}.sd-g-1,.sd-gy-1{--sd-gutter-y: 0.25rem}.sd-g-1,.sd-gx-1{--sd-gutter-x: 0.25rem}.sd-g-2,.sd-gy-2{--sd-gutter-y: 0.5rem}.sd-g-2,.sd-gx-2{--sd-gutter-x: 0.5rem}.sd-g-3,.sd-gy-3{--sd-gutter-y: 1rem}.sd-g-3,.sd-gx-3{--sd-gutter-x: 1rem}.sd-g-4,.sd-gy-4{--sd-gutter-y: 1.5rem}.sd-g-4,.sd-gx-4{--sd-gutter-x: 1.5rem}.sd-g-5,.sd-gy-5{--sd-gutter-y: 3rem}.sd-g-5,.sd-gx-5{--sd-gutter-x: 3rem}@media(min-width: 576px){.sd-col-sm-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.sd-col-sm-1{-ms-flex:0 0 auto;flex:0 0 auto;width:8.3333333333%}.sd-col-sm-2{-ms-flex:0 0 auto;flex:0 0 auto;width:16.6666666667%}.sd-col-sm-3{-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.sd-col-sm-4{-ms-flex:0 0 auto;flex:0 0 auto;width:33.3333333333%}.sd-col-sm-5{-ms-flex:0 0 auto;flex:0 0 auto;width:41.6666666667%}.sd-col-sm-6{-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.sd-col-sm-7{-ms-flex:0 0 auto;flex:0 0 auto;width:58.3333333333%}.sd-col-sm-8{-ms-flex:0 0 auto;flex:0 0 auto;width:66.6666666667%}.sd-col-sm-9{-ms-flex:0 0 auto;flex:0 0 auto;width:75%}.sd-col-sm-10{-ms-flex:0 0 auto;flex:0 0 auto;width:83.3333333333%}.sd-col-sm-11{-ms-flex:0 0 auto;flex:0 0 auto;width:91.6666666667%}.sd-col-sm-12{-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.sd-g-sm-0,.sd-gy-sm-0{--sd-gutter-y: 0}.sd-g-sm-0,.sd-gx-sm-0{--sd-gutter-x: 0}.sd-g-sm-1,.sd-gy-sm-1{--sd-gutter-y: 0.25rem}.sd-g-sm-1,.sd-gx-sm-1{--sd-gutter-x: 0.25rem}.sd-g-sm-2,.sd-gy-sm-2{--sd-gutter-y: 0.5rem}.sd-g-sm-2,.sd-gx-sm-2{--sd-gutter-x: 0.5rem}.sd-g-sm-3,.sd-gy-sm-3{--sd-gutter-y: 1rem}.sd-g-sm-3,.sd-gx-sm-3{--sd-gutter-x: 1rem}.sd-g-sm-4,.sd-gy-sm-4{--sd-gutter-y: 1.5rem}.sd-g-sm-4,.sd-gx-sm-4{--sd-gutter-x: 1.5rem}.sd-g-sm-5,.sd-gy-sm-5{--sd-gutter-y: 3rem}.sd-g-sm-5,.sd-gx-sm-5{--sd-gutter-x: 3rem}}@media(min-width: 768px){.sd-col-md-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.sd-col-md-1{-ms-flex:0 0 auto;flex:0 0 auto;width:8.3333333333%}.sd-col-md-2{-ms-flex:0 0 auto;flex:0 0 auto;width:16.6666666667%}.sd-col-md-3{-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.sd-col-md-4{-ms-flex:0 0 auto;flex:0 0 auto;width:33.3333333333%}.sd-col-md-5{-ms-flex:0 0 auto;flex:0 0 auto;width:41.6666666667%}.sd-col-md-6{-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.sd-col-md-7{-ms-flex:0 0 auto;flex:0 0 auto;width:58.3333333333%}.sd-col-md-8{-ms-flex:0 0 auto;flex:0 0 auto;width:66.6666666667%}.sd-col-md-9{-ms-flex:0 0 auto;flex:0 0 auto;width:75%}.sd-col-md-10{-ms-flex:0 0 auto;flex:0 0 auto;width:83.3333333333%}.sd-col-md-11{-ms-flex:0 0 auto;flex:0 0 auto;width:91.6666666667%}.sd-col-md-12{-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.sd-g-md-0,.sd-gy-md-0{--sd-gutter-y: 0}.sd-g-md-0,.sd-gx-md-0{--sd-gutter-x: 0}.sd-g-md-1,.sd-gy-md-1{--sd-gutter-y: 0.25rem}.sd-g-md-1,.sd-gx-md-1{--sd-gutter-x: 0.25rem}.sd-g-md-2,.sd-gy-md-2{--sd-gutter-y: 0.5rem}.sd-g-md-2,.sd-gx-md-2{--sd-gutter-x: 0.5rem}.sd-g-md-3,.sd-gy-md-3{--sd-gutter-y: 1rem}.sd-g-md-3,.sd-gx-md-3{--sd-gutter-x: 1rem}.sd-g-md-4,.sd-gy-md-4{--sd-gutter-y: 1.5rem}.sd-g-md-4,.sd-gx-md-4{--sd-gutter-x: 1.5rem}.sd-g-md-5,.sd-gy-md-5{--sd-gutter-y: 3rem}.sd-g-md-5,.sd-gx-md-5{--sd-gutter-x: 3rem}}@media(min-width: 992px){.sd-col-lg-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.sd-col-lg-1{-ms-flex:0 0 auto;flex:0 0 auto;width:8.3333333333%}.sd-col-lg-2{-ms-flex:0 0 auto;flex:0 0 auto;width:16.6666666667%}.sd-col-lg-3{-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.sd-col-lg-4{-ms-flex:0 0 auto;flex:0 0 auto;width:33.3333333333%}.sd-col-lg-5{-ms-flex:0 0 auto;flex:0 0 auto;width:41.6666666667%}.sd-col-lg-6{-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.sd-col-lg-7{-ms-flex:0 0 auto;flex:0 0 auto;width:58.3333333333%}.sd-col-lg-8{-ms-flex:0 0 auto;flex:0 0 auto;width:66.6666666667%}.sd-col-lg-9{-ms-flex:0 0 auto;flex:0 0 auto;width:75%}.sd-col-lg-10{-ms-flex:0 0 auto;flex:0 0 auto;width:83.3333333333%}.sd-col-lg-11{-ms-flex:0 0 auto;flex:0 0 auto;width:91.6666666667%}.sd-col-lg-12{-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.sd-g-lg-0,.sd-gy-lg-0{--sd-gutter-y: 0}.sd-g-lg-0,.sd-gx-lg-0{--sd-gutter-x: 0}.sd-g-lg-1,.sd-gy-lg-1{--sd-gutter-y: 0.25rem}.sd-g-lg-1,.sd-gx-lg-1{--sd-gutter-x: 0.25rem}.sd-g-lg-2,.sd-gy-lg-2{--sd-gutter-y: 0.5rem}.sd-g-lg-2,.sd-gx-lg-2{--sd-gutter-x: 0.5rem}.sd-g-lg-3,.sd-gy-lg-3{--sd-gutter-y: 1rem}.sd-g-lg-3,.sd-gx-lg-3{--sd-gutter-x: 1rem}.sd-g-lg-4,.sd-gy-lg-4{--sd-gutter-y: 1.5rem}.sd-g-lg-4,.sd-gx-lg-4{--sd-gutter-x: 1.5rem}.sd-g-lg-5,.sd-gy-lg-5{--sd-gutter-y: 3rem}.sd-g-lg-5,.sd-gx-lg-5{--sd-gutter-x: 3rem}}@media(min-width: 1200px){.sd-col-xl-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.sd-col-xl-1{-ms-flex:0 0 auto;flex:0 0 auto;width:8.3333333333%}.sd-col-xl-2{-ms-flex:0 0 auto;flex:0 0 auto;width:16.6666666667%}.sd-col-xl-3{-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.sd-col-xl-4{-ms-flex:0 0 auto;flex:0 0 auto;width:33.3333333333%}.sd-col-xl-5{-ms-flex:0 0 auto;flex:0 0 auto;width:41.6666666667%}.sd-col-xl-6{-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.sd-col-xl-7{-ms-flex:0 0 auto;flex:0 0 auto;width:58.3333333333%}.sd-col-xl-8{-ms-flex:0 0 auto;flex:0 0 auto;width:66.6666666667%}.sd-col-xl-9{-ms-flex:0 0 auto;flex:0 0 auto;width:75%}.sd-col-xl-10{-ms-flex:0 0 auto;flex:0 0 auto;width:83.3333333333%}.sd-col-xl-11{-ms-flex:0 0 auto;flex:0 0 auto;width:91.6666666667%}.sd-col-xl-12{-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.sd-g-xl-0,.sd-gy-xl-0{--sd-gutter-y: 0}.sd-g-xl-0,.sd-gx-xl-0{--sd-gutter-x: 0}.sd-g-xl-1,.sd-gy-xl-1{--sd-gutter-y: 0.25rem}.sd-g-xl-1,.sd-gx-xl-1{--sd-gutter-x: 0.25rem}.sd-g-xl-2,.sd-gy-xl-2{--sd-gutter-y: 0.5rem}.sd-g-xl-2,.sd-gx-xl-2{--sd-gutter-x: 0.5rem}.sd-g-xl-3,.sd-gy-xl-3{--sd-gutter-y: 1rem}.sd-g-xl-3,.sd-gx-xl-3{--sd-gutter-x: 1rem}.sd-g-xl-4,.sd-gy-xl-4{--sd-gutter-y: 1.5rem}.sd-g-xl-4,.sd-gx-xl-4{--sd-gutter-x: 1.5rem}.sd-g-xl-5,.sd-gy-xl-5{--sd-gutter-y: 3rem}.sd-g-xl-5,.sd-gx-xl-5{--sd-gutter-x: 3rem}}.sd-flex-row-reverse{flex-direction:row-reverse !important}details.sd-dropdown{position:relative;font-size:var(--sd-fontsize-dropdown)}details.sd-dropdown:hover{cursor:pointer}details.sd-dropdown .sd-summary-content{cursor:default}details.sd-dropdown summary.sd-summary-title{padding:.5em 1em;font-size:var(--sd-fontsize-dropdown-title);font-weight:var(--sd-fontweight-dropdown-title);user-select:none;-moz-user-select:none;-ms-user-select:none;-webkit-user-select:none;list-style:none;display:inline-flex;justify-content:space-between}details.sd-dropdown summary.sd-summary-title::-webkit-details-marker{display:none}details.sd-dropdown summary.sd-summary-title:focus{outline:none}details.sd-dropdown summary.sd-summary-title .sd-summary-icon{margin-right:.6em;display:inline-flex;align-items:center}details.sd-dropdown summary.sd-summary-title .sd-summary-icon svg{opacity:.8}details.sd-dropdown summary.sd-summary-title .sd-summary-text{flex-grow:1;line-height:1.5;padding-right:.5rem}details.sd-dropdown summary.sd-summary-title .sd-summary-state-marker{pointer-events:none;display:inline-flex;align-items:center}details.sd-dropdown summary.sd-summary-title .sd-summary-state-marker svg{opacity:.6}details.sd-dropdown summary.sd-summary-title:hover .sd-summary-state-marker svg{opacity:1;transform:scale(1.1)}details.sd-dropdown[open] summary .sd-octicon.no-title{visibility:hidden}details.sd-dropdown .sd-summary-chevron-right{transition:.25s}details.sd-dropdown[open]>.sd-summary-title .sd-summary-chevron-right{transform:rotate(90deg)}details.sd-dropdown[open]>.sd-summary-title .sd-summary-chevron-down{transform:rotate(180deg)}details.sd-dropdown:not([open]).sd-card{border:none}details.sd-dropdown:not([open])>.sd-card-header{border:1px solid var(--sd-color-card-border);border-radius:.25rem}details.sd-dropdown.sd-fade-in[open] summary~*{-moz-animation:sd-fade-in .5s ease-in-out;-webkit-animation:sd-fade-in .5s ease-in-out;animation:sd-fade-in .5s ease-in-out}details.sd-dropdown.sd-fade-in-slide-down[open] summary~*{-moz-animation:sd-fade-in .5s ease-in-out,sd-slide-down .5s ease-in-out;-webkit-animation:sd-fade-in .5s ease-in-out,sd-slide-down .5s ease-in-out;animation:sd-fade-in .5s ease-in-out,sd-slide-down .5s ease-in-out}.sd-col>.sd-dropdown{width:100%}.sd-summary-content>.sd-tab-set:first-child{margin-top:0}@keyframes sd-fade-in{0%{opacity:0}100%{opacity:1}}@keyframes sd-slide-down{0%{transform:translate(0, -10px)}100%{transform:translate(0, 0)}}.sd-tab-set{border-radius:.125rem;display:flex;flex-wrap:wrap;margin:1em 0;position:relative}.sd-tab-set>input{opacity:0;position:absolute}.sd-tab-set>input:checked+label{border-color:var(--sd-color-tabs-underline-active);color:var(--sd-color-tabs-label-active)}.sd-tab-set>input:checked+label+.sd-tab-content{display:block}.sd-tab-set>input:not(:checked)+label:hover{color:var(--sd-color-tabs-label-hover);border-color:var(--sd-color-tabs-underline-hover)}.sd-tab-set>input:focus+label{outline-style:auto}.sd-tab-set>input:not(.focus-visible)+label{outline:none;-webkit-tap-highlight-color:transparent}.sd-tab-set>label{border-bottom:.125rem solid transparent;margin-bottom:0;color:var(--sd-color-tabs-label-inactive);border-color:var(--sd-color-tabs-underline-inactive);cursor:pointer;font-size:var(--sd-fontsize-tabs-label);font-weight:700;padding:1em 1.25em .5em;transition:color 250ms;width:auto;z-index:1}html .sd-tab-set>label:hover{color:var(--sd-color-tabs-label-active)}.sd-col>.sd-tab-set{width:100%}.sd-tab-content{box-shadow:0 -0.0625rem var(--sd-color-tabs-overline),0 .0625rem var(--sd-color-tabs-underline);display:none;order:99;padding-bottom:.75rem;padding-top:.75rem;width:100%}.sd-tab-content>:first-child{margin-top:0 !important}.sd-tab-content>:last-child{margin-bottom:0 !important}.sd-tab-content>.sd-tab-set{margin:0}.sd-sphinx-override,.sd-sphinx-override *{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.sd-sphinx-override p{margin-top:0}:root{--sd-color-primary: #0071bc;--sd-color-secondary: #6c757d;--sd-color-success: #28a745;--sd-color-info: #17a2b8;--sd-color-warning: #f0b37e;--sd-color-danger: #dc3545;--sd-color-light: #f8f9fa;--sd-color-muted: #6c757d;--sd-color-dark: #212529;--sd-color-black: black;--sd-color-white: white;--sd-color-primary-highlight: #0060a0;--sd-color-secondary-highlight: #5c636a;--sd-color-success-highlight: #228e3b;--sd-color-info-highlight: #148a9c;--sd-color-warning-highlight: #cc986b;--sd-color-danger-highlight: #bb2d3b;--sd-color-light-highlight: #d3d4d5;--sd-color-muted-highlight: #5c636a;--sd-color-dark-highlight: #1c1f23;--sd-color-black-highlight: black;--sd-color-white-highlight: #d9d9d9;--sd-color-primary-bg: rgba(0, 113, 188, 0.2);--sd-color-secondary-bg: rgba(108, 117, 125, 0.2);--sd-color-success-bg: rgba(40, 167, 69, 0.2);--sd-color-info-bg: rgba(23, 162, 184, 0.2);--sd-color-warning-bg: rgba(240, 179, 126, 0.2);--sd-color-danger-bg: rgba(220, 53, 69, 0.2);--sd-color-light-bg: rgba(248, 249, 250, 0.2);--sd-color-muted-bg: rgba(108, 117, 125, 0.2);--sd-color-dark-bg: rgba(33, 37, 41, 0.2);--sd-color-black-bg: rgba(0, 0, 0, 0.2);--sd-color-white-bg: rgba(255, 255, 255, 0.2);--sd-color-primary-text: #fff;--sd-color-secondary-text: #fff;--sd-color-success-text: #fff;--sd-color-info-text: #fff;--sd-color-warning-text: #212529;--sd-color-danger-text: #fff;--sd-color-light-text: #212529;--sd-color-muted-text: #fff;--sd-color-dark-text: #fff;--sd-color-black-text: #fff;--sd-color-white-text: #212529;--sd-color-shadow: rgba(0, 0, 0, 0.15);--sd-color-card-border: rgba(0, 0, 0, 0.125);--sd-color-card-border-hover: hsla(231, 99%, 66%, 1);--sd-color-card-background: transparent;--sd-color-card-text: inherit;--sd-color-card-header: transparent;--sd-color-card-footer: transparent;--sd-color-tabs-label-active: hsla(231, 99%, 66%, 1);--sd-color-tabs-label-hover: hsla(231, 99%, 66%, 1);--sd-color-tabs-label-inactive: hsl(0, 0%, 66%);--sd-color-tabs-underline-active: hsla(231, 99%, 66%, 1);--sd-color-tabs-underline-hover: rgba(178, 206, 245, 0.62);--sd-color-tabs-underline-inactive: transparent;--sd-color-tabs-overline: rgb(222, 222, 222);--sd-color-tabs-underline: rgb(222, 222, 222);--sd-fontsize-tabs-label: 1rem;--sd-fontsize-dropdown: inherit;--sd-fontsize-dropdown-title: 1rem;--sd-fontweight-dropdown-title: 700} diff --git a/_static/sphinx_highlight.js b/_static/sphinx_highlight.js new file mode 100644 index 0000000..8a96c69 --- /dev/null +++ b/_static/sphinx_highlight.js @@ -0,0 +1,154 @@ +/* Highlighting utilities for Sphinx HTML documentation. */ +"use strict"; + +const SPHINX_HIGHLIGHT_ENABLED = true + +/** + * highlight a given string on a node by wrapping it in + * span elements with the given class name. + */ +const _highlight = (node, addItems, text, className) => { + if (node.nodeType === Node.TEXT_NODE) { + const val = node.nodeValue; + const parent = node.parentNode; + const pos = val.toLowerCase().indexOf(text); + if ( + pos >= 0 && + !parent.classList.contains(className) && + !parent.classList.contains("nohighlight") + ) { + let span; + + const closestNode = parent.closest("body, svg, foreignObject"); + const isInSVG = closestNode && closestNode.matches("svg"); + if (isInSVG) { + span = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); + } else { + span = document.createElement("span"); + span.classList.add(className); + } + + span.appendChild(document.createTextNode(val.substr(pos, text.length))); + const rest = document.createTextNode(val.substr(pos + text.length)); + parent.insertBefore( + span, + parent.insertBefore( + rest, + node.nextSibling + ) + ); + node.nodeValue = val.substr(0, pos); + /* There may be more occurrences of search term in this node. So call this + * function recursively on the remaining fragment. + */ + _highlight(rest, addItems, text, className); + + if (isInSVG) { + const rect = document.createElementNS( + "http://www.w3.org/2000/svg", + "rect" + ); + const bbox = parent.getBBox(); + rect.x.baseVal.value = bbox.x; + rect.y.baseVal.value = bbox.y; + rect.width.baseVal.value = bbox.width; + rect.height.baseVal.value = bbox.height; + rect.setAttribute("class", className); + addItems.push({ parent: parent, target: rect }); + } + } + } else if (node.matches && !node.matches("button, select, textarea")) { + node.childNodes.forEach((el) => _highlight(el, addItems, text, className)); + } +}; +const _highlightText = (thisNode, text, className) => { + let addItems = []; + _highlight(thisNode, addItems, text, className); + addItems.forEach((obj) => + obj.parent.insertAdjacentElement("beforebegin", obj.target) + ); +}; + +/** + * Small JavaScript module for the documentation. + */ +const SphinxHighlight = { + + /** + * highlight the search words provided in localstorage in the text + */ + highlightSearchWords: () => { + if (!SPHINX_HIGHLIGHT_ENABLED) return; // bail if no highlight + + // get and clear terms from localstorage + const url = new URL(window.location); + const highlight = + localStorage.getItem("sphinx_highlight_terms") + || url.searchParams.get("highlight") + || ""; + localStorage.removeItem("sphinx_highlight_terms") + url.searchParams.delete("highlight"); + window.history.replaceState({}, "", url); + + // get individual terms from highlight string + const terms = highlight.toLowerCase().split(/\s+/).filter(x => x); + if (terms.length === 0) return; // nothing to do + + // There should never be more than one element matching "div.body" + const divBody = document.querySelectorAll("div.body"); + const body = divBody.length ? divBody[0] : document.querySelector("body"); + window.setTimeout(() => { + terms.forEach((term) => _highlightText(body, term, "highlighted")); + }, 10); + + const searchBox = document.getElementById("searchbox"); + if (searchBox === null) return; + searchBox.appendChild( + document + .createRange() + .createContextualFragment( + '" + ) + ); + }, + + /** + * helper function to hide the search marks again + */ + hideSearchWords: () => { + document + .querySelectorAll("#searchbox .highlight-link") + .forEach((el) => el.remove()); + document + .querySelectorAll("span.highlighted") + .forEach((el) => el.classList.remove("highlighted")); + localStorage.removeItem("sphinx_highlight_terms") + }, + + initEscapeListener: () => { + // only install a listener if it is really needed + if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) return; + + document.addEventListener("keydown", (event) => { + // bail for input elements + if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return; + // bail with special keys + if (event.shiftKey || event.altKey || event.ctrlKey || event.metaKey) return; + if (DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS && (event.key === "Escape")) { + SphinxHighlight.hideSearchWords(); + event.preventDefault(); + } + }); + }, +}; + +_ready(() => { + /* Do not call highlightSearchWords() when we are on the search page. + * It will highlight words from the *previous* search query. + */ + if (typeof Search === "undefined") SphinxHighlight.highlightSearchWords(); + SphinxHighlight.initEscapeListener(); +}); diff --git a/_static/styles/custom.css b/_static/styles/custom.css new file mode 100644 index 0000000..0338afb --- /dev/null +++ b/_static/styles/custom.css @@ -0,0 +1,13 @@ + +/* Wide main page */ +.content { + flex: 1; +} +aside.sidebar-drawer { + width: unset; +} + +/* Left-align tables */ +article table.align-default { + margin-left: 0; +} diff --git a/_static/styles/furo-extensions.css b/_static/styles/furo-extensions.css new file mode 100644 index 0000000..8229587 --- /dev/null +++ b/_static/styles/furo-extensions.css @@ -0,0 +1,2 @@ +#furo-sidebar-ad-placement{padding:var(--sidebar-item-spacing-vertical) var(--sidebar-item-spacing-horizontal)}#furo-sidebar-ad-placement .ethical-sidebar{background:var(--color-background-secondary);border:none;box-shadow:none}#furo-sidebar-ad-placement .ethical-sidebar:hover{background:var(--color-background-hover)}#furo-sidebar-ad-placement .ethical-sidebar a{color:var(--color-foreground-primary)}#furo-sidebar-ad-placement .ethical-callout a{color:var(--color-foreground-secondary)!important}#furo-readthedocs-versions{background:transparent;display:block;position:static;width:100%}#furo-readthedocs-versions .rst-versions{background:#1a1c1e}#furo-readthedocs-versions .rst-current-version{background:var(--color-sidebar-item-background);cursor:unset}#furo-readthedocs-versions .rst-current-version:hover{background:var(--color-sidebar-item-background)}#furo-readthedocs-versions .rst-current-version .fa-book{color:var(--color-foreground-primary)}#furo-readthedocs-versions>.rst-other-versions{padding:0}#furo-readthedocs-versions>.rst-other-versions small{opacity:1}#furo-readthedocs-versions .injected .rst-versions{position:unset}#furo-readthedocs-versions:focus-within,#furo-readthedocs-versions:hover{box-shadow:0 0 0 1px var(--color-sidebar-background-border)}#furo-readthedocs-versions:focus-within .rst-current-version,#furo-readthedocs-versions:hover .rst-current-version{background:#1a1c1e;font-size:inherit;height:auto;line-height:inherit;padding:12px;text-align:right}#furo-readthedocs-versions:focus-within .rst-current-version .fa-book,#furo-readthedocs-versions:hover .rst-current-version .fa-book{color:#fff;float:left}#furo-readthedocs-versions:focus-within .fa-caret-down,#furo-readthedocs-versions:hover .fa-caret-down{display:none}#furo-readthedocs-versions:focus-within .injected,#furo-readthedocs-versions:focus-within .rst-current-version,#furo-readthedocs-versions:focus-within .rst-other-versions,#furo-readthedocs-versions:hover .injected,#furo-readthedocs-versions:hover .rst-current-version,#furo-readthedocs-versions:hover .rst-other-versions{display:block}#furo-readthedocs-versions:focus-within>.rst-current-version,#furo-readthedocs-versions:hover>.rst-current-version{display:none}.highlight:hover button.copybtn{color:var(--color-code-foreground)}.highlight button.copybtn{align-items:center;background-color:var(--color-code-background);border:none;color:var(--color-background-item);cursor:pointer;height:1.25em;right:.5rem;top:.625rem;transition:color .3s,opacity .3s;width:1.25em}.highlight button.copybtn:hover{background-color:var(--color-code-background);color:var(--color-brand-content)}.highlight button.copybtn:after{background-color:transparent;color:var(--color-code-foreground);display:none}.highlight button.copybtn.success{color:#22863a;transition:color 0ms}.highlight button.copybtn.success:after{display:block}.highlight button.copybtn svg{padding:0}body{--sd-color-primary:var(--color-brand-primary);--sd-color-primary-highlight:var(--color-brand-content);--sd-color-primary-text:var(--color-background-primary);--sd-color-shadow:rgba(0,0,0,.05);--sd-color-card-border:var(--color-card-border);--sd-color-card-border-hover:var(--color-brand-content);--sd-color-card-background:var(--color-card-background);--sd-color-card-text:var(--color-foreground-primary);--sd-color-card-header:var(--color-card-marginals-background);--sd-color-card-footer:var(--color-card-marginals-background);--sd-color-tabs-label-active:var(--color-brand-content);--sd-color-tabs-label-hover:var(--color-foreground-muted);--sd-color-tabs-label-inactive:var(--color-foreground-muted);--sd-color-tabs-underline-active:var(--color-brand-content);--sd-color-tabs-underline-hover:var(--color-foreground-border);--sd-color-tabs-underline-inactive:var(--color-background-border);--sd-color-tabs-overline:var(--color-background-border);--sd-color-tabs-underline:var(--color-background-border)}.sd-tab-content{box-shadow:0 -2px var(--sd-color-tabs-overline),0 1px var(--sd-color-tabs-underline)}.sd-card{box-shadow:0 .1rem .25rem var(--sd-color-shadow),0 0 .0625rem rgba(0,0,0,.1)}.sd-shadow-sm{box-shadow:0 .1rem .25rem var(--sd-color-shadow),0 0 .0625rem rgba(0,0,0,.1)!important}.sd-shadow-md{box-shadow:0 .3rem .75rem var(--sd-color-shadow),0 0 .0625rem rgba(0,0,0,.1)!important}.sd-shadow-lg{box-shadow:0 .6rem 1.5rem var(--sd-color-shadow),0 0 .0625rem rgba(0,0,0,.1)!important}.sd-card-hover:hover{transform:none}.sd-cards-carousel{gap:.25rem;padding:.25rem}body{--tabs--label-text:var(--color-foreground-muted);--tabs--label-text--hover:var(--color-foreground-muted);--tabs--label-text--active:var(--color-brand-content);--tabs--label-text--active--hover:var(--color-brand-content);--tabs--label-background:transparent;--tabs--label-background--hover:transparent;--tabs--label-background--active:transparent;--tabs--label-background--active--hover:transparent;--tabs--padding-x:0.25em;--tabs--margin-x:1em;--tabs--border:var(--color-background-border);--tabs--label-border:transparent;--tabs--label-border--hover:var(--color-foreground-muted);--tabs--label-border--active:var(--color-brand-content);--tabs--label-border--active--hover:var(--color-brand-content)}[role=main] .container{max-width:none;padding-left:0;padding-right:0}.shadow.docutils{border:none;box-shadow:0 .2rem .5rem rgba(0,0,0,.05),0 0 .0625rem rgba(0,0,0,.1)!important}.sphinx-bs .card{background-color:var(--color-background-secondary);color:var(--color-foreground)} +/*# sourceMappingURL=furo-extensions.css.map*/ \ No newline at end of file diff --git a/_static/styles/furo-extensions.css.map b/_static/styles/furo-extensions.css.map new file mode 100644 index 0000000..c26eac7 --- /dev/null +++ b/_static/styles/furo-extensions.css.map @@ -0,0 +1 @@ +{"version":3,"file":"styles/furo-extensions.css","mappings":"AAGA,2BACE,oFACA,4CAKE,6CAHA,YACA,eAEA,CACA,kDACE,yCAEF,8CACE,sCAEJ,8CACE,kDAEJ,2BAGE,uBACA,cAHA,gBACA,UAEA,CAGA,yCACE,mBAEF,gDAEE,gDADA,YACA,CACA,sDACE,gDACF,yDACE,sCAEJ,+CACE,UACA,qDACE,UAGF,mDACE,eAEJ,yEAEE,4DAEA,mHASE,mBAPA,kBAEA,YADA,oBAGA,aADA,gBAIA,CAEA,qIAEE,WADA,UACA,CAEJ,uGACE,aAEF,iUAGE,cAEF,mHACE,aC1EJ,gCACE,mCAEF,0BAEE,mBAUA,8CACA,YAFA,mCAKA,eAZA,cAIA,YADA,YAYA,iCAdA,YAcA,CAEA,gCAEE,8CADA,gCACA,CAEF,gCAGE,6BADA,mCADA,YAEA,CAEF,kCAEE,cADA,oBACA,CACA,wCACE,cAEJ,8BACE,UCzCN,KAEE,6CAA8C,CAC9C,uDAAwD,CACxD,uDAAwD,CAGxD,iCAAsC,CAGtC,+CAAgD,CAChD,uDAAwD,CACxD,uDAAwD,CACxD,oDAAqD,CACrD,6DAA8D,CAC9D,6DAA8D,CAG9D,uDAAwD,CACxD,yDAA0D,CAC1D,4DAA6D,CAC7D,2DAA4D,CAC5D,8DAA+D,CAC/D,iEAAkE,CAClE,uDAAwD,CACxD,wDAAyD,CAG3D,gBACE,qFAGF,SACE,6EAEF,cACE,uFAEF,cACE,uFAEF,cACE,uFAGF,qBACE,eAEF,mBACE,WACA,eChDF,KACE,gDAAiD,CACjD,uDAAwD,CACxD,qDAAsD,CACtD,4DAA6D,CAC7D,oCAAqC,CACrC,2CAA4C,CAC5C,4CAA6C,CAC7C,mDAAoD,CACpD,wBAAyB,CACzB,oBAAqB,CACrB,6CAA8C,CAC9C,gCAAiC,CACjC,yDAA0D,CAC1D,uDAAwD,CACxD,8DAA+D,CCbjE,uBACE,eACA,eACA,gBAGF,iBACE,YACA,+EAGF,iBACE,mDACA","sources":["webpack:///./src/furo/assets/styles/extensions/_readthedocs.sass","webpack:///./src/furo/assets/styles/extensions/_copybutton.sass","webpack:///./src/furo/assets/styles/extensions/_sphinx-design.sass","webpack:///./src/furo/assets/styles/extensions/_sphinx-inline-tabs.sass","webpack:///./src/furo/assets/styles/extensions/_sphinx-panels.sass"],"sourcesContent":["// This file contains the styles used for tweaking how ReadTheDoc's embedded\n// contents would show up inside the theme.\n\n#furo-sidebar-ad-placement\n padding: var(--sidebar-item-spacing-vertical) var(--sidebar-item-spacing-horizontal)\n .ethical-sidebar\n // Remove the border and box-shadow.\n border: none\n box-shadow: none\n // Manage the background colors.\n background: var(--color-background-secondary)\n &:hover\n background: var(--color-background-hover)\n // Ensure the text is legible.\n a\n color: var(--color-foreground-primary)\n\n .ethical-callout a\n color: var(--color-foreground-secondary) !important\n\n#furo-readthedocs-versions\n position: static\n width: 100%\n background: transparent\n display: block\n\n // Make the background color fit with the theme's aesthetic.\n .rst-versions\n background: rgb(26, 28, 30)\n\n .rst-current-version\n cursor: unset\n background: var(--color-sidebar-item-background)\n &:hover\n background: var(--color-sidebar-item-background)\n .fa-book\n color: var(--color-foreground-primary)\n\n > .rst-other-versions\n padding: 0\n small\n opacity: 1\n\n .injected\n .rst-versions\n position: unset\n\n &:hover,\n &:focus-within\n box-shadow: 0 0 0 1px var(--color-sidebar-background-border)\n\n .rst-current-version\n // Undo the tweaks done in RTD's CSS\n font-size: inherit\n line-height: inherit\n height: auto\n text-align: right\n padding: 12px\n\n // Match the rest of the body\n background: #1a1c1e\n\n .fa-book\n float: left\n color: white\n\n .fa-caret-down\n display: none\n\n .rst-current-version,\n .rst-other-versions,\n .injected\n display: block\n\n > .rst-current-version\n display: none\n",".highlight\n &:hover button.copybtn\n color: var(--color-code-foreground)\n\n button.copybtn\n // Align things correctly\n align-items: center\n\n height: 1.25em\n width: 1.25em\n\n top: 0.625rem // $code-spacing-vertical\n right: 0.5rem\n\n // Make it look better\n color: var(--color-background-item)\n background-color: var(--color-code-background)\n border: none\n\n // Change to cursor to make it obvious that you can click on it\n cursor: pointer\n\n // Transition smoothly, for aesthetics\n transition: color 300ms, opacity 300ms\n\n &:hover\n color: var(--color-brand-content)\n background-color: var(--color-code-background)\n\n &::after\n display: none\n color: var(--color-code-foreground)\n background-color: transparent\n\n &.success\n transition: color 0ms\n color: #22863a\n &::after\n display: block\n\n svg\n padding: 0\n","body\n // Colors\n --sd-color-primary: var(--color-brand-primary)\n --sd-color-primary-highlight: var(--color-brand-content)\n --sd-color-primary-text: var(--color-background-primary)\n\n // Shadows\n --sd-color-shadow: rgba(0, 0, 0, 0.05)\n\n // Cards\n --sd-color-card-border: var(--color-card-border)\n --sd-color-card-border-hover: var(--color-brand-content)\n --sd-color-card-background: var(--color-card-background)\n --sd-color-card-text: var(--color-foreground-primary)\n --sd-color-card-header: var(--color-card-marginals-background)\n --sd-color-card-footer: var(--color-card-marginals-background)\n\n // Tabs\n --sd-color-tabs-label-active: var(--color-brand-content)\n --sd-color-tabs-label-hover: var(--color-foreground-muted)\n --sd-color-tabs-label-inactive: var(--color-foreground-muted)\n --sd-color-tabs-underline-active: var(--color-brand-content)\n --sd-color-tabs-underline-hover: var(--color-foreground-border)\n --sd-color-tabs-underline-inactive: var(--color-background-border)\n --sd-color-tabs-overline: var(--color-background-border)\n --sd-color-tabs-underline: var(--color-background-border)\n\n// Tabs\n.sd-tab-content\n box-shadow: 0 -2px var(--sd-color-tabs-overline), 0 1px var(--sd-color-tabs-underline)\n\n// Shadows\n.sd-card // Have a shadow by default\n box-shadow: 0 0.1rem 0.25rem var(--sd-color-shadow), 0 0 0.0625rem rgba(0, 0, 0, 0.1)\n\n.sd-shadow-sm\n box-shadow: 0 0.1rem 0.25rem var(--sd-color-shadow), 0 0 0.0625rem rgba(0, 0, 0, 0.1) !important\n\n.sd-shadow-md\n box-shadow: 0 0.3rem 0.75rem var(--sd-color-shadow), 0 0 0.0625rem rgba(0, 0, 0, 0.1) !important\n\n.sd-shadow-lg\n box-shadow: 0 0.6rem 1.5rem var(--sd-color-shadow), 0 0 0.0625rem rgba(0, 0, 0, 0.1) !important\n\n// Cards\n.sd-card-hover:hover // Don't change scale on hover\n transform: none\n\n.sd-cards-carousel // Have a bit of gap in the carousel by default\n gap: 0.25rem\n padding: 0.25rem\n","// This file contains styles to tweak sphinx-inline-tabs to work well with Furo.\n\nbody\n --tabs--label-text: var(--color-foreground-muted)\n --tabs--label-text--hover: var(--color-foreground-muted)\n --tabs--label-text--active: var(--color-brand-content)\n --tabs--label-text--active--hover: var(--color-brand-content)\n --tabs--label-background: transparent\n --tabs--label-background--hover: transparent\n --tabs--label-background--active: transparent\n --tabs--label-background--active--hover: transparent\n --tabs--padding-x: 0.25em\n --tabs--margin-x: 1em\n --tabs--border: var(--color-background-border)\n --tabs--label-border: transparent\n --tabs--label-border--hover: var(--color-foreground-muted)\n --tabs--label-border--active: var(--color-brand-content)\n --tabs--label-border--active--hover: var(--color-brand-content)\n","// This file contains styles to tweak sphinx-panels to work well with Furo.\n\n// sphinx-panels includes Bootstrap 4, which uses .container which can conflict\n// with docutils' `.. container::` directive.\n[role=\"main\"] .container\n max-width: initial\n padding-left: initial\n padding-right: initial\n\n// Make the panels look nicer!\n.shadow.docutils\n border: none\n box-shadow: 0 0.2rem 0.5rem rgba(0, 0, 0, 0.05), 0 0 0.0625rem rgba(0, 0, 0, 0.1) !important\n\n// Make panel colors respond to dark mode\n.sphinx-bs .card\n background-color: var(--color-background-secondary)\n color: var(--color-foreground)\n"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/_static/styles/furo.css b/_static/styles/furo.css new file mode 100644 index 0000000..21836d6 --- /dev/null +++ b/_static/styles/furo.css @@ -0,0 +1,2 @@ +/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */html{line-height:1.15;-webkit-text-size-adjust:100%}body{margin:0}main{display:block}h1{font-size:2em;margin:.67em 0}hr{box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace,monospace;font-size:1em}a{background-color:transparent}abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace,monospace;font-size:1em}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}img{border-style:none}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring,button:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:.35em .75em .625em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{vertical-align:baseline}textarea{overflow:auto}[type=checkbox],[type=radio]{box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details{display:block}summary{display:list-item}[hidden],template{display:none}@media print{.content-icon-container,.headerlink,.mobile-header,.related-pages{display:none!important}.highlight{border:.1pt solid var(--color-foreground-border)}a,blockquote,dl,ol,pre,table,ul{page-break-inside:avoid}caption,figure,h1,h2,h3,h4,h5,h6,img{page-break-after:avoid;page-break-inside:avoid}dl,ol,ul{page-break-before:avoid}}.visually-hidden{height:1px!important;margin:-1px!important;overflow:hidden!important;padding:0!important;position:absolute!important;width:1px!important;clip:rect(0,0,0,0)!important;background:var(--color-background-primary);border:0!important;color:var(--color-foreground-primary);white-space:nowrap!important}:-moz-focusring{outline:auto}body{--font-stack:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji;--font-stack--monospace:"SFMono-Regular",Menlo,Consolas,Monaco,Liberation Mono,Lucida Console,monospace;--font-stack--headings:var(--font-stack);--font-size--normal:100%;--font-size--small:87.5%;--font-size--small--2:81.25%;--font-size--small--3:75%;--font-size--small--4:62.5%;--sidebar-caption-font-size:var(--font-size--small--2);--sidebar-item-font-size:var(--font-size--small);--sidebar-search-input-font-size:var(--font-size--small);--toc-font-size:var(--font-size--small--3);--toc-font-size--mobile:var(--font-size--normal);--toc-title-font-size:var(--font-size--small--4);--admonition-font-size:0.8125rem;--admonition-title-font-size:0.8125rem;--code-font-size:var(--font-size--small--2);--api-font-size:var(--font-size--small);--header-height:calc(var(--sidebar-item-line-height) + var(--sidebar-item-spacing-vertical)*4);--header-padding:0.5rem;--sidebar-tree-space-above:1.5rem;--sidebar-caption-space-above:1rem;--sidebar-item-line-height:1rem;--sidebar-item-spacing-vertical:0.5rem;--sidebar-item-spacing-horizontal:1rem;--sidebar-item-height:calc(var(--sidebar-item-line-height) + var(--sidebar-item-spacing-vertical)*2);--sidebar-expander-width:var(--sidebar-item-height);--sidebar-search-space-above:0.5rem;--sidebar-search-input-spacing-vertical:0.5rem;--sidebar-search-input-spacing-horizontal:0.5rem;--sidebar-search-input-height:1rem;--sidebar-search-icon-size:var(--sidebar-search-input-height);--toc-title-padding:0.25rem 0;--toc-spacing-vertical:1.5rem;--toc-spacing-horizontal:1.5rem;--toc-item-spacing-vertical:0.4rem;--toc-item-spacing-horizontal:1rem;--icon-search:url('data:image/svg+xml;charset=utf-8,');--icon-pencil:url('data:image/svg+xml;charset=utf-8,');--icon-abstract:url('data:image/svg+xml;charset=utf-8,');--icon-info:url('data:image/svg+xml;charset=utf-8,');--icon-flame:url('data:image/svg+xml;charset=utf-8,');--icon-question:url('data:image/svg+xml;charset=utf-8,');--icon-warning:url('data:image/svg+xml;charset=utf-8,');--icon-failure:url('data:image/svg+xml;charset=utf-8,');--icon-spark:url('data:image/svg+xml;charset=utf-8,');--color-admonition-title--caution:#ff9100;--color-admonition-title-background--caution:rgba(255,145,0,.2);--color-admonition-title--warning:#ff9100;--color-admonition-title-background--warning:rgba(255,145,0,.2);--color-admonition-title--danger:#ff5252;--color-admonition-title-background--danger:rgba(255,82,82,.2);--color-admonition-title--attention:#ff5252;--color-admonition-title-background--attention:rgba(255,82,82,.2);--color-admonition-title--error:#ff5252;--color-admonition-title-background--error:rgba(255,82,82,.2);--color-admonition-title--hint:#00c852;--color-admonition-title-background--hint:rgba(0,200,82,.2);--color-admonition-title--tip:#00c852;--color-admonition-title-background--tip:rgba(0,200,82,.2);--color-admonition-title--important:#00bfa5;--color-admonition-title-background--important:rgba(0,191,165,.2);--color-admonition-title--note:#00b0ff;--color-admonition-title-background--note:rgba(0,176,255,.2);--color-admonition-title--seealso:#448aff;--color-admonition-title-background--seealso:rgba(68,138,255,.2);--color-admonition-title--admonition-todo:grey;--color-admonition-title-background--admonition-todo:hsla(0,0%,50%,.2);--color-admonition-title:#651fff;--color-admonition-title-background:rgba(101,31,255,.2);--icon-admonition-default:var(--icon-abstract);--color-topic-title:#14b8a6;--color-topic-title-background:rgba(20,184,166,.2);--icon-topic-default:var(--icon-pencil);--color-problematic:#b30000;--color-foreground-primary:#000;--color-foreground-secondary:#5a5c63;--color-foreground-muted:#6b6f76;--color-foreground-border:#878787;--color-background-primary:#fff;--color-background-secondary:#f8f9fb;--color-background-hover:#efeff4;--color-background-hover--transparent:#efeff400;--color-background-border:#eeebee;--color-background-item:#ccc;--color-announcement-background:#000000dd;--color-announcement-text:#eeebee;--color-brand-primary:#0a4bff;--color-brand-content:#2757dd;--color-brand-visited:#872ee0;--color-api-background:var(--color-background-hover--transparent);--color-api-background-hover:var(--color-background-hover);--color-api-overall:var(--color-foreground-secondary);--color-api-name:var(--color-problematic);--color-api-pre-name:var(--color-problematic);--color-api-paren:var(--color-foreground-secondary);--color-api-keyword:var(--color-foreground-primary);--color-api-added:#21632c;--color-api-added-border:#38a84d;--color-api-changed:#046172;--color-api-changed-border:#06a1bc;--color-api-deprecated:#605706;--color-api-deprecated-border:#f0d90f;--color-api-removed:#b30000;--color-api-removed-border:#ff5c5c;--color-highlight-on-target:#ffc;--color-inline-code-background:var(--color-background-secondary);--color-highlighted-background:#def;--color-highlighted-text:var(--color-foreground-primary);--color-guilabel-background:#ddeeff80;--color-guilabel-border:#bedaf580;--color-guilabel-text:var(--color-foreground-primary);--color-admonition-background:transparent;--color-table-header-background:var(--color-background-secondary);--color-table-border:var(--color-background-border);--color-card-border:var(--color-background-secondary);--color-card-background:transparent;--color-card-marginals-background:var(--color-background-secondary);--color-header-background:var(--color-background-primary);--color-header-border:var(--color-background-border);--color-header-text:var(--color-foreground-primary);--color-sidebar-background:var(--color-background-secondary);--color-sidebar-background-border:var(--color-background-border);--color-sidebar-brand-text:var(--color-foreground-primary);--color-sidebar-caption-text:var(--color-foreground-muted);--color-sidebar-link-text:var(--color-foreground-secondary);--color-sidebar-link-text--top-level:var(--color-brand-primary);--color-sidebar-item-background:var(--color-sidebar-background);--color-sidebar-item-background--current:var( --color-sidebar-item-background );--color-sidebar-item-background--hover:linear-gradient(90deg,var(--color-background-hover--transparent) 0%,var(--color-background-hover) var(--sidebar-item-spacing-horizontal),var(--color-background-hover) 100%);--color-sidebar-item-expander-background:transparent;--color-sidebar-item-expander-background--hover:var( --color-background-hover );--color-sidebar-search-text:var(--color-foreground-primary);--color-sidebar-search-background:var(--color-background-secondary);--color-sidebar-search-background--focus:var(--color-background-primary);--color-sidebar-search-border:var(--color-background-border);--color-sidebar-search-icon:var(--color-foreground-muted);--color-toc-background:var(--color-background-primary);--color-toc-title-text:var(--color-foreground-muted);--color-toc-item-text:var(--color-foreground-secondary);--color-toc-item-text--hover:var(--color-foreground-primary);--color-toc-item-text--active:var(--color-brand-primary);--color-content-foreground:var(--color-foreground-primary);--color-content-background:transparent;--color-link:var(--color-brand-content);--color-link-underline:var(--color-background-border);--color-link--hover:var(--color-brand-content);--color-link-underline--hover:var(--color-foreground-border);--color-link--visited:var(--color-brand-visited);--color-link-underline--visited:var(--color-background-border);--color-link--visited--hover:var(--color-brand-visited);--color-link-underline--visited--hover:var(--color-foreground-border)}.only-light{display:block!important}html body .only-dark{display:none!important}@media not print{body[data-theme=dark]{--color-problematic:#ee5151;--color-foreground-primary:#cfd0d0;--color-foreground-secondary:#9ca0a5;--color-foreground-muted:#81868d;--color-foreground-border:#666;--color-background-primary:#131416;--color-background-secondary:#1a1c1e;--color-background-hover:#1e2124;--color-background-hover--transparent:#1e212400;--color-background-border:#303335;--color-background-item:#444;--color-announcement-background:#000000dd;--color-announcement-text:#eeebee;--color-brand-primary:#3d94ff;--color-brand-content:#5ca5ff;--color-brand-visited:#b27aeb;--color-highlighted-background:#083563;--color-guilabel-background:#08356380;--color-guilabel-border:#13395f80;--color-api-keyword:var(--color-foreground-secondary);--color-highlight-on-target:#330;--color-api-added:#3db854;--color-api-added-border:#267334;--color-api-changed:#09b0ce;--color-api-changed-border:#056d80;--color-api-deprecated:#b1a10b;--color-api-deprecated-border:#6e6407;--color-api-removed:#ff7575;--color-api-removed-border:#b03b3b;--color-admonition-background:#18181a;--color-card-border:var(--color-background-secondary);--color-card-background:#18181a;--color-card-marginals-background:var(--color-background-hover)}html body[data-theme=dark] .only-light{display:none!important}body[data-theme=dark] .only-dark{display:block!important}@media(prefers-color-scheme:dark){body:not([data-theme=light]){--color-problematic:#ee5151;--color-foreground-primary:#cfd0d0;--color-foreground-secondary:#9ca0a5;--color-foreground-muted:#81868d;--color-foreground-border:#666;--color-background-primary:#131416;--color-background-secondary:#1a1c1e;--color-background-hover:#1e2124;--color-background-hover--transparent:#1e212400;--color-background-border:#303335;--color-background-item:#444;--color-announcement-background:#000000dd;--color-announcement-text:#eeebee;--color-brand-primary:#3d94ff;--color-brand-content:#5ca5ff;--color-brand-visited:#b27aeb;--color-highlighted-background:#083563;--color-guilabel-background:#08356380;--color-guilabel-border:#13395f80;--color-api-keyword:var(--color-foreground-secondary);--color-highlight-on-target:#330;--color-api-added:#3db854;--color-api-added-border:#267334;--color-api-changed:#09b0ce;--color-api-changed-border:#056d80;--color-api-deprecated:#b1a10b;--color-api-deprecated-border:#6e6407;--color-api-removed:#ff7575;--color-api-removed-border:#b03b3b;--color-admonition-background:#18181a;--color-card-border:var(--color-background-secondary);--color-card-background:#18181a;--color-card-marginals-background:var(--color-background-hover)}html body:not([data-theme=light]) .only-light{display:none!important}body:not([data-theme=light]) .only-dark{display:block!important}}}body[data-theme=auto] .theme-toggle svg.theme-icon-when-auto-light{display:block}@media(prefers-color-scheme:dark){body[data-theme=auto] .theme-toggle svg.theme-icon-when-auto-dark{display:block}body[data-theme=auto] .theme-toggle svg.theme-icon-when-auto-light{display:none}}body[data-theme=dark] .theme-toggle svg.theme-icon-when-dark,body[data-theme=light] .theme-toggle svg.theme-icon-when-light{display:block}body{font-family:var(--font-stack)}code,kbd,pre,samp{font-family:var(--font-stack--monospace)}body{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}article{line-height:1.5}h1,h2,h3,h4,h5,h6{border-radius:.5rem;font-family:var(--font-stack--headings);font-weight:700;line-height:1.25;margin:.5rem -.5rem;padding-left:.5rem;padding-right:.5rem}h1+p,h2+p,h3+p,h4+p,h5+p,h6+p{margin-top:0}h1{font-size:2.5em;margin-bottom:1rem}h1,h2{margin-top:1.75rem}h2{font-size:2em}h3{font-size:1.5em}h4{font-size:1.25em}h5{font-size:1.125em}h6{font-size:1em}small{font-size:80%;opacity:75%}p{margin-bottom:.75rem;margin-top:.5rem}hr.docutils{background-color:var(--color-background-border);border:0;height:1px;margin:2rem 0;padding:0}.centered{text-align:center}a{color:var(--color-link);text-decoration:underline;text-decoration-color:var(--color-link-underline)}a:visited{color:var(--color-link--visited);text-decoration-color:var(--color-link-underline--visited)}a:visited:hover{color:var(--color-link--visited--hover);text-decoration-color:var(--color-link-underline--visited--hover)}a:hover{color:var(--color-link--hover);text-decoration-color:var(--color-link-underline--hover)}a.muted-link{color:inherit}a.muted-link:hover{color:var(--color-link--hover);text-decoration-color:var(--color-link-underline--hover)}a.muted-link:hover:visited{color:var(--color-link--visited--hover);text-decoration-color:var(--color-link-underline--visited--hover)}html{overflow-x:hidden;overflow-y:scroll;scroll-behavior:smooth}.sidebar-scroll,.toc-scroll,article[role=main] *{scrollbar-color:var(--color-foreground-border) transparent;scrollbar-width:thin}.sidebar-scroll::-webkit-scrollbar,.toc-scroll::-webkit-scrollbar,article[role=main] ::-webkit-scrollbar{height:.25rem;width:.25rem}.sidebar-scroll::-webkit-scrollbar-thumb,.toc-scroll::-webkit-scrollbar-thumb,article[role=main] ::-webkit-scrollbar-thumb{background-color:var(--color-foreground-border);border-radius:.125rem}body,html{height:100%}.skip-to-content,body,html{background:var(--color-background-primary);color:var(--color-foreground-primary)}.skip-to-content{border-radius:1rem;left:.25rem;padding:1rem;position:fixed;top:.25rem;transform:translateY(-200%);transition:transform .3s ease-in-out;z-index:40}.skip-to-content:focus-within{transform:translateY(0)}article{background:var(--color-content-background);color:var(--color-content-foreground);overflow-wrap:break-word}.page{display:flex;min-height:100%}.mobile-header{background-color:var(--color-header-background);border-bottom:1px solid var(--color-header-border);color:var(--color-header-text);display:none;height:var(--header-height);width:100%;z-index:10}.mobile-header.scrolled{border-bottom:none;box-shadow:0 0 .2rem rgba(0,0,0,.1),0 .2rem .4rem rgba(0,0,0,.2)}.mobile-header .header-center a{color:var(--color-header-text);text-decoration:none}.main{display:flex;flex:1}.sidebar-drawer{background:var(--color-sidebar-background);border-right:1px solid var(--color-sidebar-background-border);box-sizing:border-box;display:flex;justify-content:flex-end;min-width:15em;width:calc(50% - 26em)}.sidebar-container,.toc-drawer{box-sizing:border-box;width:15em}.toc-drawer{background:var(--color-toc-background);padding-right:1rem}.sidebar-sticky,.toc-sticky{display:flex;flex-direction:column;height:min(100%,100vh);height:100vh;position:sticky;top:0}.sidebar-scroll,.toc-scroll{flex-grow:1;flex-shrink:1;overflow:auto;scroll-behavior:smooth}.content{display:flex;flex-direction:column;justify-content:space-between;padding:0 3em;width:46em}.icon{display:inline-block;height:1rem;width:1rem}.icon svg{height:100%;width:100%}.announcement{align-items:center;background-color:var(--color-announcement-background);color:var(--color-announcement-text);display:flex;height:var(--header-height);overflow-x:auto}.announcement+.page{min-height:calc(100% - var(--header-height))}.announcement-content{box-sizing:border-box;min-width:100%;padding:.5rem;text-align:center;white-space:nowrap}.announcement-content a{color:var(--color-announcement-text);text-decoration-color:var(--color-announcement-text)}.announcement-content a:hover{color:var(--color-announcement-text);text-decoration-color:var(--color-link--hover)}.no-js .theme-toggle-container{display:none}.theme-toggle-container{display:flex}.theme-toggle{background:transparent;border:none;cursor:pointer;display:flex;padding:0}.theme-toggle svg{color:var(--color-foreground-primary);display:none;height:1.25rem;width:1.25rem}.theme-toggle-header{align-items:center;display:flex;justify-content:center}.nav-overlay-icon,.toc-overlay-icon{cursor:pointer;display:none}.nav-overlay-icon .icon,.toc-overlay-icon .icon{color:var(--color-foreground-secondary);height:1.5rem;width:1.5rem}.nav-overlay-icon,.toc-header-icon{align-items:center;justify-content:center}.toc-content-icon{height:1.5rem;width:1.5rem}.content-icon-container{display:flex;float:right;gap:.5rem;margin-bottom:1rem;margin-left:1rem;margin-top:1.5rem}.content-icon-container .edit-this-page svg,.content-icon-container .view-this-page svg{color:inherit;height:1.25rem;width:1.25rem}.sidebar-toggle{display:none;position:absolute}.sidebar-toggle[name=__toc]{left:20px}.sidebar-toggle:checked{left:40px}.overlay{background-color:rgba(0,0,0,.54);height:0;opacity:0;position:fixed;top:0;transition:width 0ms,height 0ms,opacity .25s ease-out;width:0}.sidebar-overlay{z-index:20}.toc-overlay{z-index:40}.sidebar-drawer{transition:left .25s ease-in-out;z-index:30}.toc-drawer{transition:right .25s ease-in-out;z-index:50}#__navigation:checked~.sidebar-overlay{height:100%;opacity:1;width:100%}#__navigation:checked~.page .sidebar-drawer{left:0;top:0}#__toc:checked~.toc-overlay{height:100%;opacity:1;width:100%}#__toc:checked~.page .toc-drawer{right:0;top:0}.back-to-top{background:var(--color-background-primary);border-radius:1rem;box-shadow:0 .2rem .5rem rgba(0,0,0,.05),0 0 1px 0 hsla(220,9%,46%,.502);display:none;font-size:.8125rem;left:0;margin-left:50%;padding:.5rem .75rem .5rem .5rem;position:fixed;text-decoration:none;top:1rem;transform:translateX(-50%);z-index:10}.back-to-top svg{height:1rem;width:1rem;fill:currentColor;display:inline-block}.back-to-top span{margin-left:.25rem}.show-back-to-top .back-to-top{align-items:center;display:flex}@media(min-width:97em){html{font-size:110%}}@media(max-width:82em){.toc-content-icon{display:flex}.toc-drawer{border-left:1px solid var(--color-background-muted);height:100vh;position:fixed;right:-15em;top:0}.toc-tree{border-left:none;font-size:var(--toc-font-size--mobile)}.sidebar-drawer{width:calc(50% - 18.5em)}}@media(max-width:67em){.nav-overlay-icon{display:flex}.sidebar-drawer{height:100vh;left:-15em;position:fixed;top:0;width:15em}.theme-toggle-header,.toc-header-icon{display:flex}.theme-toggle-content,.toc-content-icon{display:none}.mobile-header{align-items:center;display:flex;justify-content:space-between;position:sticky;top:0}.mobile-header .header-left,.mobile-header .header-right{display:flex;height:var(--header-height);padding:0 var(--header-padding)}.mobile-header .header-left label,.mobile-header .header-right label{height:100%;-webkit-user-select:none;-moz-user-select:none;user-select:none;width:100%}.nav-overlay-icon .icon,.theme-toggle svg{height:1.5rem;width:1.5rem}:target{scroll-margin-top:calc(var(--header-height) + 2.5rem)}.back-to-top{top:calc(var(--header-height) + .5rem)}.page{flex-direction:column;justify-content:center}.content{margin-left:auto;margin-right:auto}}@media(max-width:52em){.content{overflow-x:auto;width:100%}}@media(max-width:46em){.content{padding:0 1em}article aside.sidebar{float:none;margin:1rem 0;width:100%}}.admonition,.topic{background:var(--color-admonition-background);border-radius:.2rem;box-shadow:0 .2rem .5rem rgba(0,0,0,.05),0 0 .0625rem rgba(0,0,0,.1);font-size:var(--admonition-font-size);margin:1rem auto;overflow:hidden;padding:0 .5rem .5rem;page-break-inside:avoid}.admonition>:nth-child(2),.topic>:nth-child(2){margin-top:0}.admonition>:last-child,.topic>:last-child{margin-bottom:0}.admonition p.admonition-title,p.topic-title{font-size:var(--admonition-title-font-size);font-weight:500;line-height:1.3;margin:0 -.5rem .5rem;padding:.4rem .5rem .4rem 2rem;position:relative}.admonition p.admonition-title:before,p.topic-title:before{content:"";height:1rem;left:.5rem;position:absolute;width:1rem}p.admonition-title{background-color:var(--color-admonition-title-background)}p.admonition-title:before{background-color:var(--color-admonition-title);-webkit-mask-image:var(--icon-admonition-default);mask-image:var(--icon-admonition-default);-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}p.topic-title{background-color:var(--color-topic-title-background)}p.topic-title:before{background-color:var(--color-topic-title);-webkit-mask-image:var(--icon-topic-default);mask-image:var(--icon-topic-default);-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.admonition{border-left:.2rem solid var(--color-admonition-title)}.admonition.caution{border-left-color:var(--color-admonition-title--caution)}.admonition.caution>.admonition-title{background-color:var(--color-admonition-title-background--caution)}.admonition.caution>.admonition-title:before{background-color:var(--color-admonition-title--caution);-webkit-mask-image:var(--icon-spark);mask-image:var(--icon-spark)}.admonition.warning{border-left-color:var(--color-admonition-title--warning)}.admonition.warning>.admonition-title{background-color:var(--color-admonition-title-background--warning)}.admonition.warning>.admonition-title:before{background-color:var(--color-admonition-title--warning);-webkit-mask-image:var(--icon-warning);mask-image:var(--icon-warning)}.admonition.danger{border-left-color:var(--color-admonition-title--danger)}.admonition.danger>.admonition-title{background-color:var(--color-admonition-title-background--danger)}.admonition.danger>.admonition-title:before{background-color:var(--color-admonition-title--danger);-webkit-mask-image:var(--icon-spark);mask-image:var(--icon-spark)}.admonition.attention{border-left-color:var(--color-admonition-title--attention)}.admonition.attention>.admonition-title{background-color:var(--color-admonition-title-background--attention)}.admonition.attention>.admonition-title:before{background-color:var(--color-admonition-title--attention);-webkit-mask-image:var(--icon-warning);mask-image:var(--icon-warning)}.admonition.error{border-left-color:var(--color-admonition-title--error)}.admonition.error>.admonition-title{background-color:var(--color-admonition-title-background--error)}.admonition.error>.admonition-title:before{background-color:var(--color-admonition-title--error);-webkit-mask-image:var(--icon-failure);mask-image:var(--icon-failure)}.admonition.hint{border-left-color:var(--color-admonition-title--hint)}.admonition.hint>.admonition-title{background-color:var(--color-admonition-title-background--hint)}.admonition.hint>.admonition-title:before{background-color:var(--color-admonition-title--hint);-webkit-mask-image:var(--icon-question);mask-image:var(--icon-question)}.admonition.tip{border-left-color:var(--color-admonition-title--tip)}.admonition.tip>.admonition-title{background-color:var(--color-admonition-title-background--tip)}.admonition.tip>.admonition-title:before{background-color:var(--color-admonition-title--tip);-webkit-mask-image:var(--icon-info);mask-image:var(--icon-info)}.admonition.important{border-left-color:var(--color-admonition-title--important)}.admonition.important>.admonition-title{background-color:var(--color-admonition-title-background--important)}.admonition.important>.admonition-title:before{background-color:var(--color-admonition-title--important);-webkit-mask-image:var(--icon-flame);mask-image:var(--icon-flame)}.admonition.note{border-left-color:var(--color-admonition-title--note)}.admonition.note>.admonition-title{background-color:var(--color-admonition-title-background--note)}.admonition.note>.admonition-title:before{background-color:var(--color-admonition-title--note);-webkit-mask-image:var(--icon-pencil);mask-image:var(--icon-pencil)}.admonition.seealso{border-left-color:var(--color-admonition-title--seealso)}.admonition.seealso>.admonition-title{background-color:var(--color-admonition-title-background--seealso)}.admonition.seealso>.admonition-title:before{background-color:var(--color-admonition-title--seealso);-webkit-mask-image:var(--icon-info);mask-image:var(--icon-info)}.admonition.admonition-todo{border-left-color:var(--color-admonition-title--admonition-todo)}.admonition.admonition-todo>.admonition-title{background-color:var(--color-admonition-title-background--admonition-todo)}.admonition.admonition-todo>.admonition-title:before{background-color:var(--color-admonition-title--admonition-todo);-webkit-mask-image:var(--icon-pencil);mask-image:var(--icon-pencil)}.admonition-todo>.admonition-title{text-transform:uppercase}dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) dd{margin-left:2rem}dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) dd>:first-child{margin-top:.125rem}dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .field-list,dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) dd>:last-child{margin-bottom:.75rem}dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .field-list>dt{font-size:var(--font-size--small);text-transform:uppercase}dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .field-list dd:empty{margin-bottom:.5rem}dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .field-list dd>ul{margin-left:-1.2rem}dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .field-list dd>ul>li>p:nth-child(2){margin-top:0}dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .field-list dd>ul>li>p+p:last-child:empty{margin-bottom:0;margin-top:0}dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)>dt{color:var(--color-api-overall)}.sig:not(.sig-inline){background:var(--color-api-background);border-radius:.25rem;font-family:var(--font-stack--monospace);font-size:var(--api-font-size);font-weight:700;margin-left:-.25rem;margin-right:-.25rem;padding:.25rem .5rem .25rem 3em;text-indent:-2.5em;transition:background .1s ease-out}.sig:not(.sig-inline):hover{background:var(--color-api-background-hover)}.sig:not(.sig-inline) a.reference .viewcode-link{font-weight:400;width:4.25rem}em.property{font-style:normal}em.property:first-child{color:var(--color-api-keyword)}.sig-name{color:var(--color-api-name)}.sig-prename{color:var(--color-api-pre-name);font-weight:400}.sig-paren{color:var(--color-api-paren)}.sig-param{font-style:normal}div.deprecated,div.versionadded,div.versionchanged,div.versionremoved{border-left:.1875rem solid;border-radius:.125rem;padding-left:.75rem}div.deprecated p,div.versionadded p,div.versionchanged p,div.versionremoved p{margin-bottom:.125rem;margin-top:.125rem}div.versionadded{border-color:var(--color-api-added-border)}div.versionadded .versionmodified{color:var(--color-api-added)}div.versionchanged{border-color:var(--color-api-changed-border)}div.versionchanged .versionmodified{color:var(--color-api-changed)}div.deprecated{border-color:var(--color-api-deprecated-border)}div.deprecated .versionmodified{color:var(--color-api-deprecated)}div.versionremoved{border-color:var(--color-api-removed-border)}div.versionremoved .versionmodified{color:var(--color-api-removed)}.viewcode-back,.viewcode-link{float:right;text-align:right}.line-block{margin-bottom:.75rem;margin-top:.5rem}.line-block .line-block{margin-bottom:0;margin-top:0;padding-left:1rem}.code-block-caption,article p.caption,table>caption{font-size:var(--font-size--small);text-align:center}.toctree-wrapper.compound .caption,.toctree-wrapper.compound :not(.caption)>.caption-text{font-size:var(--font-size--small);margin-bottom:0;text-align:initial;text-transform:uppercase}.toctree-wrapper.compound>ul{margin-bottom:0;margin-top:0}.sig-inline,code.literal{background:var(--color-inline-code-background);border-radius:.2em;font-size:var(--font-size--small--2);padding:.1em .2em}pre.literal-block .sig-inline,pre.literal-block code.literal{font-size:inherit;padding:0}p .sig-inline,p code.literal{border:1px solid var(--color-background-border)}.sig-inline{font-family:var(--font-stack--monospace)}div[class*=" highlight-"],div[class^=highlight-]{display:flex;margin:1em 0}div[class*=" highlight-"] .table-wrapper,div[class^=highlight-] .table-wrapper,pre{margin:0;padding:0}pre{overflow:auto}article[role=main] .highlight pre{line-height:1.5}.highlight pre,pre.literal-block{font-size:var(--code-font-size);padding:.625rem .875rem}pre.literal-block{background-color:var(--color-code-background);border-radius:.2rem;color:var(--color-code-foreground);margin-bottom:1rem;margin-top:1rem}.highlight{border-radius:.2rem;width:100%}.highlight .gp,.highlight span.linenos{pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.highlight .hll{display:block;margin-left:-.875rem;margin-right:-.875rem;padding-left:.875rem;padding-right:.875rem}.code-block-caption{background-color:var(--color-code-background);border-bottom:1px solid;border-radius:.25rem;border-bottom-left-radius:0;border-bottom-right-radius:0;border-color:var(--color-background-border);color:var(--color-code-foreground);display:flex;font-weight:300;padding:.625rem .875rem}.code-block-caption+div[class]{margin-top:0}.code-block-caption+div[class] pre{border-top-left-radius:0;border-top-right-radius:0}.highlighttable{display:block;width:100%}.highlighttable tbody{display:block}.highlighttable tr{display:flex}.highlighttable td.linenos{background-color:var(--color-code-background);border-bottom-left-radius:.2rem;border-top-left-radius:.2rem;color:var(--color-code-foreground);padding:.625rem 0 .625rem .875rem}.highlighttable .linenodiv{box-shadow:-.0625rem 0 var(--color-foreground-border) inset;font-size:var(--code-font-size);padding-right:.875rem}.highlighttable td.code{display:block;flex:1;overflow:hidden;padding:0}.highlighttable td.code .highlight{border-bottom-left-radius:0;border-top-left-radius:0}.highlight span.linenos{box-shadow:-.0625rem 0 var(--color-foreground-border) inset;display:inline-block;margin-right:.875rem;padding-left:0;padding-right:.875rem}.footnote-reference{font-size:var(--font-size--small--4);vertical-align:super}dl.footnote.brackets{color:var(--color-foreground-secondary);display:grid;font-size:var(--font-size--small);grid-template-columns:max-content auto}dl.footnote.brackets dt{margin:0}dl.footnote.brackets dt>.fn-backref{margin-left:.25rem}dl.footnote.brackets dt:after{content:":"}dl.footnote.brackets dt .brackets:before{content:"["}dl.footnote.brackets dt .brackets:after{content:"]"}dl.footnote.brackets dd{margin:0;padding:0 1rem}aside.footnote{color:var(--color-foreground-secondary);font-size:var(--font-size--small)}aside.footnote>span,div.citation>span{float:left;font-weight:500;padding-right:.25rem}aside.footnote>:not(span),div.citation>p{margin-left:2rem}img{box-sizing:border-box;height:auto;max-width:100%}article .figure,article figure{border-radius:.2rem;margin:0}article .figure :last-child,article figure :last-child{margin-bottom:0}article .align-left{clear:left;float:left;margin:0 1rem 1rem}article .align-right{clear:right;float:right;margin:0 1rem 1rem}article .align-center,article .align-default{display:block;margin-left:auto;margin-right:auto;text-align:center}article table.align-default{display:table;text-align:initial}.domainindex-jumpbox,.genindex-jumpbox{border-bottom:1px solid var(--color-background-border);border-top:1px solid var(--color-background-border);padding:.25rem}.domainindex-section h2,.genindex-section h2{margin-bottom:.5rem;margin-top:.75rem}.domainindex-section ul,.genindex-section ul{margin-bottom:0;margin-top:0}ol,ul{margin-bottom:1rem;margin-top:1rem;padding-left:1.2rem}ol li>p:first-child,ul li>p:first-child{margin-bottom:.25rem;margin-top:.25rem}ol li>p:last-child,ul li>p:last-child{margin-top:.25rem}ol li>ol,ol li>ul,ul li>ol,ul li>ul{margin-bottom:.5rem;margin-top:.5rem}ol.arabic{list-style:decimal}ol.loweralpha{list-style:lower-alpha}ol.upperalpha{list-style:upper-alpha}ol.lowerroman{list-style:lower-roman}ol.upperroman{list-style:upper-roman}.simple li>ol,.simple li>ul,.toctree-wrapper li>ol,.toctree-wrapper li>ul{margin-bottom:0;margin-top:0}.field-list dt,.option-list dt,dl.footnote dt,dl.glossary dt,dl.simple dt,dl:not([class]) dt{font-weight:500;margin-top:.25rem}.field-list dt+dt,.option-list dt+dt,dl.footnote dt+dt,dl.glossary dt+dt,dl.simple dt+dt,dl:not([class]) dt+dt{margin-top:0}.field-list dt .classifier:before,.option-list dt .classifier:before,dl.footnote dt .classifier:before,dl.glossary dt .classifier:before,dl.simple dt .classifier:before,dl:not([class]) dt .classifier:before{content:":";margin-left:.2rem;margin-right:.2rem}.field-list dd ul,.field-list dd>p:first-child,.option-list dd ul,.option-list dd>p:first-child,dl.footnote dd ul,dl.footnote dd>p:first-child,dl.glossary dd ul,dl.glossary dd>p:first-child,dl.simple dd ul,dl.simple dd>p:first-child,dl:not([class]) dd ul,dl:not([class]) dd>p:first-child{margin-top:.125rem}.field-list dd ul,.option-list dd ul,dl.footnote dd ul,dl.glossary dd ul,dl.simple dd ul,dl:not([class]) dd ul{margin-bottom:.125rem}.math-wrapper{overflow-x:auto;width:100%}div.math{position:relative;text-align:center}div.math .headerlink,div.math:focus .headerlink{display:none}div.math:hover .headerlink{display:inline-block}div.math span.eqno{position:absolute;right:.5rem;top:50%;transform:translateY(-50%);z-index:1}abbr[title]{cursor:help}.problematic{color:var(--color-problematic)}kbd:not(.compound){background-color:var(--color-background-secondary);border:1px solid var(--color-foreground-border);border-radius:.2rem;box-shadow:0 .0625rem 0 rgba(0,0,0,.2),inset 0 0 0 .125rem var(--color-background-primary);color:var(--color-foreground-primary);display:inline-block;font-size:var(--font-size--small--3);margin:0 .2rem;padding:0 .2rem;vertical-align:text-bottom}blockquote{background:var(--color-background-secondary);border-left:4px solid var(--color-background-border);margin-left:0;margin-right:0;padding:.5rem 1rem}blockquote .attribution{font-weight:600;text-align:right}blockquote.highlights,blockquote.pull-quote{font-size:1.25em}blockquote.epigraph,blockquote.pull-quote{border-left-width:0;border-radius:.5rem}blockquote.highlights{background:transparent;border-left-width:0}p .reference img{vertical-align:middle}p.rubric{font-size:1.125em;font-weight:700;line-height:1.25}dd p.rubric{font-size:var(--font-size--small);font-weight:inherit;line-height:inherit;text-transform:uppercase}article .sidebar{background-color:var(--color-background-secondary);border:1px solid var(--color-background-border);border-radius:.2rem;clear:right;float:right;margin-left:1rem;margin-right:0;width:30%}article .sidebar>*{padding-left:1rem;padding-right:1rem}article .sidebar>ol,article .sidebar>ul{padding-left:2.2rem}article .sidebar .sidebar-title{border-bottom:1px solid var(--color-background-border);font-weight:500;margin:0;padding:.5rem 1rem}.table-wrapper{margin-bottom:.5rem;margin-top:1rem;overflow-x:auto;padding:.2rem .2rem .75rem;width:100%}table.docutils{border-collapse:collapse;border-radius:.2rem;border-spacing:0;box-shadow:0 .2rem .5rem rgba(0,0,0,.05),0 0 .0625rem rgba(0,0,0,.1)}table.docutils th{background:var(--color-table-header-background)}table.docutils td,table.docutils th{border-bottom:1px solid var(--color-table-border);border-left:1px solid var(--color-table-border);border-right:1px solid var(--color-table-border);padding:0 .25rem}table.docutils td p,table.docutils th p{margin:.25rem}table.docutils td:first-child,table.docutils th:first-child{border-left:none}table.docutils td:last-child,table.docutils th:last-child{border-right:none}table.docutils td.text-left,table.docutils th.text-left{text-align:left}table.docutils td.text-right,table.docutils th.text-right{text-align:right}table.docutils td.text-center,table.docutils th.text-center{text-align:center}:target{scroll-margin-top:2.5rem}@media(max-width:67em){:target{scroll-margin-top:calc(2.5rem + var(--header-height))}section>span:target{scroll-margin-top:calc(2.8rem + var(--header-height))}}.headerlink{font-weight:100;-webkit-user-select:none;-moz-user-select:none;user-select:none}.code-block-caption>.headerlink,dl dt>.headerlink,figcaption p>.headerlink,h1>.headerlink,h2>.headerlink,h3>.headerlink,h4>.headerlink,h5>.headerlink,h6>.headerlink,p.caption>.headerlink,table>caption>.headerlink{margin-left:.5rem;visibility:hidden}.code-block-caption:hover>.headerlink,dl dt:hover>.headerlink,figcaption p:hover>.headerlink,h1:hover>.headerlink,h2:hover>.headerlink,h3:hover>.headerlink,h4:hover>.headerlink,h5:hover>.headerlink,h6:hover>.headerlink,p.caption:hover>.headerlink,table>caption:hover>.headerlink{visibility:visible}.code-block-caption>.toc-backref,dl dt>.toc-backref,figcaption p>.toc-backref,h1>.toc-backref,h2>.toc-backref,h3>.toc-backref,h4>.toc-backref,h5>.toc-backref,h6>.toc-backref,p.caption>.toc-backref,table>caption>.toc-backref{color:inherit;text-decoration-line:none}figure:hover>figcaption>p>.headerlink,table:hover>caption>.headerlink{visibility:visible}:target>h1:first-of-type,:target>h2:first-of-type,:target>h3:first-of-type,:target>h4:first-of-type,:target>h5:first-of-type,:target>h6:first-of-type,span:target~h1:first-of-type,span:target~h2:first-of-type,span:target~h3:first-of-type,span:target~h4:first-of-type,span:target~h5:first-of-type,span:target~h6:first-of-type{background-color:var(--color-highlight-on-target)}:target>h1:first-of-type code.literal,:target>h2:first-of-type code.literal,:target>h3:first-of-type code.literal,:target>h4:first-of-type code.literal,:target>h5:first-of-type code.literal,:target>h6:first-of-type code.literal,span:target~h1:first-of-type code.literal,span:target~h2:first-of-type code.literal,span:target~h3:first-of-type code.literal,span:target~h4:first-of-type code.literal,span:target~h5:first-of-type code.literal,span:target~h6:first-of-type code.literal{background-color:transparent}.literal-block-wrapper:target .code-block-caption,.this-will-duplicate-information-and-it-is-still-useful-here li :target,figure:target,table:target>caption{background-color:var(--color-highlight-on-target)}dt:target{background-color:var(--color-highlight-on-target)!important}.footnote-reference:target,.footnote>dt:target+dd{background-color:var(--color-highlight-on-target)}.guilabel{background-color:var(--color-guilabel-background);border:1px solid var(--color-guilabel-border);border-radius:.5em;color:var(--color-guilabel-text);font-size:.9em;padding:0 .3em}footer{display:flex;flex-direction:column;font-size:var(--font-size--small);margin-top:2rem}.bottom-of-page{align-items:center;border-top:1px solid var(--color-background-border);color:var(--color-foreground-secondary);display:flex;justify-content:space-between;line-height:1.5;margin-top:1rem;padding-bottom:1rem;padding-top:1rem}@media(max-width:46em){.bottom-of-page{flex-direction:column-reverse;gap:.25rem;text-align:center}}.bottom-of-page .left-details{font-size:var(--font-size--small)}.bottom-of-page .right-details{display:flex;flex-direction:column;gap:.25rem;text-align:right}.bottom-of-page .icons{display:flex;font-size:1rem;gap:.25rem;justify-content:flex-end}.bottom-of-page .icons a{text-decoration:none}.bottom-of-page .icons img,.bottom-of-page .icons svg{font-size:1.125rem;height:1em;width:1em}.related-pages a{align-items:center;display:flex;text-decoration:none}.related-pages a:hover .page-info .title{color:var(--color-link);text-decoration:underline;text-decoration-color:var(--color-link-underline)}.related-pages a svg.furo-related-icon,.related-pages a svg.furo-related-icon>use{color:var(--color-foreground-border);flex-shrink:0;height:.75rem;margin:0 .5rem;width:.75rem}.related-pages a.next-page{clear:right;float:right;max-width:50%;text-align:right}.related-pages a.prev-page{clear:left;float:left;max-width:50%}.related-pages a.prev-page svg{transform:rotate(180deg)}.page-info{display:flex;flex-direction:column;overflow-wrap:anywhere}.next-page .page-info{align-items:flex-end}.page-info .context{align-items:center;color:var(--color-foreground-muted);display:flex;font-size:var(--font-size--small);padding-bottom:.1rem;text-decoration:none}ul.search{list-style:none;padding-left:0}ul.search li{border-bottom:1px solid var(--color-background-border);padding:1rem 0}[role=main] .highlighted{background-color:var(--color-highlighted-background);color:var(--color-highlighted-text)}.sidebar-brand{display:flex;flex-direction:column;flex-shrink:0;padding:var(--sidebar-item-spacing-vertical) var(--sidebar-item-spacing-horizontal);text-decoration:none}.sidebar-brand-text{color:var(--color-sidebar-brand-text);font-size:1.5rem;overflow-wrap:break-word}.sidebar-brand-text,.sidebar-logo-container{margin:var(--sidebar-item-spacing-vertical) 0}.sidebar-logo{display:block;margin:0 auto;max-width:100%}.sidebar-search-container{align-items:center;background:var(--color-sidebar-search-background);display:flex;margin-top:var(--sidebar-search-space-above);position:relative}.sidebar-search-container:focus-within,.sidebar-search-container:hover{background:var(--color-sidebar-search-background--focus)}.sidebar-search-container:before{background-color:var(--color-sidebar-search-icon);content:"";height:var(--sidebar-search-icon-size);left:var(--sidebar-item-spacing-horizontal);-webkit-mask-image:var(--icon-search);mask-image:var(--icon-search);position:absolute;width:var(--sidebar-search-icon-size)}.sidebar-search{background:transparent;border:none;border-bottom:1px solid var(--color-sidebar-search-border);border-top:1px solid var(--color-sidebar-search-border);box-sizing:border-box;color:var(--color-sidebar-search-foreground);padding:var(--sidebar-search-input-spacing-vertical) var(--sidebar-search-input-spacing-horizontal) var(--sidebar-search-input-spacing-vertical) calc(var(--sidebar-item-spacing-horizontal) + var(--sidebar-search-input-spacing-horizontal) + var(--sidebar-search-icon-size));width:100%;z-index:10}.sidebar-search:focus{outline:none}.sidebar-search::-moz-placeholder{font-size:var(--sidebar-search-input-font-size)}.sidebar-search::placeholder{font-size:var(--sidebar-search-input-font-size)}#searchbox .highlight-link{margin:0;padding:var(--sidebar-item-spacing-vertical) var(--sidebar-item-spacing-horizontal) 0;text-align:center}#searchbox .highlight-link a{color:var(--color-sidebar-search-icon);font-size:var(--font-size--small--2)}.sidebar-tree{font-size:var(--sidebar-item-font-size);margin-bottom:var(--sidebar-item-spacing-vertical);margin-top:var(--sidebar-tree-space-above)}.sidebar-tree ul{display:flex;flex-direction:column;list-style:none;margin-bottom:0;margin-top:0;padding:0}.sidebar-tree li{margin:0;position:relative}.sidebar-tree li>ul{margin-left:var(--sidebar-item-spacing-horizontal)}.sidebar-tree .icon,.sidebar-tree .reference{color:var(--color-sidebar-link-text)}.sidebar-tree .reference{box-sizing:border-box;display:inline-block;height:100%;line-height:var(--sidebar-item-line-height);overflow-wrap:anywhere;padding:var(--sidebar-item-spacing-vertical) var(--sidebar-item-spacing-horizontal);text-decoration:none;width:100%}.sidebar-tree .reference:hover{background:var(--color-sidebar-item-background--hover);color:var(--color-sidebar-link-text)}.sidebar-tree .reference.external:after{color:var(--color-sidebar-link-text);content:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23607D8B' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' viewBox='0 0 24 24'%3E%3Cpath stroke='none' d='M0 0h24v24H0z'/%3E%3Cpath d='M11 7H6a2 2 0 0 0-2 2v9a2 2 0 0 0 2 2h9a2 2 0 0 0 2-2v-5M10 14 20 4M15 4h5v5'/%3E%3C/svg%3E");margin:0 .25rem;vertical-align:middle}.sidebar-tree .current-page>.reference{font-weight:700}.sidebar-tree label{align-items:center;cursor:pointer;display:flex;height:var(--sidebar-item-height);justify-content:center;position:absolute;right:0;top:0;-webkit-user-select:none;-moz-user-select:none;user-select:none;width:var(--sidebar-expander-width)}.sidebar-tree .caption,.sidebar-tree :not(.caption)>.caption-text{color:var(--color-sidebar-caption-text);font-size:var(--sidebar-caption-font-size);font-weight:700;margin:var(--sidebar-caption-space-above) 0 0 0;padding:var(--sidebar-item-spacing-vertical) var(--sidebar-item-spacing-horizontal);text-transform:uppercase}.sidebar-tree li.has-children>.reference{padding-right:var(--sidebar-expander-width)}.sidebar-tree .toctree-l1>.reference,.sidebar-tree .toctree-l1>label .icon{color:var(--color-sidebar-link-text--top-level)}.sidebar-tree label{background:var(--color-sidebar-item-expander-background)}.sidebar-tree label:hover{background:var(--color-sidebar-item-expander-background--hover)}.sidebar-tree .current>.reference{background:var(--color-sidebar-item-background--current)}.sidebar-tree .current>.reference:hover{background:var(--color-sidebar-item-background--hover)}.toctree-checkbox{display:none;position:absolute}.toctree-checkbox~ul{display:none}.toctree-checkbox~label .icon svg{transform:rotate(90deg)}.toctree-checkbox:checked~ul{display:block}.toctree-checkbox:checked~label .icon svg{transform:rotate(-90deg)}.toc-title-container{padding:var(--toc-title-padding);padding-top:var(--toc-spacing-vertical)}.toc-title{color:var(--color-toc-title-text);font-size:var(--toc-title-font-size);padding-left:var(--toc-spacing-horizontal);text-transform:uppercase}.no-toc{display:none}.toc-tree-container{padding-bottom:var(--toc-spacing-vertical)}.toc-tree{border-left:1px solid var(--color-background-border);font-size:var(--toc-font-size);line-height:1.3;padding-left:calc(var(--toc-spacing-horizontal) - var(--toc-item-spacing-horizontal))}.toc-tree>ul>li:first-child{padding-top:0}.toc-tree>ul>li:first-child>ul{padding-left:0}.toc-tree>ul>li:first-child>a{display:none}.toc-tree ul{list-style-type:none;margin-bottom:0;margin-top:0;padding-left:var(--toc-item-spacing-horizontal)}.toc-tree li{padding-top:var(--toc-item-spacing-vertical)}.toc-tree li.scroll-current>.reference{color:var(--color-toc-item-text--active);font-weight:700}.toc-tree a.reference{color:var(--color-toc-item-text);overflow-wrap:anywhere;text-decoration:none}.toc-scroll{max-height:100vh;overflow-y:scroll}.contents:not(.this-will-duplicate-information-and-it-is-still-useful-here){background:rgba(255,0,0,.25);color:var(--color-problematic)}.contents:not(.this-will-duplicate-information-and-it-is-still-useful-here):before{content:"ERROR: Adding a table of contents in Furo-based documentation is unnecessary, and does not work well with existing styling. Add a 'this-will-duplicate-information-and-it-is-still-useful-here' class, if you want an escape hatch."}.text-align\:left>p{text-align:left}.text-align\:center>p{text-align:center}.text-align\:right>p{text-align:right} +/*# sourceMappingURL=furo.css.map*/ \ No newline at end of file diff --git a/_static/styles/furo.css.map b/_static/styles/furo.css.map new file mode 100644 index 0000000..0ee3acb --- /dev/null +++ b/_static/styles/furo.css.map @@ -0,0 +1 @@ +{"version":3,"file":"styles/furo.css","mappings":"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","sources":["webpack:///./node_modules/normalize.css/normalize.css","webpack:///./src/furo/assets/styles/base/_print.sass","webpack:///./src/furo/assets/styles/base/_screen-readers.sass","webpack:///./src/furo/assets/styles/base/_theme.sass","webpack:///./src/furo/assets/styles/variables/_fonts.scss","webpack:///./src/furo/assets/styles/variables/_spacing.scss","webpack:///./src/furo/assets/styles/variables/_icons.scss","webpack:///./src/furo/assets/styles/variables/_admonitions.scss","webpack:///./src/furo/assets/styles/variables/_colors.scss","webpack:///./src/furo/assets/styles/base/_typography.sass","webpack:///./src/furo/assets/styles/_scaffold.sass","webpack:///./src/furo/assets/styles/variables/_layout.scss","webpack:///./src/furo/assets/styles/content/_admonitions.sass","webpack:///./src/furo/assets/styles/content/_api.sass","webpack:///./src/furo/assets/styles/content/_blocks.sass","webpack:///./src/furo/assets/styles/content/_captions.sass","webpack:///./src/furo/assets/styles/content/_code.sass","webpack:///./src/furo/assets/styles/content/_footnotes.sass","webpack:///./src/furo/assets/styles/content/_images.sass","webpack:///./src/furo/assets/styles/content/_indexes.sass","webpack:///./src/furo/assets/styles/content/_lists.sass","webpack:///./src/furo/assets/styles/content/_math.sass","webpack:///./src/furo/assets/styles/content/_misc.sass","webpack:///./src/furo/assets/styles/content/_rubrics.sass","webpack:///./src/furo/assets/styles/content/_sidebar.sass","webpack:///./src/furo/assets/styles/content/_tables.sass","webpack:///./src/furo/assets/styles/content/_target.sass","webpack:///./src/furo/assets/styles/content/_gui-labels.sass","webpack:///./src/furo/assets/styles/components/_footer.sass","webpack:///./src/furo/assets/styles/components/_sidebar.sass","webpack:///./src/furo/assets/styles/components/_table_of_contents.sass","webpack:///./src/furo/assets/styles/_shame.sass"],"sourcesContent":["/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */\n\n/* Document\n ========================================================================== */\n\n/**\n * 1. Correct the line height in all browsers.\n * 2. Prevent adjustments of font size after orientation changes in iOS.\n */\n\nhtml {\n line-height: 1.15; /* 1 */\n -webkit-text-size-adjust: 100%; /* 2 */\n}\n\n/* Sections\n ========================================================================== */\n\n/**\n * Remove the margin in all browsers.\n */\n\nbody {\n margin: 0;\n}\n\n/**\n * Render the `main` element consistently in IE.\n */\n\nmain {\n display: block;\n}\n\n/**\n * Correct the font size and margin on `h1` elements within `section` and\n * `article` contexts in Chrome, Firefox, and Safari.\n */\n\nh1 {\n font-size: 2em;\n margin: 0.67em 0;\n}\n\n/* Grouping content\n ========================================================================== */\n\n/**\n * 1. Add the correct box sizing in Firefox.\n * 2. Show the overflow in Edge and IE.\n */\n\nhr {\n box-sizing: content-box; /* 1 */\n height: 0; /* 1 */\n overflow: visible; /* 2 */\n}\n\n/**\n * 1. Correct the inheritance and scaling of font size in all browsers.\n * 2. Correct the odd `em` font sizing in all browsers.\n */\n\npre {\n font-family: monospace, monospace; /* 1 */\n font-size: 1em; /* 2 */\n}\n\n/* Text-level semantics\n ========================================================================== */\n\n/**\n * Remove the gray background on active links in IE 10.\n */\n\na {\n background-color: transparent;\n}\n\n/**\n * 1. Remove the bottom border in Chrome 57-\n * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.\n */\n\nabbr[title] {\n border-bottom: none; /* 1 */\n text-decoration: underline; /* 2 */\n text-decoration: underline dotted; /* 2 */\n}\n\n/**\n * Add the correct font weight in Chrome, Edge, and Safari.\n */\n\nb,\nstrong {\n font-weight: bolder;\n}\n\n/**\n * 1. Correct the inheritance and scaling of font size in all browsers.\n * 2. Correct the odd `em` font sizing in all browsers.\n */\n\ncode,\nkbd,\nsamp {\n font-family: monospace, monospace; /* 1 */\n font-size: 1em; /* 2 */\n}\n\n/**\n * Add the correct font size in all browsers.\n */\n\nsmall {\n font-size: 80%;\n}\n\n/**\n * Prevent `sub` and `sup` elements from affecting the line height in\n * all browsers.\n */\n\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\n\nsub {\n bottom: -0.25em;\n}\n\nsup {\n top: -0.5em;\n}\n\n/* Embedded content\n ========================================================================== */\n\n/**\n * Remove the border on images inside links in IE 10.\n */\n\nimg {\n border-style: none;\n}\n\n/* Forms\n ========================================================================== */\n\n/**\n * 1. Change the font styles in all browsers.\n * 2. Remove the margin in Firefox and Safari.\n */\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n font-family: inherit; /* 1 */\n font-size: 100%; /* 1 */\n line-height: 1.15; /* 1 */\n margin: 0; /* 2 */\n}\n\n/**\n * Show the overflow in IE.\n * 1. Show the overflow in Edge.\n */\n\nbutton,\ninput { /* 1 */\n overflow: visible;\n}\n\n/**\n * Remove the inheritance of text transform in Edge, Firefox, and IE.\n * 1. Remove the inheritance of text transform in Firefox.\n */\n\nbutton,\nselect { /* 1 */\n text-transform: none;\n}\n\n/**\n * Correct the inability to style clickable types in iOS and Safari.\n */\n\nbutton,\n[type=\"button\"],\n[type=\"reset\"],\n[type=\"submit\"] {\n -webkit-appearance: button;\n}\n\n/**\n * Remove the inner border and padding in Firefox.\n */\n\nbutton::-moz-focus-inner,\n[type=\"button\"]::-moz-focus-inner,\n[type=\"reset\"]::-moz-focus-inner,\n[type=\"submit\"]::-moz-focus-inner {\n border-style: none;\n padding: 0;\n}\n\n/**\n * Restore the focus styles unset by the previous rule.\n */\n\nbutton:-moz-focusring,\n[type=\"button\"]:-moz-focusring,\n[type=\"reset\"]:-moz-focusring,\n[type=\"submit\"]:-moz-focusring {\n outline: 1px dotted ButtonText;\n}\n\n/**\n * Correct the padding in Firefox.\n */\n\nfieldset {\n padding: 0.35em 0.75em 0.625em;\n}\n\n/**\n * 1. Correct the text wrapping in Edge and IE.\n * 2. Correct the color inheritance from `fieldset` elements in IE.\n * 3. Remove the padding so developers are not caught out when they zero out\n * `fieldset` elements in all browsers.\n */\n\nlegend {\n box-sizing: border-box; /* 1 */\n color: inherit; /* 2 */\n display: table; /* 1 */\n max-width: 100%; /* 1 */\n padding: 0; /* 3 */\n white-space: normal; /* 1 */\n}\n\n/**\n * Add the correct vertical alignment in Chrome, Firefox, and Opera.\n */\n\nprogress {\n vertical-align: baseline;\n}\n\n/**\n * Remove the default vertical scrollbar in IE 10+.\n */\n\ntextarea {\n overflow: auto;\n}\n\n/**\n * 1. Add the correct box sizing in IE 10.\n * 2. Remove the padding in IE 10.\n */\n\n[type=\"checkbox\"],\n[type=\"radio\"] {\n box-sizing: border-box; /* 1 */\n padding: 0; /* 2 */\n}\n\n/**\n * Correct the cursor style of increment and decrement buttons in Chrome.\n */\n\n[type=\"number\"]::-webkit-inner-spin-button,\n[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n/**\n * 1. Correct the odd appearance in Chrome and Safari.\n * 2. Correct the outline style in Safari.\n */\n\n[type=\"search\"] {\n -webkit-appearance: textfield; /* 1 */\n outline-offset: -2px; /* 2 */\n}\n\n/**\n * Remove the inner padding in Chrome and Safari on macOS.\n */\n\n[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n/**\n * 1. Correct the inability to style clickable types in iOS and Safari.\n * 2. Change font properties to `inherit` in Safari.\n */\n\n::-webkit-file-upload-button {\n -webkit-appearance: button; /* 1 */\n font: inherit; /* 2 */\n}\n\n/* Interactive\n ========================================================================== */\n\n/*\n * Add the correct display in Edge, IE 10+, and Firefox.\n */\n\ndetails {\n display: block;\n}\n\n/*\n * Add the correct display in all browsers.\n */\n\nsummary {\n display: list-item;\n}\n\n/* Misc\n ========================================================================== */\n\n/**\n * Add the correct display in IE 10+.\n */\n\ntemplate {\n display: none;\n}\n\n/**\n * Add the correct display in IE 10.\n */\n\n[hidden] {\n display: none;\n}\n","// This file contains styles for managing print media.\n\n////////////////////////////////////////////////////////////////////////////////\n// Hide elements not relevant to print media.\n////////////////////////////////////////////////////////////////////////////////\n@media print\n // Hide icon container.\n .content-icon-container\n display: none !important\n\n // Hide showing header links if hovering over when printing.\n .headerlink\n display: none !important\n\n // Hide mobile header.\n .mobile-header\n display: none !important\n\n // Hide navigation links.\n .related-pages\n display: none !important\n\n////////////////////////////////////////////////////////////////////////////////\n// Tweaks related to decolorization.\n////////////////////////////////////////////////////////////////////////////////\n@media print\n // Apply a border around code which no longer have a color background.\n .highlight\n border: 0.1pt solid var(--color-foreground-border)\n\n////////////////////////////////////////////////////////////////////////////////\n// Avoid page break in some relevant cases.\n////////////////////////////////////////////////////////////////////////////////\n@media print\n ul, ol, dl, a, table, pre, blockquote\n page-break-inside: avoid\n\n h1, h2, h3, h4, h5, h6, img, figure, caption\n page-break-inside: avoid\n page-break-after: avoid\n\n ul, ol, dl\n page-break-before: avoid\n",".visually-hidden\n position: absolute !important\n width: 1px !important\n height: 1px !important\n padding: 0 !important\n margin: -1px !important\n overflow: hidden !important\n clip: rect(0,0,0,0) !important\n white-space: nowrap !important\n border: 0 !important\n color: var(--color-foreground-primary)\n background: var(--color-background-primary)\n\n:-moz-focusring\n outline: auto\n","// This file serves as the \"skeleton\" of the theming logic.\n//\n// This contains the bulk of the logic for handling dark mode, color scheme\n// toggling and the handling of color-scheme-specific hiding of elements.\n\nbody\n @include fonts\n @include spacing\n @include icons\n @include admonitions\n @include default-admonition(#651fff, \"abstract\")\n @include default-topic(#14B8A6, \"pencil\")\n\n @include colors\n\n.only-light\n display: block !important\nhtml body .only-dark\n display: none !important\n\n// Ignore dark-mode hints if print media.\n@media not print\n // Enable dark-mode, if requested.\n body[data-theme=\"dark\"]\n @include colors-dark\n\n html & .only-light\n display: none !important\n .only-dark\n display: block !important\n\n // Enable dark mode, unless explicitly told to avoid.\n @media (prefers-color-scheme: dark)\n body:not([data-theme=\"light\"])\n @include colors-dark\n\n html & .only-light\n display: none !important\n .only-dark\n display: block !important\n\n//\n// Theme toggle presentation\n//\nbody[data-theme=\"auto\"]\n .theme-toggle svg.theme-icon-when-auto-light\n display: block\n\n @media (prefers-color-scheme: dark)\n .theme-toggle svg.theme-icon-when-auto-dark\n display: block\n .theme-toggle svg.theme-icon-when-auto-light\n display: none\n\nbody[data-theme=\"dark\"]\n .theme-toggle svg.theme-icon-when-dark\n display: block\n\nbody[data-theme=\"light\"]\n .theme-toggle svg.theme-icon-when-light\n display: block\n","// Fonts used by this theme.\n//\n// There are basically two things here -- using the system font stack and\n// defining sizes for various elements in %ages. We could have also used `em`\n// but %age is easier to reason about for me.\n\n@mixin fonts {\n // These are adapted from https://systemfontstack.com/\n --font-stack: -apple-system, BlinkMacSystemFont, Segoe UI, Helvetica, Arial,\n sans-serif, Apple Color Emoji, Segoe UI Emoji;\n --font-stack--monospace: \"SFMono-Regular\", Menlo, Consolas, Monaco,\n Liberation Mono, Lucida Console, monospace;\n --font-stack--headings: var(--font-stack);\n\n --font-size--normal: 100%;\n --font-size--small: 87.5%;\n --font-size--small--2: 81.25%;\n --font-size--small--3: 75%;\n --font-size--small--4: 62.5%;\n\n // Sidebar\n --sidebar-caption-font-size: var(--font-size--small--2);\n --sidebar-item-font-size: var(--font-size--small);\n --sidebar-search-input-font-size: var(--font-size--small);\n\n // Table of Contents\n --toc-font-size: var(--font-size--small--3);\n --toc-font-size--mobile: var(--font-size--normal);\n --toc-title-font-size: var(--font-size--small--4);\n\n // Admonitions\n //\n // These aren't defined in terms of %ages, since nesting these is permitted.\n --admonition-font-size: 0.8125rem;\n --admonition-title-font-size: 0.8125rem;\n\n // Code\n --code-font-size: var(--font-size--small--2);\n\n // API\n --api-font-size: var(--font-size--small);\n}\n","// Spacing for various elements on the page\n//\n// If the user wants to tweak things in a certain way, they are permitted to.\n// They also have to deal with the consequences though!\n\n@mixin spacing {\n // Header!\n --header-height: calc(\n var(--sidebar-item-line-height) + 4 * #{var(--sidebar-item-spacing-vertical)}\n );\n --header-padding: 0.5rem;\n\n // Sidebar\n --sidebar-tree-space-above: 1.5rem;\n --sidebar-caption-space-above: 1rem;\n\n --sidebar-item-line-height: 1rem;\n --sidebar-item-spacing-vertical: 0.5rem;\n --sidebar-item-spacing-horizontal: 1rem;\n --sidebar-item-height: calc(\n var(--sidebar-item-line-height) + 2 *#{var(--sidebar-item-spacing-vertical)}\n );\n\n --sidebar-expander-width: var(--sidebar-item-height); // be square\n\n --sidebar-search-space-above: 0.5rem;\n --sidebar-search-input-spacing-vertical: 0.5rem;\n --sidebar-search-input-spacing-horizontal: 0.5rem;\n --sidebar-search-input-height: 1rem;\n --sidebar-search-icon-size: var(--sidebar-search-input-height);\n\n // Table of Contents\n --toc-title-padding: 0.25rem 0;\n --toc-spacing-vertical: 1.5rem;\n --toc-spacing-horizontal: 1.5rem;\n --toc-item-spacing-vertical: 0.4rem;\n --toc-item-spacing-horizontal: 1rem;\n}\n","// Expose theme icons as CSS variables.\n\n$icons: (\n // Adapted from tabler-icons\n // url: https://tablericons.com/\n \"search\":\n url('data:image/svg+xml;charset=utf-8,'),\n // Factored out from mkdocs-material on 24-Aug-2020.\n // url: https://squidfunk.github.io/mkdocs-material/reference/admonitions/\n \"pencil\":\n url('data:image/svg+xml;charset=utf-8,'),\n \"abstract\":\n url('data:image/svg+xml;charset=utf-8,'),\n \"info\":\n url('data:image/svg+xml;charset=utf-8,'),\n \"flame\":\n url('data:image/svg+xml;charset=utf-8,'),\n \"question\":\n url('data:image/svg+xml;charset=utf-8,'),\n \"warning\":\n url('data:image/svg+xml;charset=utf-8,'),\n \"failure\":\n url('data:image/svg+xml;charset=utf-8,'),\n \"spark\":\n url('data:image/svg+xml;charset=utf-8,')\n);\n\n@mixin icons {\n @each $name, $glyph in $icons {\n --icon-#{$name}: #{$glyph};\n }\n}\n","// Admonitions\n\n// Structure of these is:\n// admonition-class: color \"icon-name\";\n//\n// The colors are translated into CSS variables below. The icons are\n// used directly in the main declarations to set the `mask-image` in\n// the title.\n\n// prettier-ignore\n$admonitions: (\n // Each of these has an reST directives for it.\n \"caution\": #ff9100 \"spark\",\n \"warning\": #ff9100 \"warning\",\n \"danger\": #ff5252 \"spark\",\n \"attention\": #ff5252 \"warning\",\n \"error\": #ff5252 \"failure\",\n \"hint\": #00c852 \"question\",\n \"tip\": #00c852 \"info\",\n \"important\": #00bfa5 \"flame\",\n \"note\": #00b0ff \"pencil\",\n \"seealso\": #448aff \"info\",\n \"admonition-todo\": #808080 \"pencil\"\n);\n\n@mixin default-admonition($color, $icon-name) {\n --color-admonition-title: #{$color};\n --color-admonition-title-background: #{rgba($color, 0.2)};\n\n --icon-admonition-default: var(--icon-#{$icon-name});\n}\n\n@mixin default-topic($color, $icon-name) {\n --color-topic-title: #{$color};\n --color-topic-title-background: #{rgba($color, 0.2)};\n\n --icon-topic-default: var(--icon-#{$icon-name});\n}\n\n@mixin admonitions {\n @each $name, $values in $admonitions {\n --color-admonition-title--#{$name}: #{nth($values, 1)};\n --color-admonition-title-background--#{$name}: #{rgba(\n nth($values, 1),\n 0.2\n )};\n }\n}\n","// Colors used throughout this theme.\n//\n// The aim is to give the user more control. Thus, instead of hard-coding colors\n// in various parts of the stylesheet, the approach taken is to define all\n// colors as CSS variables and reusing them in all the places.\n//\n// `colors-dark` depends on `colors` being included at a lower specificity.\n\n@mixin colors {\n --color-problematic: #b30000;\n\n // Base Colors\n --color-foreground-primary: black; // for main text and headings\n --color-foreground-secondary: #5a5c63; // for secondary text\n --color-foreground-muted: #6b6f76; // for muted text\n --color-foreground-border: #878787; // for content borders\n\n --color-background-primary: white; // for content\n --color-background-secondary: #f8f9fb; // for navigation + ToC\n --color-background-hover: #efeff4ff; // for navigation-item hover\n --color-background-hover--transparent: #efeff400;\n --color-background-border: #eeebee; // for UI borders\n --color-background-item: #ccc; // for \"background\" items (eg: copybutton)\n\n // Announcements\n --color-announcement-background: #000000dd;\n --color-announcement-text: #eeebee;\n\n // Brand colors\n --color-brand-primary: #0a4bff;\n --color-brand-content: #2757dd;\n --color-brand-visited: #872ee0;\n\n // API documentation\n --color-api-background: var(--color-background-hover--transparent);\n --color-api-background-hover: var(--color-background-hover);\n --color-api-overall: var(--color-foreground-secondary);\n --color-api-name: var(--color-problematic);\n --color-api-pre-name: var(--color-problematic);\n --color-api-paren: var(--color-foreground-secondary);\n --color-api-keyword: var(--color-foreground-primary);\n\n --color-api-added: #21632c;\n --color-api-added-border: #38a84d;\n --color-api-changed: #046172;\n --color-api-changed-border: #06a1bc;\n --color-api-deprecated: #605706;\n --color-api-deprecated-border: #f0d90f;\n --color-api-removed: #b30000;\n --color-api-removed-border: #ff5c5c;\n\n --color-highlight-on-target: #ffffcc;\n\n // Inline code background\n --color-inline-code-background: var(--color-background-secondary);\n\n // Highlighted text (search)\n --color-highlighted-background: #ddeeff;\n --color-highlighted-text: var(--color-foreground-primary);\n\n // GUI Labels\n --color-guilabel-background: #ddeeff80;\n --color-guilabel-border: #bedaf580;\n --color-guilabel-text: var(--color-foreground-primary);\n\n // Admonitions!\n --color-admonition-background: transparent;\n\n //////////////////////////////////////////////////////////////////////////////\n // Everything below this should be one of:\n // - var(...)\n // - *-gradient(...)\n // - special literal values (eg: transparent, none)\n //////////////////////////////////////////////////////////////////////////////\n\n // Tables\n --color-table-header-background: var(--color-background-secondary);\n --color-table-border: var(--color-background-border);\n\n // Cards\n --color-card-border: var(--color-background-secondary);\n --color-card-background: transparent;\n --color-card-marginals-background: var(--color-background-secondary);\n\n // Header\n --color-header-background: var(--color-background-primary);\n --color-header-border: var(--color-background-border);\n --color-header-text: var(--color-foreground-primary);\n\n // Sidebar (left)\n --color-sidebar-background: var(--color-background-secondary);\n --color-sidebar-background-border: var(--color-background-border);\n\n --color-sidebar-brand-text: var(--color-foreground-primary);\n --color-sidebar-caption-text: var(--color-foreground-muted);\n --color-sidebar-link-text: var(--color-foreground-secondary);\n --color-sidebar-link-text--top-level: var(--color-brand-primary);\n\n --color-sidebar-item-background: var(--color-sidebar-background);\n --color-sidebar-item-background--current: var(\n --color-sidebar-item-background\n );\n --color-sidebar-item-background--hover: linear-gradient(\n 90deg,\n var(--color-background-hover--transparent) 0%,\n var(--color-background-hover) var(--sidebar-item-spacing-horizontal),\n var(--color-background-hover) 100%\n );\n\n --color-sidebar-item-expander-background: transparent;\n --color-sidebar-item-expander-background--hover: var(\n --color-background-hover\n );\n\n --color-sidebar-search-text: var(--color-foreground-primary);\n --color-sidebar-search-background: var(--color-background-secondary);\n --color-sidebar-search-background--focus: var(--color-background-primary);\n --color-sidebar-search-border: var(--color-background-border);\n --color-sidebar-search-icon: var(--color-foreground-muted);\n\n // Table of Contents (right)\n --color-toc-background: var(--color-background-primary);\n --color-toc-title-text: var(--color-foreground-muted);\n --color-toc-item-text: var(--color-foreground-secondary);\n --color-toc-item-text--hover: var(--color-foreground-primary);\n --color-toc-item-text--active: var(--color-brand-primary);\n\n // Actual page contents\n --color-content-foreground: var(--color-foreground-primary);\n --color-content-background: transparent;\n\n // Links\n --color-link: var(--color-brand-content);\n --color-link-underline: var(--color-background-border);\n --color-link--hover: var(--color-brand-content);\n --color-link-underline--hover: var(--color-foreground-border);\n\n --color-link--visited: var(--color-brand-visited);\n --color-link-underline--visited: var(--color-background-border);\n --color-link--visited--hover: var(--color-brand-visited);\n --color-link-underline--visited--hover: var(--color-foreground-border);\n}\n\n@mixin colors-dark {\n --color-problematic: #ee5151;\n\n // Base Colors\n --color-foreground-primary: #cfd0d0; // for main text and headings\n --color-foreground-secondary: #9ca0a5; // for secondary text\n --color-foreground-muted: #81868d; // for muted text\n --color-foreground-border: #666666; // for content borders\n\n --color-background-primary: #131416; // for content\n --color-background-secondary: #1a1c1e; // for navigation + ToC\n --color-background-hover: #1e2124ff; // for navigation-item hover\n --color-background-hover--transparent: #1e212400;\n --color-background-border: #303335; // for UI borders\n --color-background-item: #444; // for \"background\" items (eg: copybutton)\n\n // Announcements\n --color-announcement-background: #000000dd;\n --color-announcement-text: #eeebee;\n\n // Brand colors\n --color-brand-primary: #3d94ff;\n --color-brand-content: #5ca5ff;\n --color-brand-visited: #b27aeb;\n\n // Highlighted text (search)\n --color-highlighted-background: #083563;\n\n // GUI Labels\n --color-guilabel-background: #08356380;\n --color-guilabel-border: #13395f80;\n\n // API documentation\n --color-api-keyword: var(--color-foreground-secondary);\n --color-highlight-on-target: #333300;\n\n --color-api-added: #3db854;\n --color-api-added-border: #267334;\n --color-api-changed: #09b0ce;\n --color-api-changed-border: #056d80;\n --color-api-deprecated: #b1a10b;\n --color-api-deprecated-border: #6e6407;\n --color-api-removed: #ff7575;\n --color-api-removed-border: #b03b3b;\n\n // Admonitions\n --color-admonition-background: #18181a;\n\n // Cards\n --color-card-border: var(--color-background-secondary);\n --color-card-background: #18181a;\n --color-card-marginals-background: var(--color-background-hover);\n}\n","// This file contains the styling for making the content throughout the page,\n// including fonts, paragraphs, headings and spacing among these elements.\n\nbody\n font-family: var(--font-stack)\npre,\ncode,\nkbd,\nsamp\n font-family: var(--font-stack--monospace)\n\n// Make fonts look slightly nicer.\nbody\n -webkit-font-smoothing: antialiased\n -moz-osx-font-smoothing: grayscale\n\n// Line height from Bootstrap 4.1\narticle\n line-height: 1.5\n\n//\n// Headings\n//\nh1,\nh2,\nh3,\nh4,\nh5,\nh6\n line-height: 1.25\n font-family: var(--font-stack--headings)\n font-weight: bold\n\n border-radius: 0.5rem\n margin-top: 0.5rem\n margin-bottom: 0.5rem\n margin-left: -0.5rem\n margin-right: -0.5rem\n padding-left: 0.5rem\n padding-right: 0.5rem\n\n + p\n margin-top: 0\n\nh1\n font-size: 2.5em\n margin-top: 1.75rem\n margin-bottom: 1rem\nh2\n font-size: 2em\n margin-top: 1.75rem\nh3\n font-size: 1.5em\nh4\n font-size: 1.25em\nh5\n font-size: 1.125em\nh6\n font-size: 1em\n\nsmall\n opacity: 75%\n font-size: 80%\n\n// Paragraph\np\n margin-top: 0.5rem\n margin-bottom: 0.75rem\n\n// Horizontal rules\nhr.docutils\n height: 1px\n padding: 0\n margin: 2rem 0\n background-color: var(--color-background-border)\n border: 0\n\n.centered\n text-align: center\n\n// Links\na\n text-decoration: underline\n\n color: var(--color-link)\n text-decoration-color: var(--color-link-underline)\n\n &:visited\n color: var(--color-link--visited)\n text-decoration-color: var(--color-link-underline--visited)\n &:hover\n color: var(--color-link--visited--hover)\n text-decoration-color: var(--color-link-underline--visited--hover)\n\n &:hover\n color: var(--color-link--hover)\n text-decoration-color: var(--color-link-underline--hover)\n &.muted-link\n color: inherit\n &:hover\n color: var(--color-link--hover)\n text-decoration-color: var(--color-link-underline--hover)\n &:visited\n color: var(--color-link--visited--hover)\n text-decoration-color: var(--color-link-underline--visited--hover)\n","// This file contains the styles for the overall layouting of the documentation\n// skeleton, including the responsive changes as well as sidebar toggles.\n//\n// This is implemented as a mobile-last design, which isn't ideal, but it is\n// reasonably good-enough and I got pretty tired by the time I'd finished this\n// to move the rules around to fix this. Shouldn't take more than 3-4 hours,\n// if you know what you're doing tho.\n\n// HACK: Not all browsers account for the scrollbar width in media queries.\n// This results in horizontal scrollbars in the breakpoint where we go\n// from displaying everything to hiding the ToC. We accomodate for this by\n// adding a bit of padding to the TOC drawer, disabling the horizontal\n// scrollbar and allowing the scrollbars to cover the padding.\n// https://www.456bereastreet.com/archive/201301/media_query_width_and_vertical_scrollbars/\n\n// HACK: Always having the scrollbar visible, prevents certain browsers from\n// causing the content to stutter horizontally between taller-than-viewport and\n// not-taller-than-viewport pages.\n\nhtml\n overflow-x: hidden\n overflow-y: scroll\n scroll-behavior: smooth\n\n.sidebar-scroll, .toc-scroll, article[role=main] *\n // Override Firefox scrollbar style\n scrollbar-width: thin\n scrollbar-color: var(--color-foreground-border) transparent\n\n // Override Chrome scrollbar styles\n &::-webkit-scrollbar\n width: 0.25rem\n height: 0.25rem\n &::-webkit-scrollbar-thumb\n background-color: var(--color-foreground-border)\n border-radius: 0.125rem\n\n//\n// Overalls\n//\nhtml,\nbody\n height: 100%\n color: var(--color-foreground-primary)\n background: var(--color-background-primary)\n\n.skip-to-content\n position: fixed\n padding: 1rem\n border-radius: 1rem\n left: 0.25rem\n top: 0.25rem\n z-index: 40\n background: var(--color-background-primary)\n color: var(--color-foreground-primary)\n\n transform: translateY(-200%)\n transition: transform 300ms ease-in-out\n\n &:focus-within\n transform: translateY(0%)\n\narticle\n color: var(--color-content-foreground)\n background: var(--color-content-background)\n overflow-wrap: break-word\n\n.page\n display: flex\n // fill the viewport for pages with little content.\n min-height: 100%\n\n.mobile-header\n width: 100%\n height: var(--header-height)\n background-color: var(--color-header-background)\n color: var(--color-header-text)\n border-bottom: 1px solid var(--color-header-border)\n\n // Looks like sub-script/super-script have this, and we need this to\n // be \"on top\" of those.\n z-index: 10\n\n // We don't show the header on large screens.\n display: none\n\n // Add shadow when scrolled\n &.scrolled\n border-bottom: none\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\n .header-center\n a\n color: var(--color-header-text)\n text-decoration: none\n\n.main\n display: flex\n flex: 1\n\n// Sidebar (left) also covers the entire left portion of screen.\n.sidebar-drawer\n box-sizing: border-box\n\n border-right: 1px solid var(--color-sidebar-background-border)\n background: var(--color-sidebar-background)\n\n display: flex\n justify-content: flex-end\n // These next two lines took me two days to figure out.\n width: calc((100% - #{$full-width}) / 2 + #{$sidebar-width})\n min-width: $sidebar-width\n\n// Scroll-along sidebars\n.sidebar-container,\n.toc-drawer\n box-sizing: border-box\n width: $sidebar-width\n\n.toc-drawer\n background: var(--color-toc-background)\n // See HACK described on top of this document\n padding-right: 1rem\n\n.sidebar-sticky,\n.toc-sticky\n position: sticky\n top: 0\n height: min(100%, 100vh)\n height: 100vh\n\n display: flex\n flex-direction: column\n\n.sidebar-scroll,\n.toc-scroll\n flex-grow: 1\n flex-shrink: 1\n\n overflow: auto\n scroll-behavior: smooth\n\n// Central items.\n.content\n padding: 0 $content-padding\n width: $content-width\n\n display: flex\n flex-direction: column\n justify-content: space-between\n\n.icon\n display: inline-block\n height: 1rem\n width: 1rem\n svg\n width: 100%\n height: 100%\n\n//\n// Accommodate announcement banner\n//\n.announcement\n background-color: var(--color-announcement-background)\n color: var(--color-announcement-text)\n\n height: var(--header-height)\n display: flex\n align-items: center\n overflow-x: auto\n & + .page\n min-height: calc(100% - var(--header-height))\n\n.announcement-content\n box-sizing: border-box\n padding: 0.5rem\n min-width: 100%\n white-space: nowrap\n text-align: center\n\n a\n color: var(--color-announcement-text)\n text-decoration-color: var(--color-announcement-text)\n\n &:hover\n color: var(--color-announcement-text)\n text-decoration-color: var(--color-link--hover)\n\n////////////////////////////////////////////////////////////////////////////////\n// Toggles for theme\n////////////////////////////////////////////////////////////////////////////////\n.no-js .theme-toggle-container // don't show theme toggle if there's no JS\n display: none\n\n.theme-toggle-container\n display: flex\n\n.theme-toggle\n display: flex\n cursor: pointer\n border: none\n padding: 0\n background: transparent\n\n.theme-toggle svg\n height: 1.25rem\n width: 1.25rem\n color: var(--color-foreground-primary)\n display: none\n\n.theme-toggle-header\n display: flex\n align-items: center\n justify-content: center\n\n////////////////////////////////////////////////////////////////////////////////\n// Toggles for elements\n////////////////////////////////////////////////////////////////////////////////\n.toc-overlay-icon, .nav-overlay-icon\n display: none\n cursor: pointer\n\n .icon\n color: var(--color-foreground-secondary)\n height: 1.5rem\n width: 1.5rem\n\n.toc-header-icon, .nav-overlay-icon\n // for when we set display: flex\n justify-content: center\n align-items: center\n\n.toc-content-icon\n height: 1.5rem\n width: 1.5rem\n\n.content-icon-container\n float: right\n display: flex\n margin-top: 1.5rem\n margin-left: 1rem\n margin-bottom: 1rem\n gap: 0.5rem\n\n .edit-this-page, .view-this-page\n svg\n color: inherit\n height: 1.25rem\n width: 1.25rem\n\n.sidebar-toggle\n position: absolute\n display: none\n// \n.sidebar-toggle[name=\"__toc\"]\n left: 20px\n.sidebar-toggle:checked\n left: 40px\n// \n\n.overlay\n position: fixed\n top: 0\n width: 0\n height: 0\n\n transition: width 0ms, height 0ms, opacity 250ms ease-out\n\n opacity: 0\n background-color: rgba(0, 0, 0, 0.54)\n.sidebar-overlay\n z-index: 20\n.toc-overlay\n z-index: 40\n\n// Keep things on top and smooth.\n.sidebar-drawer\n z-index: 30\n transition: left 250ms ease-in-out\n.toc-drawer\n z-index: 50\n transition: right 250ms ease-in-out\n\n// Show the Sidebar\n#__navigation:checked\n & ~ .sidebar-overlay\n width: 100%\n height: 100%\n opacity: 1\n & ~ .page\n .sidebar-drawer\n top: 0\n left: 0\n // Show the toc sidebar\n#__toc:checked\n & ~ .toc-overlay\n width: 100%\n height: 100%\n opacity: 1\n & ~ .page\n .toc-drawer\n top: 0\n right: 0\n\n////////////////////////////////////////////////////////////////////////////////\n// Back to top\n////////////////////////////////////////////////////////////////////////////////\n.back-to-top\n text-decoration: none\n\n display: none\n position: fixed\n left: 0\n top: 1rem\n padding: 0.5rem\n padding-right: 0.75rem\n border-radius: 1rem\n font-size: 0.8125rem\n\n background: var(--color-background-primary)\n box-shadow: 0 0.2rem 0.5rem rgba(0, 0, 0, 0.05), #6b728080 0px 0px 1px 0px\n\n z-index: 10\n\n margin-left: 50%\n transform: translateX(-50%)\n svg\n height: 1rem\n width: 1rem\n fill: currentColor\n display: inline-block\n\n span\n margin-left: 0.25rem\n\n .show-back-to-top &\n display: flex\n align-items: center\n\n////////////////////////////////////////////////////////////////////////////////\n// Responsive layouting\n////////////////////////////////////////////////////////////////////////////////\n// Make things a bit bigger on bigger screens.\n@media (min-width: $full-width + $sidebar-width)\n html\n font-size: 110%\n\n@media (max-width: $full-width)\n // Collapse \"toc\" into the icon.\n .toc-content-icon\n display: flex\n .toc-drawer\n position: fixed\n height: 100vh\n top: 0\n right: -$sidebar-width\n border-left: 1px solid var(--color-background-muted)\n .toc-tree\n border-left: none\n font-size: var(--toc-font-size--mobile)\n\n // Accomodate for a changed content width.\n .sidebar-drawer\n width: calc((100% - #{$full-width - $sidebar-width}) / 2 + #{$sidebar-width})\n\n@media (max-width: $full-width - $sidebar-width)\n // Collapse \"navigation\".\n .nav-overlay-icon\n display: flex\n .sidebar-drawer\n position: fixed\n height: 100vh\n width: $sidebar-width\n\n top: 0\n left: -$sidebar-width\n\n // Swap which icon is visible.\n .toc-header-icon, .theme-toggle-header\n display: flex\n .toc-content-icon, .theme-toggle-content\n display: none\n\n // Show the header.\n .mobile-header\n position: sticky\n top: 0\n display: flex\n justify-content: space-between\n align-items: center\n\n .header-left,\n .header-right\n display: flex\n height: var(--header-height)\n padding: 0 var(--header-padding)\n label\n height: 100%\n width: 100%\n user-select: none\n\n .nav-overlay-icon .icon,\n .theme-toggle svg\n height: 1.5rem\n width: 1.5rem\n\n // Add a scroll margin for the content\n :target\n scroll-margin-top: calc(var(--header-height) + 2.5rem)\n\n // Show back-to-top below the header\n .back-to-top\n top: calc(var(--header-height) + 0.5rem)\n\n // Center the page, and accommodate for the header.\n .page\n flex-direction: column\n justify-content: center\n .content\n margin-left: auto\n margin-right: auto\n\n@media (max-width: $content-width + 2* $content-padding)\n // Content should respect window limits.\n .content\n width: 100%\n overflow-x: auto\n\n@media (max-width: $content-width)\n .content\n padding: 0 $content-padding--small\n // Don't float sidebars to the right.\n article aside.sidebar\n float: none\n width: 100%\n margin: 1rem 0\n","// Overall Layout Variables\n//\n// Because CSS variables can't be used in media queries. The fact that this\n// makes the layout non-user-configurable is a good thing.\n$content-padding: 3em;\n$content-padding--small: 1em;\n$content-width: 46em;\n$sidebar-width: 15em;\n$full-width: $content-width + 2 * ($content-padding + $sidebar-width);\n","//\n// The design here is strongly inspired by mkdocs-material.\n.admonition, .topic\n margin: 1rem auto\n padding: 0 0.5rem 0.5rem 0.5rem\n\n background: var(--color-admonition-background)\n\n border-radius: 0.2rem\n box-shadow: 0 0.2rem 0.5rem rgba(0, 0, 0, 0.05), 0 0 0.0625rem rgba(0, 0, 0, 0.1)\n\n font-size: var(--admonition-font-size)\n\n overflow: hidden\n page-break-inside: avoid\n\n // First element should have no margin, since the title has it.\n > :nth-child(2)\n margin-top: 0\n\n // Last item should have no margin, since we'll control that w/ padding\n > :last-child\n margin-bottom: 0\n\n.admonition p.admonition-title,\np.topic-title\n position: relative\n margin: 0 -0.5rem 0.5rem\n padding-left: 2rem\n padding-right: .5rem\n padding-top: .4rem\n padding-bottom: .4rem\n\n font-weight: 500\n font-size: var(--admonition-title-font-size)\n line-height: 1.3\n\n // Our fancy icon\n &::before\n content: \"\"\n position: absolute\n left: 0.5rem\n width: 1rem\n height: 1rem\n\n// Default styles\np.admonition-title\n background-color: var(--color-admonition-title-background)\n &::before\n background-color: var(--color-admonition-title)\n mask-image: var(--icon-admonition-default)\n mask-repeat: no-repeat\n\np.topic-title\n background-color: var(--color-topic-title-background)\n &::before\n background-color: var(--color-topic-title)\n mask-image: var(--icon-topic-default)\n mask-repeat: no-repeat\n\n//\n// Variants\n//\n.admonition\n border-left: 0.2rem solid var(--color-admonition-title)\n\n @each $type, $value in $admonitions\n &.#{$type}\n border-left-color: var(--color-admonition-title--#{$type})\n > .admonition-title\n background-color: var(--color-admonition-title-background--#{$type})\n &::before\n background-color: var(--color-admonition-title--#{$type})\n mask-image: var(--icon-#{nth($value, 2)})\n\n.admonition-todo > .admonition-title\n text-transform: uppercase\n","// This file stylizes the API documentation (stuff generated by autodoc). It's\n// deeply nested due to how autodoc structures the HTML without enough classes\n// to select the relevant items.\n\n// API docs!\ndl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)\n // Tweak the spacing of all the things!\n dd\n margin-left: 2rem\n > :first-child\n margin-top: 0.125rem\n > :last-child\n margin-bottom: 0.75rem\n\n // This is used for the arguments\n .field-list\n margin-bottom: 0.75rem\n\n // \"Headings\" (like \"Parameters\" and \"Return\")\n > dt\n text-transform: uppercase\n font-size: var(--font-size--small)\n\n dd:empty\n margin-bottom: 0.5rem\n dd > ul\n margin-left: -1.2rem\n > li\n > p:nth-child(2)\n margin-top: 0\n // When the last-empty-paragraph follows a paragraph, it doesn't need\n // to augument the existing spacing.\n > p + p:last-child:empty\n margin-top: 0\n margin-bottom: 0\n\n // Colorize the elements\n > dt\n color: var(--color-api-overall)\n\n.sig:not(.sig-inline)\n font-weight: bold\n\n font-size: var(--api-font-size)\n font-family: var(--font-stack--monospace)\n\n margin-left: -0.25rem\n margin-right: -0.25rem\n padding-top: 0.25rem\n padding-bottom: 0.25rem\n padding-right: 0.5rem\n\n // These are intentionally em, to properly match the font size.\n padding-left: 3em\n text-indent: -2.5em\n\n border-radius: 0.25rem\n\n background: var(--color-api-background)\n transition: background 100ms ease-out\n\n &:hover\n background: var(--color-api-background-hover)\n\n // adjust the size of the [source] link on the right.\n a.reference\n .viewcode-link\n font-weight: normal\n width: 4.25rem\n\nem.property\n font-style: normal\n &:first-child\n color: var(--color-api-keyword)\n.sig-name\n color: var(--color-api-name)\n.sig-prename\n font-weight: normal\n color: var(--color-api-pre-name)\n.sig-paren\n color: var(--color-api-paren)\n.sig-param\n font-style: normal\n\ndiv.versionadded,\ndiv.versionchanged,\ndiv.deprecated,\ndiv.versionremoved\n border-left: 0.1875rem solid\n border-radius: 0.125rem\n\n padding-left: 0.75rem\n\n p\n margin-top: 0.125rem\n margin-bottom: 0.125rem\n\ndiv.versionadded\n border-color: var(--color-api-added-border)\n .versionmodified\n color: var(--color-api-added)\n\ndiv.versionchanged\n border-color: var(--color-api-changed-border)\n .versionmodified\n color: var(--color-api-changed)\n\ndiv.deprecated\n border-color: var(--color-api-deprecated-border)\n .versionmodified\n color: var(--color-api-deprecated)\n\ndiv.versionremoved\n border-color: var(--color-api-removed-border)\n .versionmodified\n color: var(--color-api-removed)\n\n// Align the [docs] and [source] to the right.\n.viewcode-link, .viewcode-back\n float: right\n text-align: right\n",".line-block\n margin-top: 0.5rem\n margin-bottom: 0.75rem\n .line-block\n margin-top: 0rem\n margin-bottom: 0rem\n padding-left: 1rem\n","// Captions\narticle p.caption,\ntable > caption,\n.code-block-caption\n font-size: var(--font-size--small)\n text-align: center\n\n// Caption above a TOCTree\n.toctree-wrapper.compound\n .caption, :not(.caption) > .caption-text\n font-size: var(--font-size--small)\n text-transform: uppercase\n\n text-align: initial\n margin-bottom: 0\n\n > ul\n margin-top: 0\n margin-bottom: 0\n","// Inline code\ncode.literal, .sig-inline\n background: var(--color-inline-code-background)\n border-radius: 0.2em\n // Make the font smaller, and use padding to recover.\n font-size: var(--font-size--small--2)\n padding: 0.1em 0.2em\n\n pre.literal-block &\n font-size: inherit\n padding: 0\n\n p &\n border: 1px solid var(--color-background-border)\n\n.sig-inline\n font-family: var(--font-stack--monospace)\n\n// Code and Literal Blocks\n$code-spacing-vertical: 0.625rem\n$code-spacing-horizontal: 0.875rem\n\n// Wraps every literal block + line numbers.\ndiv[class*=\" highlight-\"],\ndiv[class^=\"highlight-\"]\n margin: 1em 0\n display: flex\n\n .table-wrapper\n margin: 0\n padding: 0\n\npre\n margin: 0\n padding: 0\n overflow: auto\n\n // Needed to have more specificity than pygments' \"pre\" selector. :(\n article[role=\"main\"] .highlight &\n line-height: 1.5\n\n &.literal-block,\n .highlight &\n font-size: var(--code-font-size)\n padding: $code-spacing-vertical $code-spacing-horizontal\n\n // Make it look like all the other blocks.\n &.literal-block\n margin-top: 1rem\n margin-bottom: 1rem\n\n border-radius: 0.2rem\n background-color: var(--color-code-background)\n color: var(--color-code-foreground)\n\n// All code is always contained in this.\n.highlight\n width: 100%\n border-radius: 0.2rem\n\n // Make line numbers and prompts un-selectable.\n .gp, span.linenos\n user-select: none\n pointer-events: none\n\n // Expand the line-highlighting.\n .hll\n display: block\n margin-left: -$code-spacing-horizontal\n margin-right: -$code-spacing-horizontal\n padding-left: $code-spacing-horizontal\n padding-right: $code-spacing-horizontal\n\n/* Make code block captions be nicely integrated */\n.code-block-caption\n display: flex\n padding: $code-spacing-vertical $code-spacing-horizontal\n\n border-radius: 0.25rem\n border-bottom-left-radius: 0\n border-bottom-right-radius: 0\n font-weight: 300\n border-bottom: 1px solid\n\n background-color: var(--color-code-background)\n color: var(--color-code-foreground)\n border-color: var(--color-background-border)\n\n + div[class]\n margin-top: 0\n pre\n border-top-left-radius: 0\n border-top-right-radius: 0\n\n// When `html_codeblock_linenos_style` is table.\n.highlighttable\n width: 100%\n display: block\n tbody\n display: block\n\n tr\n display: flex\n\n // Line numbers\n td.linenos\n background-color: var(--color-code-background)\n color: var(--color-code-foreground)\n padding: $code-spacing-vertical $code-spacing-horizontal\n padding-right: 0\n border-top-left-radius: 0.2rem\n border-bottom-left-radius: 0.2rem\n\n .linenodiv\n padding-right: $code-spacing-horizontal\n font-size: var(--code-font-size)\n box-shadow: -0.0625rem 0 var(--color-foreground-border) inset\n\n // Actual code\n td.code\n padding: 0\n display: block\n flex: 1\n overflow: hidden\n\n .highlight\n border-top-left-radius: 0\n border-bottom-left-radius: 0\n\n// When `html_codeblock_linenos_style` is inline.\n.highlight\n span.linenos\n display: inline-block\n padding-left: 0\n padding-right: $code-spacing-horizontal\n margin-right: $code-spacing-horizontal\n box-shadow: -0.0625rem 0 var(--color-foreground-border) inset\n","// Inline Footnote Reference\n.footnote-reference\n font-size: var(--font-size--small--4)\n vertical-align: super\n\n// Definition list, listing the content of each note.\n// docutils <= 0.17\ndl.footnote.brackets\n font-size: var(--font-size--small)\n color: var(--color-foreground-secondary)\n\n display: grid\n grid-template-columns: max-content auto\n dt\n margin: 0\n > .fn-backref\n margin-left: 0.25rem\n\n &:after\n content: \":\"\n\n .brackets\n &:before\n content: \"[\"\n &:after\n content: \"]\"\n\n dd\n margin: 0\n padding: 0 1rem\n\n// docutils >= 0.18\naside.footnote\n font-size: var(--font-size--small)\n color: var(--color-foreground-secondary)\n\naside.footnote > span,\ndiv.citation > span\n float: left\n font-weight: 500\n padding-right: 0.25rem\n\naside.footnote > *:not(span),\ndiv.citation > p\n margin-left: 2rem\n","//\n// Figures\n//\nimg\n box-sizing: border-box\n max-width: 100%\n height: auto\n\narticle\n figure, .figure\n border-radius: 0.2rem\n\n margin: 0\n :last-child\n margin-bottom: 0\n\n .align-left\n float: left\n clear: left\n margin: 0 1rem 1rem\n\n .align-right\n float: right\n clear: right\n margin: 0 1rem 1rem\n\n .align-default,\n .align-center\n display: block\n text-align: center\n margin-left: auto\n margin-right: auto\n\n // WELL, table needs to be stylised like a table.\n table.align-default\n display: table\n text-align: initial\n",".genindex-jumpbox, .domainindex-jumpbox\n border-top: 1px solid var(--color-background-border)\n border-bottom: 1px solid var(--color-background-border)\n padding: 0.25rem\n\n.genindex-section, .domainindex-section\n h2\n margin-top: 0.75rem\n margin-bottom: 0.5rem\n ul\n margin-top: 0\n margin-bottom: 0\n","ul,\nol\n padding-left: 1.2rem\n\n // Space lists out like paragraphs\n margin-top: 1rem\n margin-bottom: 1rem\n // reduce margins within li.\n li\n > p:first-child\n margin-top: 0.25rem\n margin-bottom: 0.25rem\n\n > p:last-child\n margin-top: 0.25rem\n\n > ul,\n > ol\n margin-top: 0.5rem\n margin-bottom: 0.5rem\n\nol\n &.arabic\n list-style: decimal\n &.loweralpha\n list-style: lower-alpha\n &.upperalpha\n list-style: upper-alpha\n &.lowerroman\n list-style: lower-roman\n &.upperroman\n list-style: upper-roman\n\n// Don't space lists out when they're \"simple\" or in a `.. toctree::`\n.simple,\n.toctree-wrapper\n li\n > ul,\n > ol\n margin-top: 0\n margin-bottom: 0\n\n// Definition Lists\n.field-list,\n.option-list,\ndl:not([class]),\ndl.simple,\ndl.footnote,\ndl.glossary\n dt\n font-weight: 500\n margin-top: 0.25rem\n + dt\n margin-top: 0\n\n .classifier::before\n content: \":\"\n margin-left: 0.2rem\n margin-right: 0.2rem\n\n dd\n > p:first-child,\n ul\n margin-top: 0.125rem\n\n ul\n margin-bottom: 0.125rem\n",".math-wrapper\n width: 100%\n overflow-x: auto\n\ndiv.math\n position: relative\n text-align: center\n\n .headerlink,\n &:focus .headerlink\n display: none\n\n &:hover .headerlink\n display: inline-block\n\n span.eqno\n position: absolute\n right: 0.5rem\n top: 50%\n transform: translate(0, -50%)\n z-index: 1\n","// Abbreviations\nabbr[title]\n cursor: help\n\n// \"Problematic\" content, as identified by Sphinx\n.problematic\n color: var(--color-problematic)\n\n// Keyboard / Mouse \"instructions\"\nkbd:not(.compound)\n margin: 0 0.2rem\n padding: 0 0.2rem\n border-radius: 0.2rem\n border: 1px solid var(--color-foreground-border)\n color: var(--color-foreground-primary)\n vertical-align: text-bottom\n\n font-size: var(--font-size--small--3)\n display: inline-block\n\n box-shadow: 0 0.0625rem 0 rgba(0, 0, 0, 0.2), inset 0 0 0 0.125rem var(--color-background-primary)\n\n background-color: var(--color-background-secondary)\n\n// Blockquote\nblockquote\n border-left: 4px solid var(--color-background-border)\n background: var(--color-background-secondary)\n\n margin-left: 0\n margin-right: 0\n padding: 0.5rem 1rem\n\n .attribution\n font-weight: 600\n text-align: right\n\n &.pull-quote,\n &.highlights\n font-size: 1.25em\n\n &.epigraph,\n &.pull-quote\n border-left-width: 0\n border-radius: 0.5rem\n\n &.highlights\n border-left-width: 0\n background: transparent\n\n// Center align embedded-in-text images\np .reference img\n vertical-align: middle\n","p.rubric\n line-height: 1.25\n font-weight: bold\n font-size: 1.125em\n\n // For Numpy-style documentation that's got rubrics within it.\n // https://github.com/pradyunsg/furo/discussions/505\n dd &\n line-height: inherit\n font-weight: inherit\n\n font-size: var(--font-size--small)\n text-transform: uppercase\n","article .sidebar\n float: right\n clear: right\n width: 30%\n\n margin-left: 1rem\n margin-right: 0\n\n border-radius: 0.2rem\n background-color: var(--color-background-secondary)\n border: var(--color-background-border) 1px solid\n\n > *\n padding-left: 1rem\n padding-right: 1rem\n\n > ul, > ol // lists need additional padding, because bullets.\n padding-left: 2.2rem\n\n .sidebar-title\n margin: 0\n padding: 0.5rem 1rem\n border-bottom: var(--color-background-border) 1px solid\n\n font-weight: 500\n\n// TODO: subtitle\n// TODO: dedicated variables?\n",".table-wrapper\n width: 100%\n overflow-x: auto\n margin-top: 1rem\n margin-bottom: 0.5rem\n padding: 0.2rem 0.2rem 0.75rem\n\ntable.docutils\n border-radius: 0.2rem\n border-spacing: 0\n border-collapse: collapse\n\n box-shadow: 0 0.2rem 0.5rem rgba(0, 0, 0, 0.05), 0 0 0.0625rem rgba(0, 0, 0, 0.1)\n\n th\n background: var(--color-table-header-background)\n\n td,\n th\n // Space things out properly\n padding: 0 0.25rem\n\n // Get the borders looking just-right.\n border-left: 1px solid var(--color-table-border)\n border-right: 1px solid var(--color-table-border)\n border-bottom: 1px solid var(--color-table-border)\n\n p\n margin: 0.25rem\n\n &:first-child\n border-left: none\n &:last-child\n border-right: none\n\n // MyST-parser tables set these classes for control of column alignment\n &.text-left\n text-align: left\n &.text-right\n text-align: right\n &.text-center\n text-align: center\n",":target\n scroll-margin-top: 2.5rem\n\n@media (max-width: $full-width - $sidebar-width)\n :target\n scroll-margin-top: calc(2.5rem + var(--header-height))\n\n // When a heading is selected\n section > span:target\n scroll-margin-top: calc(2.8rem + var(--header-height))\n\n// Permalinks\n.headerlink\n font-weight: 100\n user-select: none\n\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\ndl dt,\np.caption,\nfigcaption p,\ntable > caption,\n.code-block-caption\n > .headerlink\n margin-left: 0.5rem\n visibility: hidden\n &:hover > .headerlink\n visibility: visible\n\n // Don't change to link-like, if someone adds the contents directive.\n > .toc-backref\n color: inherit\n text-decoration-line: none\n\n// Figure and table captions are special.\nfigure:hover > figcaption > p > .headerlink,\ntable:hover > caption > .headerlink\n visibility: visible\n\n:target >, // Regular section[id] style anchors\nspan:target ~ // Non-regular span[id] style \"extra\" anchors\n h1,\n h2,\n h3,\n h4,\n h5,\n h6\n &:nth-of-type(1)\n background-color: var(--color-highlight-on-target)\n // .headerlink\n // visibility: visible\n code.literal\n background-color: transparent\n\ntable:target > caption,\nfigure:target\n background-color: var(--color-highlight-on-target)\n\n// Inline page contents\n.this-will-duplicate-information-and-it-is-still-useful-here li :target\n background-color: var(--color-highlight-on-target)\n\n// Code block permalinks\n.literal-block-wrapper:target .code-block-caption\n background-color: var(--color-highlight-on-target)\n\n// When a definition list item is selected\n//\n// There isn't really an alternative to !important here, due to the\n// high-specificity of API documentation's selector.\ndt:target\n background-color: var(--color-highlight-on-target) !important\n\n// When a footnote reference is selected\n.footnote > dt:target + dd,\n.footnote-reference:target\n background-color: var(--color-highlight-on-target)\n",".guilabel\n background-color: var(--color-guilabel-background)\n border: 1px solid var(--color-guilabel-border)\n color: var(--color-guilabel-text)\n\n padding: 0 0.3em\n border-radius: 0.5em\n font-size: 0.9em\n","// This file contains the styles used for stylizing the footer that's shown\n// below the content.\n\nfooter\n font-size: var(--font-size--small)\n display: flex\n flex-direction: column\n\n margin-top: 2rem\n\n// Bottom of page information\n.bottom-of-page\n display: flex\n align-items: center\n justify-content: space-between\n\n margin-top: 1rem\n padding-top: 1rem\n padding-bottom: 1rem\n\n color: var(--color-foreground-secondary)\n border-top: 1px solid var(--color-background-border)\n\n line-height: 1.5\n\n @media (max-width: $content-width)\n text-align: center\n flex-direction: column-reverse\n gap: 0.25rem\n\n .left-details\n font-size: var(--font-size--small)\n\n .right-details\n display: flex\n flex-direction: column\n gap: 0.25rem\n text-align: right\n\n .icons\n display: flex\n justify-content: flex-end\n gap: 0.25rem\n font-size: 1rem\n\n a\n text-decoration: none\n\n svg,\n img\n font-size: 1.125rem\n height: 1em\n width: 1em\n\n// Next/Prev page information\n.related-pages\n a\n display: flex\n align-items: center\n\n text-decoration: none\n &:hover .page-info .title\n text-decoration: underline\n color: var(--color-link)\n text-decoration-color: var(--color-link-underline)\n\n svg.furo-related-icon,\n svg.furo-related-icon > use\n flex-shrink: 0\n\n color: var(--color-foreground-border)\n\n width: 0.75rem\n height: 0.75rem\n margin: 0 0.5rem\n\n &.next-page\n max-width: 50%\n\n float: right\n clear: right\n text-align: right\n\n &.prev-page\n max-width: 50%\n\n float: left\n clear: left\n\n svg\n transform: rotate(180deg)\n\n.page-info\n display: flex\n flex-direction: column\n overflow-wrap: anywhere\n\n .next-page &\n align-items: flex-end\n\n .context\n display: flex\n align-items: center\n\n padding-bottom: 0.1rem\n\n color: var(--color-foreground-muted)\n font-size: var(--font-size--small)\n text-decoration: none\n","// This file contains the styles for the contents of the left sidebar, which\n// contains the navigation tree, logo, search etc.\n\n////////////////////////////////////////////////////////////////////////////////\n// Brand on top of the scrollable tree.\n////////////////////////////////////////////////////////////////////////////////\n.sidebar-brand\n display: flex\n flex-direction: column\n flex-shrink: 0\n\n padding: var(--sidebar-item-spacing-vertical) var(--sidebar-item-spacing-horizontal)\n text-decoration: none\n\n.sidebar-brand-text\n color: var(--color-sidebar-brand-text)\n overflow-wrap: break-word\n margin: var(--sidebar-item-spacing-vertical) 0\n font-size: 1.5rem\n\n.sidebar-logo-container\n margin: var(--sidebar-item-spacing-vertical) 0\n\n.sidebar-logo\n margin: 0 auto\n display: block\n max-width: 100%\n\n////////////////////////////////////////////////////////////////////////////////\n// Search\n////////////////////////////////////////////////////////////////////////////////\n.sidebar-search-container\n display: flex\n align-items: center\n margin-top: var(--sidebar-search-space-above)\n\n position: relative\n\n background: var(--color-sidebar-search-background)\n &:hover,\n &:focus-within\n background: var(--color-sidebar-search-background--focus)\n\n &::before\n content: \"\"\n position: absolute\n left: var(--sidebar-item-spacing-horizontal)\n width: var(--sidebar-search-icon-size)\n height: var(--sidebar-search-icon-size)\n\n background-color: var(--color-sidebar-search-icon)\n mask-image: var(--icon-search)\n\n.sidebar-search\n box-sizing: border-box\n\n border: none\n border-top: 1px solid var(--color-sidebar-search-border)\n border-bottom: 1px solid var(--color-sidebar-search-border)\n\n padding-top: var(--sidebar-search-input-spacing-vertical)\n padding-bottom: var(--sidebar-search-input-spacing-vertical)\n padding-right: var(--sidebar-search-input-spacing-horizontal)\n padding-left: calc(var(--sidebar-item-spacing-horizontal) + var(--sidebar-search-input-spacing-horizontal) + var(--sidebar-search-icon-size))\n\n width: 100%\n\n color: var(--color-sidebar-search-foreground)\n background: transparent\n z-index: 10\n\n &:focus\n outline: none\n\n &::placeholder\n font-size: var(--sidebar-search-input-font-size)\n\n//\n// Hide Search Matches link\n//\n#searchbox .highlight-link\n padding: var(--sidebar-item-spacing-vertical) var(--sidebar-item-spacing-horizontal) 0\n margin: 0\n text-align: center\n\n a\n color: var(--color-sidebar-search-icon)\n font-size: var(--font-size--small--2)\n\n////////////////////////////////////////////////////////////////////////////////\n// Structure/Skeleton of the navigation tree (left)\n////////////////////////////////////////////////////////////////////////////////\n.sidebar-tree\n font-size: var(--sidebar-item-font-size)\n margin-top: var(--sidebar-tree-space-above)\n margin-bottom: var(--sidebar-item-spacing-vertical)\n\n ul\n padding: 0\n margin-top: 0\n margin-bottom: 0\n\n display: flex\n flex-direction: column\n\n list-style: none\n\n li\n position: relative\n margin: 0\n\n > ul\n margin-left: var(--sidebar-item-spacing-horizontal)\n\n .icon\n color: var(--color-sidebar-link-text)\n\n .reference\n box-sizing: border-box\n color: var(--color-sidebar-link-text)\n\n // Fill the parent.\n display: inline-block\n line-height: var(--sidebar-item-line-height)\n text-decoration: none\n\n // Don't allow long words to cause wrapping.\n overflow-wrap: anywhere\n\n height: 100%\n width: 100%\n\n padding: var(--sidebar-item-spacing-vertical) var(--sidebar-item-spacing-horizontal)\n\n &:hover\n color: var(--color-sidebar-link-text)\n background: var(--color-sidebar-item-background--hover)\n\n // Add a nice little \"external-link\" arrow here.\n &.external::after\n content: url('data:image/svg+xml,')\n margin: 0 0.25rem\n vertical-align: middle\n color: var(--color-sidebar-link-text)\n\n // Make the current page reference bold.\n .current-page > .reference\n font-weight: bold\n\n label\n position: absolute\n top: 0\n right: 0\n height: var(--sidebar-item-height)\n width: var(--sidebar-expander-width)\n\n cursor: pointer\n user-select: none\n\n display: flex\n justify-content: center\n align-items: center\n\n .caption, :not(.caption) > .caption-text\n font-size: var(--sidebar-caption-font-size)\n color: var(--color-sidebar-caption-text)\n\n font-weight: bold\n text-transform: uppercase\n\n margin: var(--sidebar-caption-space-above) 0 0 0\n padding: var(--sidebar-item-spacing-vertical) var(--sidebar-item-spacing-horizontal)\n\n // If it has children, add a bit more padding to wrap the content to avoid\n // overlapping with the