From 320d88f4c7f7bff130edf4d7905c1e8eabd7370c Mon Sep 17 00:00:00 2001 From: chriswmackey Date: Wed, 16 Oct 2024 02:32:40 +0000 Subject: [PATCH] deploy: update docs --- .nojekyll | 0 docs/.buildinfo | 4 + docs/.doctrees/cli/index.doctree | Bin 0 -> 3604 bytes docs/.doctrees/cli/main.doctree | Bin 0 -> 51512 bytes docs/.doctrees/cli/translate.doctree | Bin 0 -> 51654 bytes docs/.doctrees/environment.pickle | Bin 0 -> 286483 bytes docs/.doctrees/honeybee_doe2.cli.doctree | Bin 0 -> 4036 bytes .../honeybee_doe2.cli.translate.doctree | Bin 0 -> 3250 bytes docs/.doctrees/honeybee_doe2.config.doctree | Bin 0 -> 3241 bytes .../honeybee_doe2.construction.doctree | Bin 0 -> 14715 bytes docs/.doctrees/honeybee_doe2.doctree | Bin 0 -> 4343 bytes docs/.doctrees/honeybee_doe2.grouping.doctree | Bin 0 -> 17712 bytes docs/.doctrees/honeybee_doe2.load.doctree | Bin 0 -> 33953 bytes .../honeybee_doe2.programtype.doctree | Bin 0 -> 15933 bytes .../honeybee_doe2.properties.doctree | Bin 0 -> 4088 bytes .../honeybee_doe2.properties.model.doctree | Bin 0 -> 15013 bytes .../honeybee_doe2.properties.room.doctree | Bin 0 -> 63408 bytes docs/.doctrees/honeybee_doe2.schedule.doctree | Bin 0 -> 40720 bytes .../honeybee_doe2.simulation.doctree | Bin 0 -> 40499 bytes docs/.doctrees/honeybee_doe2.util.doctree | Bin 0 -> 31137 bytes docs/.doctrees/honeybee_doe2.writer.doctree | Bin 0 -> 65838 bytes docs/.doctrees/index.doctree | Bin 0 -> 7970 bytes docs/.doctrees/modules.doctree | Bin 0 -> 2796 bytes docs/.nojekyll | 0 docs/_modules/honeybee_doe2/construction.html | 426 + docs/_modules/honeybee_doe2/grouping.html | 549 ++ docs/_modules/honeybee_doe2/load.html | 608 ++ docs/_modules/honeybee_doe2/programtype.html | 487 ++ .../honeybee_doe2/properties/model.html | 371 + .../honeybee_doe2/properties/room.html | 700 ++ docs/_modules/honeybee_doe2/schedule.html | 995 +++ docs/_modules/honeybee_doe2/simulation.html | 610 ++ docs/_modules/honeybee_doe2/util.html | 532 ++ docs/_modules/honeybee_doe2/writer.html | 1380 ++++ docs/_modules/index.html | 316 + docs/_sources/cli/index.rst.txt | 15 + docs/_sources/cli/main.rst.txt | 7 + docs/_sources/cli/translate.rst.txt | 6 + docs/_sources/honeybee_doe2.cli.rst.txt | 18 + .../honeybee_doe2.cli.translate.rst.txt | 7 + docs/_sources/honeybee_doe2.config.rst.txt | 7 + .../honeybee_doe2.construction.rst.txt | 7 + docs/_sources/honeybee_doe2.grouping.rst.txt | 7 + docs/_sources/honeybee_doe2.load.rst.txt | 7 + .../honeybee_doe2.programtype.rst.txt | 7 + .../honeybee_doe2.properties.model.rst.txt | 7 + .../honeybee_doe2.properties.room.rst.txt | 7 + .../_sources/honeybee_doe2.properties.rst.txt | 19 + docs/_sources/honeybee_doe2.rst.txt | 35 + docs/_sources/honeybee_doe2.schedule.rst.txt | 7 + .../_sources/honeybee_doe2.simulation.rst.txt | 7 + docs/_sources/honeybee_doe2.util.rst.txt | 7 + docs/_sources/honeybee_doe2.writer.rst.txt | 7 + docs/_sources/index.rst.txt | 39 + docs/_sources/modules.rst.txt | 7 + docs/_static/basic.css | 925 +++ .../css/bootstrap-responsive.css | 1109 +++ .../css/bootstrap-responsive.min.css | 9 + .../_static/bootstrap-2.3.2/css/bootstrap.css | 6167 +++++++++++++++ .../bootstrap-2.3.2/css/bootstrap.min.css | 9 + .../img/glyphicons-halflings-white.png | Bin 0 -> 8777 bytes .../img/glyphicons-halflings.png | Bin 0 -> 12799 bytes docs/_static/bootstrap-2.3.2/js/bootstrap.js | 2287 ++++++ .../bootstrap-2.3.2/js/bootstrap.min.js | 6 + .../bootstrap-3.4.1/css/bootstrap-theme.css | 587 ++ .../css/bootstrap-theme.css.map | 1 + .../css/bootstrap-theme.min.css | 6 + .../css/bootstrap-theme.min.css.map | 1 + .../_static/bootstrap-3.4.1/css/bootstrap.css | 6834 +++++++++++++++++ .../bootstrap-3.4.1/css/bootstrap.css.map | 1 + .../bootstrap-3.4.1/css/bootstrap.min.css | 6 + .../bootstrap-3.4.1/css/bootstrap.min.css.map | 1 + .../fonts/glyphicons-halflings-regular.eot | Bin 0 -> 20127 bytes .../fonts/glyphicons-halflings-regular.svg | 288 + .../fonts/glyphicons-halflings-regular.ttf | Bin 0 -> 45404 bytes .../fonts/glyphicons-halflings-regular.woff | Bin 0 -> 23424 bytes .../fonts/glyphicons-halflings-regular.woff2 | Bin 0 -> 18028 bytes docs/_static/bootstrap-3.4.1/js/bootstrap.js | 2580 +++++++ .../bootstrap-3.4.1/js/bootstrap.min.js | 6 + docs/_static/bootstrap-3.4.1/js/npm.js | 13 + docs/_static/bootstrap-sphinx.css | 223 + docs/_static/bootstrap-sphinx.js | 175 + .../bootswatch-2.3.2/amelia/bootstrap.min.css | 9 + .../cerulean/bootstrap.min.css | 9 + .../bootswatch-2.3.2/cosmo/bootstrap.min.css | 9 + .../bootswatch-2.3.2/cyborg/bootstrap.min.css | 9 + .../bootswatch-2.3.2/flatly/bootstrap.min.css | 9 + .../img/glyphicons-halflings-white.png | Bin 0 -> 8777 bytes .../img/glyphicons-halflings.png | Bin 0 -> 12799 bytes .../journal/bootstrap.min.css | 9 + .../readable/bootstrap.min.css | 9 + .../simplex/bootstrap.min.css | 9 + .../bootswatch-2.3.2/slate/bootstrap.min.css | 9 + .../spacelab/bootstrap.min.css | 9 + .../bootswatch-2.3.2/spruce/bootstrap.min.css | 9 + .../superhero/bootstrap.min.css | 9 + .../bootswatch-2.3.2/united/bootstrap.min.css | 9 + .../cerulean/bootstrap.min.css | 11 + .../bootswatch-3.4.1/cosmo/bootstrap.min.css | 11 + .../bootswatch-3.4.1/cyborg/bootstrap.min.css | 11 + .../bootswatch-3.4.1/darkly/bootstrap.min.css | 11 + .../bootswatch-3.4.1/flatly/bootstrap.min.css | 11 + .../fonts/glyphicons-halflings-regular.eot | Bin 0 -> 20127 bytes .../fonts/glyphicons-halflings-regular.svg | 288 + .../fonts/glyphicons-halflings-regular.ttf | Bin 0 -> 45404 bytes .../fonts/glyphicons-halflings-regular.woff | Bin 0 -> 23424 bytes .../fonts/glyphicons-halflings-regular.woff2 | Bin 0 -> 18028 bytes .../journal/bootstrap.min.css | 11 + .../bootswatch-3.4.1/lumen/bootstrap.min.css | 11 + .../bootswatch-3.4.1/paper/bootstrap.min.css | 11 + .../readable/bootstrap.min.css | 11 + .../sandstone/bootstrap.min.css | 11 + .../simplex/bootstrap.min.css | 11 + .../bootswatch-3.4.1/slate/bootstrap.min.css | 11 + .../spacelab/bootstrap.min.css | 11 + .../superhero/bootstrap.min.css | 11 + .../bootswatch-3.4.1/united/bootstrap.min.css | 11 + .../bootswatch-3.4.1/yeti/bootstrap.min.css | 11 + docs/_static/custom.css | 65 + docs/_static/doctools.js | 156 + docs/_static/documentation_options.js | 13 + docs/_static/file.png | Bin 0 -> 286 bytes docs/_static/js/jquery-1.12.4.min.js | 5 + docs/_static/js/jquery-fix.js | 2 + docs/_static/language_data.js | 199 + docs/_static/minus.png | Bin 0 -> 90 bytes docs/_static/plus.png | Bin 0 -> 90 bytes docs/_static/pygments.css | 84 + docs/_static/searchtools.js | 620 ++ docs/_static/sphinx_highlight.js | 154 + docs/cli/index.html | 349 + docs/cli/main.html | 583 ++ docs/cli/translate.html | 611 ++ docs/genindex.html | 1126 +++ docs/honeybee_doe2.cli.html | 367 + docs/honeybee_doe2.cli.translate.html | 356 + docs/honeybee_doe2.config.html | 356 + docs/honeybee_doe2.construction.html | 407 + docs/honeybee_doe2.grouping.html | 432 ++ docs/honeybee_doe2.html | 493 ++ docs/honeybee_doe2.load.html | 529 ++ docs/honeybee_doe2.programtype.html | 426 + docs/honeybee_doe2.properties.html | 403 + docs/honeybee_doe2.properties.model.html | 424 + docs/honeybee_doe2.properties.room.html | 665 ++ docs/honeybee_doe2.schedule.html | 537 ++ docs/honeybee_doe2.simulation.html | 561 ++ docs/honeybee_doe2.util.html | 498 ++ docs/honeybee_doe2.writer.html | 673 ++ docs/index.html | 448 ++ docs/modules.html | 409 + docs/objects.inv | Bin 0 -> 1887 bytes docs/py-modindex.html | 396 + docs/search.html | 333 + docs/searchindex.js | 1 + 155 files changed, 41704 insertions(+) create mode 100644 .nojekyll create mode 100644 docs/.buildinfo create mode 100644 docs/.doctrees/cli/index.doctree create mode 100644 docs/.doctrees/cli/main.doctree create mode 100644 docs/.doctrees/cli/translate.doctree create mode 100644 docs/.doctrees/environment.pickle create mode 100644 docs/.doctrees/honeybee_doe2.cli.doctree create mode 100644 docs/.doctrees/honeybee_doe2.cli.translate.doctree create mode 100644 docs/.doctrees/honeybee_doe2.config.doctree create mode 100644 docs/.doctrees/honeybee_doe2.construction.doctree create mode 100644 docs/.doctrees/honeybee_doe2.doctree create mode 100644 docs/.doctrees/honeybee_doe2.grouping.doctree create mode 100644 docs/.doctrees/honeybee_doe2.load.doctree create mode 100644 docs/.doctrees/honeybee_doe2.programtype.doctree create mode 100644 docs/.doctrees/honeybee_doe2.properties.doctree create mode 100644 docs/.doctrees/honeybee_doe2.properties.model.doctree create mode 100644 docs/.doctrees/honeybee_doe2.properties.room.doctree create mode 100644 docs/.doctrees/honeybee_doe2.schedule.doctree create mode 100644 docs/.doctrees/honeybee_doe2.simulation.doctree create mode 100644 docs/.doctrees/honeybee_doe2.util.doctree create mode 100644 docs/.doctrees/honeybee_doe2.writer.doctree create mode 100644 docs/.doctrees/index.doctree create mode 100644 docs/.doctrees/modules.doctree create mode 100644 docs/.nojekyll create mode 100644 docs/_modules/honeybee_doe2/construction.html create mode 100644 docs/_modules/honeybee_doe2/grouping.html create mode 100644 docs/_modules/honeybee_doe2/load.html create mode 100644 docs/_modules/honeybee_doe2/programtype.html create mode 100644 docs/_modules/honeybee_doe2/properties/model.html create mode 100644 docs/_modules/honeybee_doe2/properties/room.html create mode 100644 docs/_modules/honeybee_doe2/schedule.html create mode 100644 docs/_modules/honeybee_doe2/simulation.html create mode 100644 docs/_modules/honeybee_doe2/util.html create mode 100644 docs/_modules/honeybee_doe2/writer.html create mode 100644 docs/_modules/index.html create mode 100644 docs/_sources/cli/index.rst.txt create mode 100644 docs/_sources/cli/main.rst.txt create mode 100644 docs/_sources/cli/translate.rst.txt create mode 100644 docs/_sources/honeybee_doe2.cli.rst.txt create mode 100644 docs/_sources/honeybee_doe2.cli.translate.rst.txt create mode 100644 docs/_sources/honeybee_doe2.config.rst.txt create mode 100644 docs/_sources/honeybee_doe2.construction.rst.txt create mode 100644 docs/_sources/honeybee_doe2.grouping.rst.txt create mode 100644 docs/_sources/honeybee_doe2.load.rst.txt create mode 100644 docs/_sources/honeybee_doe2.programtype.rst.txt create mode 100644 docs/_sources/honeybee_doe2.properties.model.rst.txt create mode 100644 docs/_sources/honeybee_doe2.properties.room.rst.txt create mode 100644 docs/_sources/honeybee_doe2.properties.rst.txt create mode 100644 docs/_sources/honeybee_doe2.rst.txt create mode 100644 docs/_sources/honeybee_doe2.schedule.rst.txt create mode 100644 docs/_sources/honeybee_doe2.simulation.rst.txt create mode 100644 docs/_sources/honeybee_doe2.util.rst.txt create mode 100644 docs/_sources/honeybee_doe2.writer.rst.txt create mode 100644 docs/_sources/index.rst.txt create mode 100644 docs/_sources/modules.rst.txt create mode 100644 docs/_static/basic.css create mode 100644 docs/_static/bootstrap-2.3.2/css/bootstrap-responsive.css create mode 100644 docs/_static/bootstrap-2.3.2/css/bootstrap-responsive.min.css create mode 100644 docs/_static/bootstrap-2.3.2/css/bootstrap.css create mode 100644 docs/_static/bootstrap-2.3.2/css/bootstrap.min.css create mode 100644 docs/_static/bootstrap-2.3.2/img/glyphicons-halflings-white.png create mode 100644 docs/_static/bootstrap-2.3.2/img/glyphicons-halflings.png create mode 100644 docs/_static/bootstrap-2.3.2/js/bootstrap.js create mode 100644 docs/_static/bootstrap-2.3.2/js/bootstrap.min.js create mode 100644 docs/_static/bootstrap-3.4.1/css/bootstrap-theme.css create mode 100644 docs/_static/bootstrap-3.4.1/css/bootstrap-theme.css.map create mode 100644 docs/_static/bootstrap-3.4.1/css/bootstrap-theme.min.css create mode 100644 docs/_static/bootstrap-3.4.1/css/bootstrap-theme.min.css.map create mode 100644 docs/_static/bootstrap-3.4.1/css/bootstrap.css create mode 100644 docs/_static/bootstrap-3.4.1/css/bootstrap.css.map create mode 100644 docs/_static/bootstrap-3.4.1/css/bootstrap.min.css create mode 100644 docs/_static/bootstrap-3.4.1/css/bootstrap.min.css.map create mode 100644 docs/_static/bootstrap-3.4.1/fonts/glyphicons-halflings-regular.eot create mode 100644 docs/_static/bootstrap-3.4.1/fonts/glyphicons-halflings-regular.svg create mode 100644 docs/_static/bootstrap-3.4.1/fonts/glyphicons-halflings-regular.ttf create mode 100644 docs/_static/bootstrap-3.4.1/fonts/glyphicons-halflings-regular.woff create mode 100644 docs/_static/bootstrap-3.4.1/fonts/glyphicons-halflings-regular.woff2 create mode 100644 docs/_static/bootstrap-3.4.1/js/bootstrap.js create mode 100644 docs/_static/bootstrap-3.4.1/js/bootstrap.min.js create mode 100644 docs/_static/bootstrap-3.4.1/js/npm.js create mode 100644 docs/_static/bootstrap-sphinx.css create mode 100644 docs/_static/bootstrap-sphinx.js create mode 100644 docs/_static/bootswatch-2.3.2/amelia/bootstrap.min.css create mode 100644 docs/_static/bootswatch-2.3.2/cerulean/bootstrap.min.css create mode 100644 docs/_static/bootswatch-2.3.2/cosmo/bootstrap.min.css create mode 100644 docs/_static/bootswatch-2.3.2/cyborg/bootstrap.min.css create mode 100644 docs/_static/bootswatch-2.3.2/flatly/bootstrap.min.css create mode 100644 docs/_static/bootswatch-2.3.2/img/glyphicons-halflings-white.png create mode 100644 docs/_static/bootswatch-2.3.2/img/glyphicons-halflings.png create mode 100644 docs/_static/bootswatch-2.3.2/journal/bootstrap.min.css create mode 100644 docs/_static/bootswatch-2.3.2/readable/bootstrap.min.css create mode 100644 docs/_static/bootswatch-2.3.2/simplex/bootstrap.min.css create mode 100644 docs/_static/bootswatch-2.3.2/slate/bootstrap.min.css create mode 100644 docs/_static/bootswatch-2.3.2/spacelab/bootstrap.min.css create mode 100644 docs/_static/bootswatch-2.3.2/spruce/bootstrap.min.css create mode 100644 docs/_static/bootswatch-2.3.2/superhero/bootstrap.min.css create mode 100644 docs/_static/bootswatch-2.3.2/united/bootstrap.min.css create mode 100644 docs/_static/bootswatch-3.4.1/cerulean/bootstrap.min.css create mode 100644 docs/_static/bootswatch-3.4.1/cosmo/bootstrap.min.css create mode 100644 docs/_static/bootswatch-3.4.1/cyborg/bootstrap.min.css create mode 100644 docs/_static/bootswatch-3.4.1/darkly/bootstrap.min.css create mode 100644 docs/_static/bootswatch-3.4.1/flatly/bootstrap.min.css create mode 100644 docs/_static/bootswatch-3.4.1/fonts/glyphicons-halflings-regular.eot create mode 100644 docs/_static/bootswatch-3.4.1/fonts/glyphicons-halflings-regular.svg create mode 100644 docs/_static/bootswatch-3.4.1/fonts/glyphicons-halflings-regular.ttf create mode 100644 docs/_static/bootswatch-3.4.1/fonts/glyphicons-halflings-regular.woff create mode 100644 docs/_static/bootswatch-3.4.1/fonts/glyphicons-halflings-regular.woff2 create mode 100644 docs/_static/bootswatch-3.4.1/journal/bootstrap.min.css create mode 100644 docs/_static/bootswatch-3.4.1/lumen/bootstrap.min.css create mode 100644 docs/_static/bootswatch-3.4.1/paper/bootstrap.min.css create mode 100644 docs/_static/bootswatch-3.4.1/readable/bootstrap.min.css create mode 100644 docs/_static/bootswatch-3.4.1/sandstone/bootstrap.min.css create mode 100644 docs/_static/bootswatch-3.4.1/simplex/bootstrap.min.css create mode 100644 docs/_static/bootswatch-3.4.1/slate/bootstrap.min.css create mode 100644 docs/_static/bootswatch-3.4.1/spacelab/bootstrap.min.css create mode 100644 docs/_static/bootswatch-3.4.1/superhero/bootstrap.min.css create mode 100644 docs/_static/bootswatch-3.4.1/united/bootstrap.min.css create mode 100644 docs/_static/bootswatch-3.4.1/yeti/bootstrap.min.css create mode 100644 docs/_static/custom.css create mode 100644 docs/_static/doctools.js create mode 100644 docs/_static/documentation_options.js create mode 100644 docs/_static/file.png create mode 100644 docs/_static/js/jquery-1.12.4.min.js create mode 100644 docs/_static/js/jquery-fix.js create mode 100644 docs/_static/language_data.js create mode 100644 docs/_static/minus.png create mode 100644 docs/_static/plus.png create mode 100644 docs/_static/pygments.css create mode 100644 docs/_static/searchtools.js create mode 100644 docs/_static/sphinx_highlight.js create mode 100644 docs/cli/index.html create mode 100644 docs/cli/main.html create mode 100644 docs/cli/translate.html create mode 100644 docs/genindex.html create mode 100644 docs/honeybee_doe2.cli.html create mode 100644 docs/honeybee_doe2.cli.translate.html create mode 100644 docs/honeybee_doe2.config.html create mode 100644 docs/honeybee_doe2.construction.html create mode 100644 docs/honeybee_doe2.grouping.html create mode 100644 docs/honeybee_doe2.html create mode 100644 docs/honeybee_doe2.load.html create mode 100644 docs/honeybee_doe2.programtype.html create mode 100644 docs/honeybee_doe2.properties.html create mode 100644 docs/honeybee_doe2.properties.model.html create mode 100644 docs/honeybee_doe2.properties.room.html create mode 100644 docs/honeybee_doe2.schedule.html create mode 100644 docs/honeybee_doe2.simulation.html create mode 100644 docs/honeybee_doe2.util.html create mode 100644 docs/honeybee_doe2.writer.html create mode 100644 docs/index.html create mode 100644 docs/modules.html create mode 100644 docs/objects.inv create mode 100644 docs/py-modindex.html create mode 100644 docs/search.html create mode 100644 docs/searchindex.js diff --git a/.nojekyll b/.nojekyll new file mode 100644 index 0000000..e69de29 diff --git a/docs/.buildinfo b/docs/.buildinfo new file mode 100644 index 0000000..d945cd8 --- /dev/null +++ b/docs/.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: 6d1deba435e026ed761fa0e0dbeffa98 +tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/docs/.doctrees/cli/index.doctree b/docs/.doctrees/cli/index.doctree new file mode 100644 index 0000000000000000000000000000000000000000..1013fae0ae01a4511606d3b98057f93a1377fe60 GIT binary patch literal 3604 zcmbVPTZ+a58k}N{9IwCO%W_Lt<5FaEEAJpg~BECs)O?S;yvDIB|U9vNv zpbwF()SKmdATNRZA%Bivb@%l2jJk*m16`+1ojRBAe5dy3)*rpWmEzCs=$!Fvc1)5a zlL^({brTuelxD{N?jQW(fAaTTPmyyit%|94SD+CyE)qpE|GjsEpl-O($JP0crm^8N ztBWmRVk=X?G!TTc2mz5FtpB&>}$xYr-lwaP0lku@m-Y2%o)$nAzJ% z={xw{#qS<|4-gM~uZZKQRA&$2MhkBATo36bQ$=#tEYR2A%3;iCd^Y5hp<#3w%QPif zG7Om>ay{gwk2JxKQYgNd53Q!d)6SlXZAA`;*lNGOVj@eJ1o-PfpSrX<^i`=CA2I$S=8@u z@vGQHcJ|{D4Bp=K~Krp zDB7fgYVY50%Wk_~-9PAJ5P{-F@1D5ruwfL*G+KrFUp)!giiJ(+go{Fn{YG3jC9{O) zhWRH~K?5W&+6tsG6>{t^T$}ME0j*uQ?do(b=w>z@Q$-X1-;O)zT_~)i#P5g=rCX;YuqYVeZ}j z1ZFa6Xk+ua+YYl4NQ!0?sZ#&k4KzTUN1>!RsA2GSDWQTElIWZp7A+%SW+bsXaTUn zHGxu2TsxN81Ti8VJXxTDwcUVNBcr9rUE{#oc4E^!s_}@d76J|^s*H$WaHo(I-4IH@ z6y=)QL`JhTplO%Ra;a(5JXt^_HqleAd5PDZDB+rnMF^zwva{$D^xPJL(ddkFegHC+ zTC|`-cM!gCiKZ$rAPN(#C8+l%xU61+B=ujs2jz)Tt-61q?|JDFlKl}#VCB)Y{+tv zLYzLcIj#ur|c4Bzxo_Rn9b16al&fx*0 z)ZmU=F|^Jini4J|yzB$%7GCdFZ*yQ(OiDt#a2qsx8eYtUE2D3F#x!YfnmTzc?VQo?`+JR5;{D!;}gyr{r_L{w7F*{{1*$eA> zVaLpKxEkKBuP<19!Cqci_I6ml!pr*<&!rb^V%>JLh=tkhm;(yIFI-hhLa#3LO8=XZ zQV&s~=;>IB8W)A?%{5`I-CMEPTijY4+F!8`&Q&J7G;Xcis&?>@0F%UcA^|R#GqDr` z8Al8lB%Q~V{C6bdng0e|f#*5;3;(ZZ0HM6FCX^NNW-Tsixmi7CfSqY5V?PO;SJ6Y5 I>UMnm7aW0lM*si- literal 0 HcmV?d00001 diff --git a/docs/.doctrees/cli/main.doctree b/docs/.doctrees/cli/main.doctree new file mode 100644 index 0000000000000000000000000000000000000000..fae4f6e69894678a46e3c7cbf86b387f4c66c2d0 GIT binary patch literal 51512 zcmeHQYmgjQb(XZ+U9H~oyKKvDoEWcS&C2+NE#!w@wq@Cpu?$6lU8CNa-tBJnOpm*J zv|17pJH&xa+Qi_21VWKicm+F;A{cO)I6M-Q5DE$?m&+kxH#`jlD)1x3p$yJBx9_Wa zy6>HynMHP$w`!+*divaZ?z!ij`}Mi^p1x=Fos}=FAb;_uuw^^V6H{ir-t_BM*ooKF z{aU+WHKWdhoo)Aa-qe|lCjxUW^xHwr>clJHj+*Uw^}uR&?&`!F@%G5^!YN8W9$K}? z@td679<|5p@w+;c_C!1yIgw{cKgFvXrqk@;@9^{LJFF8}FTHwSC#ip|WkPLH$KDc8 zR5^S0NIXWlIux(=oTk+|)SfouwPq9r&U8D1)*$yIPCZ0U$7`M$hHw$iN1J9NIa^b2 zx5Srevvw@7X7HYNJRX^|_*2K;WS?WNx6idl?5**2J8ZvU?Fibp=r%e zTUMp+TbE|O0lVRjn&<4mc1{H$wBo#jtJ>4{x8GEj?VaKE(`G*&uq@N%~`w_+Lq^m$=J@U?ZJOkHG^4HQtX<;_EsDEMQZq1 z(4G#Qn%v^?!!5L}ko5%rE+lXFF8LXhF;u%9s$BuHUJ;Kv&AN3$sxdL$LY<1o!7c-b zn9^jtx@9^+C*Gd!7OFl5TBzX@{$FKOD#xuLL^lziUu)Ep%as%%zr!9o6m?9L(Q&F2 zE8^AQt7OSA7qbE!68usP9WdRf9i)8Cgs3%fNGswAayPMZ=I+2EA0Yndj94NN0`3$G zcrsoC6<0`c;7EZHa%#zDXjko{*p_!dTi%uwmGnF5fc1nQ^v39TB$kK^P4&ZMybdb^ zolEN5fTYC76<7NH?n*6D=zS*o4DgsxZYN%grTfz^xbse`1@Riw^RNzdllBAPajTJE ztAZ3=QN0t7C7PZQ=vduP zhQX)fagca4--1Es-x3YtUz&a;vCf5fyy>&kjqGv-EpZ+^&U*SI`@RM4pkfaBO`DoN zyT_W%yL&+w5- zXv5We>1bqthc#Fwz^`!=9fgfs0myhp~q}ll`B@LhC6g#wz*(Wv%$=+^U=#4 z17fK?3U%3FPrISttVF2NEv7P=t6bRb*;p_^Up-QSGHu9DGm(p~C_sLScqpn<7)cYBs5zQej1?8ED*W&ovg^}2} zIANbB29tPnH{gz)Oz!lX;Q5+TJf9bjp)&$}esBe-(A7lr3{$vQ!B?i(2{Z04=~BGA zf!10@>F+ddXnUT~G9#OGMAo8757GWI!1!<4(>msDJ0~O+0VLvkRlR+K^q)k ztZ&D0CCVYC&a+HqVvca>xWd1SzM4n!p4|h0Ug{p0j@omqwlZjU(tdM%ZA$tT?$#?Q zQ)LfO83b%MI`O4N*tejl3J?)EjI|#ar1pw^+^kg^W~+r`z55`_5OKDJqdwql=2+gE zmd&JnKf4fL0NiW`Brlg_?80wVTJE(($0qFuIn4-ZK>`uTx#-6CDZ6pfexLnkDHtjN zY4<&x)@8~BX7T}6ZBD;V+7H`*m0KQQWLZ|0QX#vIX;Cu< zvX=!j|EOVR0Exz%@_HI@U)OcP&Q~?;lx-_NVxh4c9l&nm?uu1l4;yt$LHgQ}9fD);j zJc#Y4>=Eus5i`E$L37wsTdG;MdEA0VSlVpd62;Fc-@*Y+a3g7lVN9kAN?-4U%jdXf^b*i-RHQ^ zBiFng2+KGN(|&zkVliHK^yo#zOfNcmG+~23lelMKX~@|`JWeB>5~=w4jCh=uAq_WM zOEG>on38pG60j0Aa6 zZwStC-<(f@F|We#jQtJwAhvDMy#)_T$>Bd2>~AjE-&(N0yKpyXW0?tV?RDioYwZU4^|n(~Te_W?~K zRM;F+`d^w9L-Nn_5o0LBOK=#h*J1{oQo=MBnnouF;$iGv5)hE|@? zo+oKT*yyYT0a^I?RW1eh|G@X8pS;{(c3qluM}UIe7WaS;zh8zuh7Z4sL^3{fPnD}( zbM)vPLEGvEgwG-!_)qs->2{Z01#?`DbP@>s1rihv4%tW|1%W>YqLLu+XL=F_0o!gC%#nH3tp8X4~Aw8KG$n(~U#%~8%sd1RPhsX#Y?25U^FzZvq{~{29+SjH^nnj+efZU4`6?me zK@g|wUQh zh9Nu)p)46RJTy>a!#O9a*_AMYc{g0=E|*>c5>AoDq#3aR3=BiWg58y%rOFuav^;tS zRPuimZg3llqfgX#A*US<>eG~0j9jkgjFd-x`IQRfG6Ma;gh|eY>~7Umt3o3A)%K72 zH02e`uC8f>3iahzDr9$Rk@~`rlKY#G?cEx-PP%M`>z^b(r98?5y^432^^M)`K#A@y z1~Iya@gsx}1-iR{%3F=@KAns1z}dsjkA^|k{7T4fE^s1PlMO2hU>#nAG+%yPAVzA1}on#j%e8kp?ejaqK7bBn-!5+sotFzn~4#@WpT}>vyI!!kHD} zSmqz{DRemYzmUB}_eXeGN)F47W3L$m+QDX`SCsY4O|hPG_aJpAn||EqP*x?^QEsWg z608a-z}SVWSGt!?uBrf^U?N})cq;tJ_$buZClDOrw8H^{n(~Ul%z2!V@<1@ZQUPYh z62UU*v9Cgc7i%h4L6-c=IUJ0~<^F`erMG4D zNiBqbyHfa>nX~NZaF{nxJ$U2lBPI+!JeJ!a1}l&ptZmVC@vxK}UeLaHrVn2{BYZI| z_#9yM6Rbe3TS3QtBTB2JH$J^GgWfnP!q}A@^E@(e%RKUoADy#Qj#~muI{&r<1{JXDZXi6^BB0p{S$Dv6DIqNAlBCc3WC}Jlp|!1>QE;4|0knr(fx;% z-Jcx?GFu%EQsVaXas}6>%dp3SYgHsF4z7*E4wFjG?ven>x?*eWDj3lSkV$TFt`u)H zv=#x8CWMuJcxvfMSZEDfUOu#TCvAv^FBV#3z0MGaF!-X-8neNC3SDUJgUH^Z`yo6m zC5IkigV-890lWA~rY=6yC0!BL@DP;*V^ocbhP6E!HgoJB04qq_)Z=T*`dWab6{!FM zGFbi~wl7DquX(LZ3$`Q8+PYsvVJ3J&zD-E`OG;_0AOF6*p!E-J_5c;n{M#b$8ndAie{=lH`@6^2_-}i1Ei<6nPJz8W;XU&X`)) z@dB7IB9rr@XtP&`bQU%~Lm;JyNo5`Yf{P$%Oq0K@ z#gsbGS&GCg>&d>}OkS4sMbSs6VT%hPbheKmp^v)-DP9n1SuQBWJEmp%^^`Z0B%T&o zlEwlX3IL)z`3bBol=dU&60uxfip%qoEF`!;@)bnTEWt$%A89s*kUE7L^$0Bva)78DGhB61s03{^if<{-N1%0PrxdbI9>#i+u z22Z&{`?^L&#nM51`1K+$>~1@OW}l}Y?cKXSi)9M!4SEm3eXTdfxA@;gCR0S zLEV+mX;dI(UIi0jb=(CMM=BUXwM>CiE&yi8S~IC6V;7W*sraf`Zg)Hc)S4%y2>qK|5rQN={^ znGrD&$g|Sj)9^gkbzQLYc?~DfX1@0v(BAZ59oXV*7yMTB1G5E+vMJ~Zc zC64QU+CC*7eQzemSlV?TaT;yNVhE9s+sweg#BdPxfW=OjS`%^#TcH8l=vkbECQ1yG zOoT8;2^~VIr;GzLM!OldteOJ}E9%>M5Cu#VW;J2!r3j_WVyY9I0_EY87dDeZqn4<| z8KzT?v?K%|b=QCJ?oyK>N@raQC_O2mG)n&&*0$*WFCLbXgAS!r58QVKhe3uWOb*t= zT9%YG$+^J>8k*#UULALQO+Q1^P*a1Qf-Drm3-!>nk<$)mXwsBdJTz_NjFcam@+(aZ zO{q>3LsROqu-q#(%&3N@d}dNZ6V{qe0+$R;>Fa`>eHwODLsKq0^3a3|TzY6q$xS&l zod(6bSHXv3Xj(_x*F7{z0sEH{RxNwNs>Ci{67;eQTA21-RQ3D92(RaMvs{xgcb8$0 zO~y2lh(Qrdou5wapi1|3FOqgm$gr#6C3CWT{eCGP>7>k?fk-p?kws*`qbFgLGAIFE zxP)f;k|5tP+7Jz2Y*L2xK2sgx)Qcu%n4it3&`rubg6u82AIHN|a#(JRczf#kLkj%L z$gU`aP>`D|-mjl9k&7=#bS2^(g8*4f@%01>6oVTWG#RMHUAv`|v}U3PzJX64K6znf z`1%?(4W_y2XCgJk{W7N=4#d@zR}67~z!@nIaq}w`5Lc1m>t~v3RbV#1S`KDQujSE{ zS1h{?6JR8YXB-s-&aYI+t~h}geNZUAK@8+)YZyG~QWnF*Byk9(AD}V8S6Sa#;E|M1 z3{Qf-y3gXrxgb-;W5XAzVk;jTUJUuYu2JevcB&9p{*M$JtRX~8*{9ZGqxTEl|21FW|m4$y*Jqd$<*!J@9?;vf6hA#&HSiiF& zQP_78{A2c#PoaZ<9b|9OeJ384lEZStzt;>E{;@PIo%p6f5g;#$+h(&Fm*123IB%Ea#uRgjGU&tVqEhD&PaJom|v;DHHzF` zPid-Ep_Tk<`^SWu@``2mV@)Gem@vOmAvE(!~k_XuS8a}Ap(UDjgcm?SQuJTipT zUS)l1v71tY!$&}v?$h}39DFFi;lotwYH&ErG+b0GhFPRgqOEITd?|_ z#8;GIk3qyKBdY6pn1!juo+-MU@Id)E$wi4fNB_1fHI&e=Cs2B zRhsgOfx(A4BjrI=ex(8!Y|e_C39|bK;k_TxFrrJ!Z|K^bUj$2^)3Brh zPq{1!=Q2r@IliXkQ&w7w)!V?{0o=QvfDZ)%SfDLbBY?k6UO5Zfz#@F>6y56ud$!=6 zjhGM~vnx!pu+YCS-Q-XPeF& zas3mPg71fgtWe#RvGU;MQ(_U+i;i!hdjGCeJq?z5n)m8*&3XQJ8TJ^K`4JKoW0|$E z0qwG>E3e4egZ4a9cA*(|70h@np_H8T>UBWUD;RVso>>V*8r+b@Grs`VG$ahqVEfDC znIB-=p&`0T=zEP=-?PCqMTK4RSrOPJyGNb!lD#aLxktl{3bo`iBV5QN(c5@uSqmbWmy)Cn%E-lS zz`7g3hXS(PNSmjIEGJ|8IPIB}QMKs(cPo2e103GPWxHI!;jhcE$AH5_NK_0QigvC) zj$~b^fnCMty7bQV&z0hhLWWNRk!EPlLWWQ2Nf>0nmY0VNAEph_@WnzPtk?4aKvrdN zF+H=vd8NBOUa=}$RKux zBL!*icU@#G1fvlqAt5@{gkj~TlKbQg%x~5G^}UjdmQtA5=vh!)mylO z{Z6Fl-obwJ9f8>lF}?u_uNgNY?G6N6On4u5lF=~PR%XIhGI$Ag5SZ|)?HNuJ@;zX~ zEK;<%QL4qb@BKFz-<7&=T`KK+XU&v_o@~TJAq`>o`|p(ERoeajTcneE-u=FVwWJD) zv(w0I5IjP4i}xn)q0)4s8y@JVX}Gif{#4VHZi4M>M``F#2;JG9bey!aJ)II++4<7` z_9J_5+Q08Lx9qP%*pLN}hfq=?J`ln~(4xL~y8k9hP}b9OJKY~c^1^X4>);WSpiqag z)BTo|AxgfMsjo1^q6Oo1r-pl5&0xM0U#EWz>@K(>mB43-_6*FJ*KwajDY4~2Hw;{2 zg}gsrl*-owQ59EgtB19)qLncDKOwrR9g~@+YsW|GW%{Mr$%hVUZ z3y(6CUZkukuQ+P+EN3JS-l(_N=T|DCHmfQglOdi8$&GGMncRy+a_4Fqp^EG1BnL^& zxqf0eoqiP(+@`5q72(RSe8{>dAmt>n*(oTLpDyIBo<|@HQ0`ky*j>M#Wavl87>K%iZw?H;WoRxE69x%cz1p!ZNz#xy=tS7f0H@!C8 znGi6+)5@oeJD?P)8kjn4K+XhuH=tev=k<)~c@BZ`nrwSYJHm*9{ z2yDXJXW%U~n3IyEr)2ORUs{c?pCKg%_*NQPiswuRFsdQU$N44bkw$VwJ4l*%P#I`$f~6%$w#@=wg-cNA?!o58z=b zIp{(h6d(4T^kZ-^3~x^8Au&92!UFVHq}M0hIyiuq6BfIVpafGBo_ZX8e)1v(shpfN z&QgpL-fUCwN`+5TEn`ZMe(Y5Pz)x{n?tlh@&YJRyq4QImk@C@4(cAd?z96Bbx9XKzpM?gv--Qna zD14MQQV9y}w zi1W&@$3Vn6NK_0Wil#fKkgN+su&dqEotKs3jY5b^fJie`XCcIPJqd#l*z)oa;w;(_ z4POjGuwG|lfw1->2*GSGpF#&AOk{7-oyNmba_A94l%DRKp^{*XriZyKq#jmi5vDr_ zjx44EzP)Ur&Ot9Y`I#z*;0>O(TaP!^r>Qd&pl?Cp!Zom@^o_zBEhy!$h8g#9+Tp;A z-13C3yZ1nSswq%xZgvV(!tK9H+3g;W2A=}`2p2^j(8;QC#;JdZGp5#loC0Ny;NG_M z6zFHLwng`|cvwmfy&1RYiOl?%GAu7mgqE3AD?1&!Sy)%(%aftqKM3XjN~vDMsn9PW zMfX(bHhC)a2#X}801ZrhLRg0dYvK|Vg5Skb{NhCBWa^nHcP@*GE14d`1`c5w^CzV^ zm8LO&Oa!c$#>^xW-^2QyhRGMp2@#R&D}K=^5rx3E*t! zFUv~6asVXHG*T!(T7S1vUqOn}nl&q_fm$7d_sZn6NaV zeSNP^Aa6Pw4TtH+-~}aehCaR?#N79E_K(m+WPep|I{UU#U5uC$MJhD1|HSQS0p^aI zi90Ts%!V*o4{x?*E-|F_M;lR-py%U zrcDEd$TZ~@hsa{iNFH)j&o1Xz+INWT-5OR@A+mf{1_+UTSi_7eM3&2p@W_)c>TNHt zSn9H*o&#iaP=ouY@R1FWF>M2{(xgr7ejt%%O=FJ-$Z%RPCq71I3x^yY`_)z|M&Hj+ zkuZ#{ejvi^n%-6&zz%yMtptD8(BM zj(rb^G(jj59FwH{EjrlL&UGbcz)j1TeVei1{#9QiqtsOaD zI0bt!;MKs*dM6%xEv_32I}diY-AgJQOF(1ikiF?pJVDb(_yLqOQ76eE%ti~otP6ZU z0#>aV=R_x7xuX-WOIWBvy~p5&we)K{@Zj5q$gfqW&Dt^iHSENrz%wp!K4k`q!5kOT zk8h1Pgs@_+*=|%%;6k;|TjPzG5~Ed37NA8T6nIW@#qumzk`{&4IS4CNYn~Z~&={zX z67UP_1FPi+QPs1KTOiI=@mkyT_}9^Ri*>>QDMn`04%tnk@o3$eZqGt_8|TcR35(s} zj=(Y-aAg9zqh?`~kU!X#(2lBBv*y>~u1-ABj%F%X!P}GI{M_`9RVxVmplZXyIL`{8 z2awfT)QLAGl9x&uC8c!Yt(jjkMYvCZ1Bf>!B|>daUL*XP}uN5vR@+!XAq^n(fH1 zic9e-2h?ptz1?V4xk`dy$pw5-b0KeQ~K3TJ5@DJ<&jg+H9R@`Jn~- zK?Ehyl3G+f?u1T6RCZIf?u6#FhYg`zjx$pMvs(|131JN*d7Ts#x`EzC-c%oU;3b}C z;1di~5?TQ+%ZI+f((2IV>jHC*e?7P|-h%c9n$w&GMf9A86LoIgd{MlyWwokcC9tfs zSt9~lk5{Hm;2ljPKFf}xR=9J=4!9gnwdN!6TT^~83l?=c-bomMJFAh^fbNN)JJ!JU z%7vF)4)WX>%+xZ);}uc-%USVYye6vbF)NsItZ0VR0S;k@9W^|tY$7tJ!HVjU-8r}> z-U>R|sB+`v4XB1K)R2XEb2#6O%oA1HnYBIm2mM{``KbEq!-fflc6S@BIs`$TO1>vw ztDavoVG|gNc5BUs7j4y``x1KtDH9O_^|5vfs@MqJMNS0rPu#!)XpdiWnlqpS)GwTZ zjv{PNXKr&EsJotTCdRm$xFk@S#M^LPhF>3B`zO~8CX6P;!q-kuA37Xb{kz&kEZ{o%;a1{>yy| zKgb!r8OYs;A9wIGd|82u3Dw=pFbN|$yPTh47F!onYr3aGW|!pbG=7FD&RonL<$jHy zVXhDtGc&jk@H5=N>f$a}ve@0lCHC$fTt-CB_VP1acIVSTM21dGkL(Ks*MV$dPNUoqCW%nhzC0|MI1C0ZNY)tzew^?%Q zX_<@s?uk^16RcK3bV{mx7!rf10}k%=Y+3XdKqlbjYknI&F~ESD?|F&sz&Jm?mtKDm z^#8uj?clNC^?Km@K=nf~(xgJ}>{FN5@yo={*3oxqfL+g`iLI^Uctl+{g0A-T)c*rU CKv!@8 literal 0 HcmV?d00001 diff --git a/docs/.doctrees/cli/translate.doctree b/docs/.doctrees/cli/translate.doctree new file mode 100644 index 0000000000000000000000000000000000000000..3af6abe3135239f59d3d3f21a17b94c9ec57a3d4 GIT binary patch literal 51654 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 Xr-7k7hofpm3#TBetr2JSW~TlhnC1bD literal 0 HcmV?d00001 diff --git a/docs/.doctrees/environment.pickle b/docs/.doctrees/environment.pickle new file mode 100644 index 0000000000000000000000000000000000000000..81c5041e4d37f14dc1f2f8ba53a67fb96d54e79f GIT binary patch literal 286483 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 literal 0 HcmV?d00001 diff --git a/docs/.doctrees/honeybee_doe2.cli.doctree b/docs/.doctrees/honeybee_doe2.cli.doctree new file mode 100644 index 0000000000000000000000000000000000000000..54aa03c25a26b6f63464dc3d0d3672f856c3a3c8 GIT binary patch literal 4036 zcmcgv-D)Jq6_!?-k!GaPNNew6XIJ)^;8-S}85435954aj1eP7h55DqJ)O6QO)vCIy zQ&qhhT_hwI8&*(DLR@(PgKrFe0KbZ##$WZ{^o+d5CJ=#O>eQ*K^YfkWoc?>~zuydZ zia$3r85iklLgP49F*DvB#wyAamRkS0fBzr;ul~aIG`%t^*Aeq>2O1FQ+cIsm>o57FnUv<~Z;0E z{S8qS9~k#xY21vz6+*z@hTr@h1p4Rre;5Dn;s1U3#D7`%GA`Bm2QZ-n6MD$MN-~wF zaVw8yiun!#p(3kUJIB@Ds~+MH+*uu!#%ZJgS=6Ek{LDSLr7*FYrbbfB{69T)$0Chn z9Ki?df)uKgPLMl#vzIWX1K( zI<2(M(U!E8vHlu;O~!rzG{eUQVn&flEu3nQb4$L4PxjN`leFM70DN{_N2D=Z-Nw$V z@Xb%UYW++#n1A;83z!D4qBh?j#gNMgpP>o&lwo z5++$8Ay>k3Qny{aR~@MO@XQ@+mMLwCWX~AFdB^oRmCdr_&e#ey2=8oeYNd|r#B81~ zVgJb$)hVI~4b5l*Ne?NDSa2!WCsM?WuryLJw7l!(b}|0V*a-Z7xVcG~)=CqO(v;wH zzyQ8Q*1KUD`PMC+;ui1Dw|2I!;NQBF^3t^d_0fl$8(SycX>b62&~U^@!XfVllBUZX z0~Ep?V|@ob&b_8tq;yQs5E=M4jY4akxh|@40Ur?#5!YzoU3WrrtH@g9?g(IQ5a&ro z8ayJZg+QQr=#3i-ZV;Mn-U=&EBB4EcsGN-UT)P;M4Tbr4Wrc;Ow_}_w!CQ2_+PWOUl zVE{CVWeL)QX~i8vK7RMZUn8C;dJ%11A0+GRe^FnL%B2CXmrPFtvy0*lu)&nuMB=fY zrE`=}9EP1kcMd=%q^Zot0b)Rn3`5MRxlS!z5iXWo;veAMmnz`?*d!EH_Lm$bZ4ju} zigmdpQbn|!uiSaW(ZM35uPio1xd5z~l3ZCGNdUNVe882Qg&6p&@{VFT1)sti=_?ruoS4*`gA+oD-? z1E1m>0`h|(EPr3{ulZN}DPQt0`4_qCg&ljH!PGE(e|^KB-taGPa{f+OeudA6B?iJT zFrd7|sL(A9YY4s`{+k(*zib*^-8L~~8MIsf0!`-WXm@7^A0z+YF{eETv1j?!P$~3ekr5=(4>?U(18+aG0uWtz(?cTi8bJvx0~-5rpzez0!f=w$C*J{Mh8}1D literal 0 HcmV?d00001 diff --git a/docs/.doctrees/honeybee_doe2.cli.translate.doctree b/docs/.doctrees/honeybee_doe2.cli.translate.doctree new file mode 100644 index 0000000000000000000000000000000000000000..671f5d97bae6e7f854078c0661ebbabfc4548271 GIT binary patch literal 3250 zcmc&$TWecK5cW;7Wy`Xi8->KFlaR)tkyJ__N*Y>9A58@bp-(M`)j2Ee;yq_i_Y%tw zf#x9)!@gzv8~RiFxBBh5=|U3PrwRmTXJ>b2zWHW${%HOAS9h)WxdWXup3Md%NivyG z?cGiyW1G^<`1k(t8~@s$x{e|jT3QuT@7ACZGcFQEGyj`+y`XNm(1Ysywx+S+GHZ^r z7HhNZ-~1`-xR&8Y(1k7cfXR$rjw$^$N+kVy5DPvqiey?4Lr+qfSm=l2IKB0f&VpO> zLu;Qn^wyW&w{rqtjb}%$1NAC6w&~hcOe41?ct-umj)~hP#wb3v23UmHH+iB%oZGP= zT0@BMRz}kDYbUY!d@&~RxuTPxW8JnP)3D{)0lUq*><-&x$L__D$&?P2%`&Qn7gC)= zPy)~o@vp4lu5Lshh;^Ve0=s**VaIIEwRo1$*#f#H@a%I0!tMdW2lzk4{}KL=Lr}m) z@gkH{x0MsFfNhEScPF)9A293P{Zgy{DJ9k(8BZ+xlJyr5u>TE#B?CjSW7x1`kY7Fx z03n2IdLk#E^qAd6dcmO%*g&R=j znI9DnkdNjf!1Mzor_~5CsvL_|0KJIW+KJ1CRQF{TvqFl+TqPi@fmXU@Cf41g!YaNqLkrAo8qFqBrT(4k1&-!Xpb`#hTzI>bP(cexbioaa>J|fg)q$$#j9gdI zTq+X@`icV14Y$jPXqGK^L}wf*8e*)jm0GTq(6ODuTg2@`rr07$M>D(&4?-`Rm4yef}&rvgR8Oe?w~||;g(i$i+9H>J1bYP zH?CJ+I(MKxdS`iK<)k|d0pO|74EP8HFL1>6bN8+fPObwy*Tk|?1$Xah5$ z>5W`Fme~X`0uG+kY+!BIBi6`hE^-?jT-#4b0K zsZC@wO9Pt@=`5F;MvEs4io_;*#WgSadJrXCld%YaR9}t3LEGKLuOI|V;w`rD51nKf41X}LC7>}Dzgb7(s^LW zl{?gznIW@?@hKDdgS=Zp2HtmdN>F9LTa>g0P}hrfxr~I2Nd@h3%@U&OIoTj%kAOy@Ush zQUe<|V`!a6G$mX_7~n$FExbOeMlf(yOv;9K|Pj4o?|q6hIhGLI?y!odTMOmKlY5&FI)X)Vc^kt_58c=nEZ|D>VKOp7N2bE z_7}NVps^owFgU;ogi1+hF|}R^`=X@OLo&eCbSywSyNM4KS8Av^PADu@nMCK@52RwtuSR?~%;6{soE|a~0YG=3)*0mIj+X hxFp_d#03TScoqwr1jm0UrPW literal 0 HcmV?d00001 diff --git a/docs/.doctrees/honeybee_doe2.config.doctree b/docs/.doctrees/honeybee_doe2.config.doctree new file mode 100644 index 0000000000000000000000000000000000000000..1577344c8c442d02a3ea847e822f16b64c3fb0c3 GIT binary patch literal 3241 zcmcguTWcFf6t-hawtSK8+$h*iRZ1F%Mp7w#C~0UZrS!p6kP`aTu#9#`JA-$3wsW!N zhd}cXh+*C`eeK`r-|9CzyK7k_4~0^JVCT%4bDQrwbN=Z3`Pa@$^|O1bWW1P=6?My_{0|Ta*a;lnMCN$R&8+hd1phaIssc5F|_OyqPdO;J!ez7X;Zf{^mi zXS}pRxT+N`COMJ{89g|?Wu|P!c6gD{`9dK>joHV@fPI3ZeTx4>{2$@}*k^-+NM7Y| zV%JN;C8`;!{LP>VXwjduhhcm8-d)z6Xh#hDoDCO}P5)i8H!P3C)sM={r@jb?wnztJ z_Wt151Kb^u(Zf}fRFaY{)WZJwQzoV)8z`zZtf&Dgl0h(UB=P7}gH)VTS$H3s(Seqv zP+7G#D5Z$0Qlo&r`~Q`-8l9-t_W>G{DhcwzJM+c;jvcdaaqFv1kG>M9?A&Q2fu(k{xkzUZ+I};WqR_NRobCQfG6QJ04XZ1R zE{%2*wl}f8l!AFg3+b>(2zahZUShE=h0q9<&iLHf)v>eNA%qBi&!DhXFOAHw+SMYC zJmdW?I%UUG>eAWUGngrarVE>I?XK^Gg~_A&Ovv25wS5oiGKxj+yQ_l1!yusNYg7JCc?{>L{b<6y>~Sw;0LVWyc=SIY$*W(MB~&9otFh)TD6NzaSOh zp&=>BA?e{dV(L@!@$mvRi)ayx1hjCrXY_3N^-ytqAKl!HsFXrR47|!HI!V`u8f$0w zLgg2%bSf*(9xv@InP9JNKN!6ZpgDSUb7SeG-S-KAyo#Yd84_}KHzP%ANJ>%e1nXOP ztn3|0Vg%(#eF6`~rYSD~mRj;@A{TG}lDt+I>#dvE8?t2@rdb>PbwFjPTfK8DCg&EJe zc0cbwvi*{l5hy}IQM5%k+3}JoLF}Fv_9Lcssh*C<5G!ZVI=3mr!Q9q{efP-As_c zL_e*ZIY1_#(ggIqLM$Pd#=s zv=VR^NW?6`!3`a0B2$Xign8irK>=ABvmH>A_!;LFTHOt4n1djOwOPC9`hJQL3i1sv z4BzYpd#-HH3-o1)2wyq&;!3ek{J`=Y)6z4%=G_oL+sK>Iv3>E_GtxY1&6|Z$Na4A2 zZ~bHPHwLc%aRym@mW|zAL|c{rZp?vMUqI9(NPJUi^g^K*B|#762Rieq$XWnbs&|)! zt#Bx>LoI)Y>wDvV v0evxlp%Gv>RzPfU*mk}f;_X&kfo_`@ab^+^^3>yPEAh>_?qh!ZFw@aL6>I&0 literal 0 HcmV?d00001 diff --git a/docs/.doctrees/honeybee_doe2.construction.doctree b/docs/.doctrees/honeybee_doe2.construction.doctree new file mode 100644 index 0000000000000000000000000000000000000000..097faaac00a96ae4a79493664a8a13ad94d641df GIT binary patch literal 14715 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 literal 0 HcmV?d00001 diff --git a/docs/.doctrees/honeybee_doe2.grouping.doctree b/docs/.doctrees/honeybee_doe2.grouping.doctree new file mode 100644 index 0000000000000000000000000000000000000000..cf87896b8aabdaa754305245f8d0b4be88591ad2 GIT binary patch literal 17712 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 F|1bM}n|=TQ literal 0 HcmV?d00001 diff --git a/docs/.doctrees/honeybee_doe2.load.doctree b/docs/.doctrees/honeybee_doe2.load.doctree new file mode 100644 index 0000000000000000000000000000000000000000..cac96d692f644add449aebbb4fbc8d08610b0beb GIT binary patch literal 33953 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 b{cd+!wMMs2>t&Hl7d2bq=OdRWG&1{tQ6m*q literal 0 HcmV?d00001 diff --git a/docs/.doctrees/honeybee_doe2.programtype.doctree b/docs/.doctrees/honeybee_doe2.programtype.doctree new file mode 100644 index 0000000000000000000000000000000000000000..731b5bed565c829e7394e1d19b1ea48e261870aa GIT binary patch literal 15933 zcmds8-E$nraR*4^TajJ1ELlcLkjSD8q6pezRB|?Zdvlmw z?CqZSg9Kt*rd5%PNG4UWwf;)UdCzmI;_{e)^qq9+ zTj@8_hNy+s^(aU}o26m`5H@$bcF6qnE2)?#@YwO9<-Gq)#O&A!{GvOb;?sQQD`|t* z#8m9W9@9RFCwSnq-4WsceuCN_Ks_Zf`w9DIR zhWT{Q0-kZo7ex)g`NH^NF`chxT^#WopQY@lFXpJ+rXGIYj z@jT^Q-Rx<$o%G6=mSt~;tV1w~n2D_|`jqkoeu~fW$M|7>T5PQFpvzXm#P?aaay}R(EkE+CI0&QVO!`ia z4xfu2*1nqYeO)4A4dn%q>IHt9e;(YNR3roD%h~Qz+h=J1eqK&TAPhE*_*}jula^%0 zf$8|Y#*)!+{G5lwNw<`W;S5$gR3A4zkm=dNA)QB{SZs~>N*_!>d*F*1IoK_6680&E zKR5_~z3rS4U3X%en{CIApI^sLT9V9aV8%H)E-5wIg-Vg}De)1-_IpdIwEYhvB=n}E;8cRtg9LNI8Rma;O`1U!N z&5%&3Z)%dhgT#G6XHPD2YX2Pgtt97-Dss*eIWt<$(!~48$iK$FPBeS7q#6GP?I(%t z35hMKfi8<#=s8fGnoK;dqrG3M3Zcq`wHQVpVoo0-Tk=H4cM@)MkWdGJpA`L#C29V8 zIBCSBpIW*&5e?o24StB@Y^cIe#QHt}zY7BWKq(q=d~iqQYyWWpaa4m)tnF(n@&3th zy!qc8i1pt}ZY@e~5!r$s3rP#>l%9NEO^c^;vR@9LOiTv*iS!Gsou;daX~&lqfF=+} zNSUZf9_NxpTHY&%e z0mY+Tpx~IaDzlJQyh7^bbbpEIa>b%H36RU|K$uv|*Bo};hB26m1@&lJzRmj>aXSN} z24g6;!Yvl3;*6PD76aytey+o?LI%$ryD&L1!Qc9J z3OkcpGi~*dt`>?jSR!xZ#FrWhi}+&_DJlEexn&1_tQ+9U1ZeOt6dQ5l^vOX+*IVGcxr{Gv{s(TkIS66cI=o z!Xp|);zM-k@l)<2IsQ^<)H@FI+S#5e6^F8G;OEHin%*iu=#kJlcYsvv~LdYotz0$WwQJ_fkkdtINO9 zY#OVD(b;5hg0^=1L>JoA@f{M|%orm}Zr;Nrq2-w{`2&ATn{D90lwRV{Q`G&#vB>sX zMz&4-0l7|!DdX0ScZ~A9ap{XL&45`NeQ_l>2glJ=*nrDM2gM6u<%Yy*_~{NfcRfS@ zq6Bp>;g8ZAx!NvRboC}aYG=A+l5Ye(sXRPgjlkIEQhRK(T{y4p$gm;<&ymrH5}V_# zzOi;`YD0`c#wE)qs0u8Hwlp;Tk0+&#+ijzatI?>Z#gPwZ7X8N8K~0EnP-iU zZC+@c+3Z@LXI$!Zj7zqC=A3b6b7S?zHF_Ap`^?hW<@#oi*-mGd+)T@dR_!IRP7TgN zX4v=w+?0ZCC5Vd{NiWy0^-{kY9ju*Z&o_khGeJN*3?lp?kBoV_(7RVPe!-O}ogAeY z`r1ladJFw@nXHzPT*Ti*r-MbDzUag8lUM%&O{>2P(sAp?52bwEy74Ya$gLYc&SV7d zeNuuC=dktPm6D=f2BZbeOSf+P=>AAd$^Aig-CmP?O|rgPO8PWO<&f?Ll9yBN%Oi~X zQU*$=Qqrm(btMBmCqdm$;7`9QYq+1%+QiIdhCqT}oT0^gNvNOFh@%=J>Hz&a>Qo${ z?wU5|ph^}0iY=n)u-ofRV?d$?^yboXeV>xlCqRgERP|WT)uZu#)uU2HzxjW#)_bwp zHB;ap#*rs^g#QvfsvLAW!t*UcayQl%soqV$Pq>!0EI+-^aoTTnxF=<&%u6}AM?)Oy z?IM2FN&GDKKj37wgRbTHsrzpjNzA|zqnKps{+eE8L`Q%3gJu@Z-V-x^pdRN{GYrQ# z+)ekyT>eqLF9IU>oT36~!4FiMf}@dWzKF#!PWQ|w{v)XoC{~}7ansK&Jc5 z2(bLuD*iQuB)?H4$P|SgC+NwcCwl#M>OM$Ad}NrYHkMS>st_UId>ma#aV9PI zVRY}Oo*u1wMUPfxb7&r%W-Q6*l?+j34xMzI;1n9t0x#}p?%H_e1`G1Fr~{zVE~X2+ z51rBhL%fn9AK%ZA+ndjN$SK$3dQ(ZQKOKi!%833JbsEixzIqhsYr>evB{WI7y;=Rc z6poPgcH@pi13wyzU3qBWd+2m>;*{hFjkCBx_vLN zKtAYcON##UI24sa@{f|8)s)XYNuvB%LQ*NBZth8{14o^j)txd=vM?JC?o{ney8i)1 z1qQ#8zdaQB|CM1P38_gQor)!qBl2(X&FcQ8rry}P#rG!J(7 zN{sfodkg4v7u`L=A#?X!dZJh5?maq0P&IE)Nf4ZiMf4oW+k5$adwZ{6T3;)iy}LDB zxx0G#O4I?=uY(2?s>s*-kf|GRqg!(0-nx2kk3%fw>b*ssMziy-9>dwJ3E~~Odgs?x zuQac$eQ|>>pXvVOrM1lqudFw-c51lvr7N2kURrCeUbx(R`PECW-KVSP^YPYZ-0Qo2 z?!%q#p5Ldl_g7;vEO++4k4^_Wd-P?%*`wgm*v?+xGVe2sM)LMDR;gRxzANCqwWteV z?M`TrW|d~KwB+BB^siJz%H5;AHKHZ|O$mBe+`V56h(R@~xx4ps>NJ`f5b<4h_XhpF z^Iu+l(b(LLkh4Ty-|H~ZOQ-MtOkSQyzZ!?SQegf`vbLHFx$8$<7)xL(#Z|d}>Ht!Q zXmzLD^;0&)!JS5N{occ3GS_e7h;sep)BAJ%O6(i_IZ>vmQDF{J`HP~YW}Yz0R7p(< zyRW1`6);(geES=2nusg|tvNzCSVp(y`aq$(*{&(%S`9U?95R7`)F(wUrM^T54d2&1gx4pUfdMnUCCRx_1_}BxY2oAn?$n1)Ks*2Od>Ss@V{ z6mi;0AdpTyZzWWiR5Xc0$N)#(MAGe zlcJ8YB=96XVG@+?5Da)jqqV{EqbQs#UN26HMVXWDF@Fn!=s8^{PQQ5kteEeyo{3$8 zltLeoNK7(EEiGg)nzS{%8Rer)ZS+}YwD{zHC`c$CB|=41_onHNFaMEOBk6JdIRZRMmr zZF8hW+hAX|-#}$aLO^dPJxoF6r?RFrR|9*Hp1^ke4rCzL3nxfXL`iD^%;}QsdV!T~ zMk)i{P9ZYg7HeY%?*aqPP`$7x92^*WhO+Y^VG ze~rpX#cZZcuzewkNMmuZH)1oZiI8%$2&5ocG1M)j2FcH)&BcknR!S3>%^0myyiAiy zMQtj;XQ(lIc58GXPU9yMHENbwE&!4r_9FfSszK#nRj6>)S zF-lD%9D(UgoGtFxF&CWU`%>K5S1b7jXY!U@-lDq{KyfL+l89rvcuImDvmFRIQ5;0f zT1X2ixQsJ;O9qFUS%`DD6?lcjOV9@g8Vl%J--tCetL${5Z+sjmVVpueJTy2~{srec zbfg_5q{ncG+5wXDWug^M$(a}P_IJSPx6{km?;9 literal 0 HcmV?d00001 diff --git a/docs/.doctrees/honeybee_doe2.properties.doctree b/docs/.doctrees/honeybee_doe2.properties.doctree new file mode 100644 index 0000000000000000000000000000000000000000..d0ba5cbfb246946450c271a78aa044be65651fef GIT binary patch literal 4088 zcmc&%UvFbI7H_9b+N5pL4h-7WOoz^{Sc)JCTJeBDTCK!mMG&ysC(xC1uM>OgYhP^N zY5IT!53Ht=rO|@-8zAw5#24DHu-}27@82Y&Ab6rurTE-q`~3Nx-#PxO^WXmucZxqZ zG#TS^IVMRWRYHw-hlz^wluGNr^KX3Zzx0=`r^$^`xsIuKJJ5(37m23Qf9~BNs9P?~ zxY~bUXl%KX&34vdU3T!fzhphvvD^x}^2t46O48dIrJqHKqJJG{T4hvQPR&I|;%l;? zK5WL`{eRG9Fsj|MvvtcizO=lX5!h)xJ99lKSB|kg*RA}Sx_!YV_0xPtT%TC0`7F1H zL-2c#CnorK5DQ`qg!tW&BrSg(CVAE_W-wOMdC;}8kq)qP=Nc^TRJ_ zwCVG|K7HQ;*Z%=c?AFm)1?DAt?uJ!_8}!fypw*`qSY(xmHc<*-tU$hrP~qvQ^>kGC zm9`KX-A$@#de93O@2wybB)pw6n^wc#axYs=q!A=gNCb-(nwqlJbgZ&Olsr-C6ts~C zVC}j=oa@lYqNZ&f*OIb*xkE#(1vb#Z&zhDz*F{Ap-gW;;L=IYOdU{voHp{J_vf|BYcYls!q_TA7<1=>>Mg?$Ww45uQ`e$ws@SR0yC1C(DIPhU9p@J5Y=!RPs)$JJf zRU4}QJaxyKW=h*g(5GPjt9!1`h-j7_cSe^eCwOObQ!8~`C!w=^f$Ii0L`y^w8k&+6 zk{(hP)8JCDk4wZXqB2$qw7l!(c0PJ{WH^35TK^bPt(A@#k%<6b0|xLdw%!fP$giBz zDNgb3eB;Z;5$u0%P#)SEP;Y&-{$XRMI}Hv1c!nW90uFh1B8Xh%n6D7-1nYa~VeTbO zW2KV_4Ud9fWgMF9)OAstbNGmG@T5iq>$(BSt%_QayT^gGlO#{GsKFzmS_n9rgO)^u z1BZpAsD_aGR+JfGl!4x@w{G84g(%F2VfPEd2l zaK@lAilW1zCzV=M_j&h9_=QVMm^)FJREE;WBy0cJhfQ?)Lg@UKt`VUWE zcY};(5lRHDUdBbhj)P=IV0)+wj55|{=Do=TVgo9-VBxXS3zXA?pjj9I&B)Re>9I)1 zA>^ai-hK!19O!wxaeR=p$N!~19+gW1UazShb86?s9bkhAv#G#kJxgXNp(G45hwdDJ zOrxeU8wVl-hNKu$PR*^fWEnBOU;_UD@4iq0_s1qBsIo6|l(a#hUMkk*G7>5#piBYkDDA<9JvvHLpDa7B1N6oXO40hpp7;c^ZPRHSe}umt9p4KJ`)+AiL-6%$ zpqT;L^QPa`O%y|vLG$&`&}9Dgr`??$JW_to!DV$u$lb{*GK*N9#2okz!AAT_Ng$wF zuT09Sq|`&IfaG+hL<9Ch_2ms=qupCOu~*+(Y`VX8J{pO(9?bAy^Q`I%=6=v)jE50w z0L?R2LI6ha0p0Q7gG&A#GW?DI1f`Cl4Wxk=rUAOk3mcYP6CX9=0-#6L+XDr$2-xf= OfygV)3!_Rt8~+R*5jtN0 literal 0 HcmV?d00001 diff --git a/docs/.doctrees/honeybee_doe2.properties.model.doctree b/docs/.doctrees/honeybee_doe2.properties.model.doctree new file mode 100644 index 0000000000000000000000000000000000000000..151a90c309dfe2720ae3b42655a2a068bd787a96 GIT binary patch literal 15013 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 literal 0 HcmV?d00001 diff --git a/docs/.doctrees/honeybee_doe2.properties.room.doctree b/docs/.doctrees/honeybee_doe2.properties.room.doctree new file mode 100644 index 0000000000000000000000000000000000000000..39d69fb9157fb49c8e215d6783ec9871a0dde12c GIT binary patch literal 63408 zcmeHw3zQsJd8S@7qiMY?+bGzwnJOT-L!R*GnY}R{r4`d&Q_1T4m4QI`sc=vE1oONs< zyW#Bj-$&i5+f~(7-6Lrn;NVep)qVc&|G)pe_u-KbeCj7F*#Ck}?Ur3@E=-x#YSXP+ z?QXEP>Q*`ptLb+i@9ud=_o41YFz%W2ZMWl9tZuLZB`S8UUiGYI_e3|?NX7kHy*(xB zkF~9eUvrybb$i4fwZ~3$C+zWH#IN~vEAlD0+;*GR;*4e8U#_~=)l)6cZCRdQv)WUh z>o$yrTkW6*HGukS?y?qWV5-`R%xb^Wb0iT zJ=&QugOcg{UTvo110FR0)wODy<~mlXo9#AU;(4TLHu%%pYNw@s%$Svvo;6ElI>DH4 z&e5l?y~*BcueUF;SKHfyyY|^`!`kO{noY~wH}85U@qz z`{7lc8GA)AQfpSNg$Rr}`0YzE6?+H3xC{SXj{kP!zdbZ9K*j^WG31G0P0Or#fG>yp z4Tc<9V#nR!GG1;nyO=$C)bE-d`&aGB2pkrR!6DYgK1C<{h)$+ji~9*sm`HQZaA*6B z+ujaDgPz7g7v`L2w(JPJf-T31@(#T5;N;cDF-4D@2)Cqu7Q}`bPIF8jW!;#mkSBn= z&faF<1l+BZfWf$?INwReNv$8p+-Mt92de}((C`m{kkr_X2}Zg`t(gs&J>B5S7@T!} zoa$}6n}}ULcaY;6NR>(ix>6Xdfat)Na=Qi=@jG5jDtxTBn+e-(`+E&AASzhZ@@(Cm zf9+B5&0d2Z%a9snFu5t-HEK;(r0kiHM*2&wu-z~hdP}!kX2mME-1_32+bqvnU|Qc> zWKHd1v@n6`ZDNx!n@!iJj-p~Oxca^ucli)l`;FZU{JU@3YuqR&U1rViH^L&u?wf7` zM>0vdB^Y5fx{9VwMrjHihtT5vQ3KB+N(JZsErY0P}UYpL7xv3@jhtmm__lI#UbSzf&c{S`q#u$)+3aHM3oaL~~K zub}~RxUS$RB(YZ3kr64jCE!04!2e}Bz=M^|UhaGvko_vGl~nGO&n;4j`5^A z`(Npu1uNZNQ2n*&Zaf&RHJOX7pz>dB7Kg@sB<=< z60rAtNG!>Ca&}}l{z4C308z5>pN5TRA;{U6*@d$PpJTmbBSv&S2yQM&FgSXUvoT&s zVn=_i&~tm{^it4s0G0Bf=kDyrlhGp@&xxLDW*3Fg!#f`YJzGM^$4tK-3~lZyCy|u! zMd9h8%z38ZX)!0B-ksfeGM+@^Iq~#QGP@{@C*JuWc)Bpj6z{>(CasjjQO|pYp)Y36 zFa<-O&xxV0WjCITA<=kF4E=}9E(&9acRmP)wr03RJ&4+pTv*~O?XyDL^O@65LEHCp zqV2`(#*@(|8qbNg)vL1fYhkqU&U2$JyI^op1LjMuOcqf&v}^Gbwk$JM{tTvyaN?w+ z0sYAXhHz`APSvdW3ZjPHV3T|-o6U+HGvfM1pT-d_^G$Eg^1H#S$~>H;#k=%i52A0V zRI7IFCxTHtA@I`;wq<&4=|@AfGE_8S-yGUa7u{kaR=MBUkI)$NDEB|Wr}Kbd(=EZ6D57j@=YU4A zh%~HkS{ed zA?ifj((!2yEOhBi(<7%*MS;8Y5UMfjddBS{)@@K|VoIulTxAuxyhZe9Z_62EU7nDR zfNeY|&DN}XmCIk{pbGhkwG;L^!ca1j8rIa~4W(l;!qS#tj=oaR{9qAiI$bKg)p;NN zv(4TM3LtkQ9L0=VUF;bpKChdB47B{@`O)IgIBA|T zi;MBQ^StgBcMi6gDqY0Ow2lLSDGf%p&N`38kc>Wc=}o>(;BKq$xx z%lsxJMu`fO#4u{@a1p@pU94=(Hug*zciDJvwS992R0Nb0-VHc&wMM65n02fWSk;o~ zO!hKm97SA)6AKkLD}KkU%OO$7#Auj{#*Agu$w2X@j6<^}zU1IjccIN>%-8C514{r@ zcHXP`P|jFu!RV;jLr0HI850M1v}iy2Y+8E+6*^BvAQ))TH9>ybTZQ502p4QgF^3Fv z1Reer!(0*_(wAs+_Lh6bfx>Cyml)$1Q;^p|)t|S%!@#~&ycK*Y7SAipSiZ~HiTKJu zJjCcUYd-NEv@t7ANIyB1&b}uM7O7W#7qWIW6q>@UFR<2teC(&$p3W^^? zrDVxVU*Z%We4-G!pBp$TI@Bl7pAOeBU}VFsfQ(-Y0TD*b*h*`R7H2Gf-hwE+(lDD< z06KN3X!hARv5ijBgt$`2@1cG zAvH;+(-)1xUkWMw7YjQI#yU{?bIl|Ja5gUTb4~Dk$TBh*9pf5ul4912G>S-6w;$|4 zM1zxHY`C+fWTDNBA+nR2Fn!>MBf+9}3YH0s8E{RzWmRgkiL$ zR7q|dCn1b3m?Ghe!r2Lpkh5_i_~PDFzMwA}UwkvrGki_{0VF>o z{92{du*@cXCH(+b!K}c6qzD)J6VwmW6X=r}NZ=o^h*{S-qqNl4f6wBD;ESI33ajtZ z$T$~Q{8lPg&=-v>eiCxUFBpOpkaei^XPvh%E$h4stdqQs!Z-+)P>T#Ac&>=N*FdvA z9&bbL+BFA6JY=siZ`Ud|6X7Mes2#GVK6&+o+i6yrT*&9Nr>$WL?oIow=<5p_*X3g3&!#dleTg&iJ#}*9 ze@Q09Bxi?A6moTJ^cNm~TvT{uHtBqtqB>ihKgGJ1G8_-&QsyuWk>i}~W8Slki6$utNvgz-CW^G07t ziyZGXa|LgbrEsYv7SymmfsBP{AbDM6crv^Zd#6a{C5>^j<-p%k>21zwg6{Ui+kxUA zGr|GP5ayI{jSPjyXPwWWLOf(U5ewr+L*HR6*V(uR-SDM5JsN%rpvtoh}SHhcl&GB2+7BB6^TRL&=?LCVELVmERb2DmyW#UoSirs+BaA1lLrX zjiY9hP*_c+OXnL$#77^U6%I z9Lb1Cv&Gotv9Bk&ok()ThXBv_+XSTt9FBxSFj`(rto9pax_QB zYiMS%T3nr^cTA%BM?FgD2TTcNtFHguQ%f2L2-6R=_sM>9aNsWYPPX}LVvm8XLVP=2 z;-7JGC|swRRYWFP(0FrWIn&1gzqny9>JU*H7wUwqghSU+3 z^5tAYKiR&f=9M_Fe(q>appb`*M?BQ(0R ztUo3T(RsQ?QPb$rDA!?HORQ1eiYB>6`E5KUYm_X`k~(Hzq1i{Yjzkquem!B0WveD= zooEjAb<->@O^Hk%*fv>AJ8rQVBu6O>?=6N&t%Fuq)E|hEO7)g$SyOc7#ojU(7gQBO_{%oLGdE;KcjTRNu)nV`suvp8BPIsz{5nZ#l(1W215AjB`b{S-Co_ z8+`6%U{*%(sN0r>+h@mmo`XZ{|7tWDY9FKn?@n7 zC=J~zMa*&J0kd=vvG1qR!QP-s$D_mE&>T`-XtxE+J|>)>v=-agmr)AaGgt-uWCt<}SI0?eJlG&NZ_U)*%E`z&cktidQrbCv=beXMfArvi z$=mLD07BQl1Xh*3ITz$DG5K-O<(}R&$y-o6@e$*>(Kq<7BuwI?Is)$M+INZIgtxHbz*v z411}6qy&#w>TlT3V*uQ+U!W&u*t4f|XV@Ra8J4tf!ncMq;rACd;lqxHFxG!H!NLmL zooHI~Wm4&}gZq??J|32o+!cAFB-i_hYEsi&vhD8ogmr@tE-Sk`GIia;-Vg&D2aO8j zCVZW+RX}&GtSmvQUMPtEaR`+Hf!$A{5~3D;kDmH+cH_xMdx*w!9_{f=W*3Ez_TZhz zWl7W;jE1Z~#-NaHIa1kp$Xb!0^HCc2S@wZ0$>Pv-Z%2)~$J==Xvshwp=Lcw#dpj@S zDcReJ$Oh@xY|oloB>pVn4u$h5p&(EE`Qq0jL)(N=+G0C*BBpK_W6mm~nC<_H9;MDo zryX**D2}|GB^5yUQw72^8a6&}EKBZ38I)`baWujPs+2QqyeMU**bZaO^Mv^vCmEDv zPCoNqB3=>OoD07sl}a9T>B z@)eCY3FTP4UIP*jvdHJY=ncR9qJ~F zH>CN4gQXoW>|mK`sSs5%K`r8DM85H?y>azMLHqG=YDq?Mwws~A;=G@l(M|diEzxlL zVRrdMw(^wCI&cqM0{WvutzGu4v{a!jRyD6%j-i(Qd`?YV4u0jmlL)Fkcn z5(1kI9AY+OVG$wGRL_*oy9+@=nCQDuDcMA)FEJxvOK|&iG^b^lxhcZeyGa+U()u>o zkhAeDPUhIgipF-0^&swQw)V#kmm}QdKTa-wkXP10|IRTDmf3?BsJVj;KIw=T`l6xc z3ZAW#YxD~EdPDtze~1k#d;BrrXErIfs$QI{joy21#Aa%&Fj1;D)`E8TvheP`rJb?;r|IiYu^oI_Yf$n1s{PlX!t!!EYfqKv zI+V82RhG?I<4WEsg^F)^h}N&d0|~?_1WE{&e{+BpmyIp;#VJ_^$Aw@~KP zK*OgU2YJ>**Y#R83OoZ|&t0F@O$~9fXI~Ciz*$<@^o+gqQ zaNX;xVcp<;%WB<=Pq@cFRzT9%yGr^e<$(5l+7d)xDM&sWLL#dJ2c7t&{gAUekf-i>4ILAGNXw1 zDFF=``(=W8o@F3phU56Q$m$P{b;F6pSQ!FC8 zkQ@_pK}z5mbuce20yF7gUP6_!9Lz|D+zBOU_ z{K{39=T^lb+PH)P2PV6?Je84+B|L#dH!>=$lrv?=5bh^b-44XOfLP+qn^L2q8G98*)*OR)rfPX*$`Y(uOS8b)-m1 zuGHTSJBjgeJFHGm%noBu=gtm8?N zN?r>HnM9glNvj-^@zgN{65_BQ-bTRBV~OoL&iONLj8#0hO=nXxiVKagTxAt`ep8G= zitadHYx17iW6PI?0n-1dKzc?^vgeC{O`2r?lPcvj$?jlSO|iy~kr>ATvWx)urU2S# zAd+_|4~Nd%6trhm6D_blV(b4EnxL?|eu_%Tb{Bn#st?#*w4w$`=u#B440bna}eTRghP ze8{NRtBadjtk)qdt%Nh3ro>dREufBD1aNY6d#{1>ap!8yUbAbI7nW9+{HbXA2rv}o znmDay8(oLOy20bi%jgnd*KMu~5@5za6U`VIVTCxvA|_bmEle=}OM$T(f}(&4_5dp7 zHNoy@Wur+Wgm`_FYt&05jj$hTjBg!ej0?kzag>v#KFZi@x-*XvZ^R?-4l>gB79MH3 zFziilQMB&dN25E-25nOOO|W)qZi^ank3D+;Q&?hq_Mf3iZqNP&o|5fZDSo6mn{;59 z6x89NS`yqay>27O=dosQKF%aS%$S|QE=;3hc|LAKL_i6`6L$j9nb_<$2{03jGI3fA zP2J%eQvCOIF?y+1vlO=QOQ@7=3)7dVR);OTqyMlKsp|F9C8f+) zd4Y{3lcePxdp~AHv-4FhBi%)=31eh}FMGi*N|J%%L^x+^z+LO&V96e?fbylNlniD1 zqCpuBy2ye`8m|JdUbR1fFJZ&T9n@Oq->^_EBEU{zvb2P~vyV3P& zj$MSirEizCdpKl`NZN>mJ6wuS5DN0RcSnx*x_1@0a=4_VLZ_z8*KqI+401AE=3TE| zHSW2WuVEOyUSR0!Epe;LGS~>XMNN^om`if}me(HT5N&eX!#XjcGo6*Ps|etv?`Ke@ zrS<)`_4BSK%I1O|8S!qDA|j#Sa4UL{>>N)PYVtouybl^)); ztZ24}xBMKCISq>0Qx!<5u&DyzBgS(NKW;>f8~UOl<;*%DdWZc{`T!ez_B@48$x)iw zq;x>8%F(KDK!{g!Iw0F}v??4BDV~yj2~FP0MK7s*k}LIhKt6-$<{gUaZq09FL?^!1+XGaY450Nv|X2*rO5AKhOFWzm(j22FQtWWt{l4 zU5>AXb%XaWtMx81<(}oP1c3E89izNZ&l*kiHLQ8@QvvcjAutN~9sd=T^70g{jQhh2l;vS#spJN6~>{DF_WOASCCOjoCmI=`% z{i&psHZB%b;+KRqaQ3ty_r7PzUUMfYiQbhm&hTOrIPO^G5#SbuOGA%opt?$g+?Gkw znx1BfVarwQ0^qlb$((7Q=)NLAlRnWsRB35_qJx4!*q-8Mr!iw;F-&d*r?dZUcOIwE z;*{A)-dNjqJMhM_RKQ3#Ic-ep8o5%?qk2vi0)a5pJyc5ep6E-|B!Dr0LwGy*08>%~ zuD6^nLZy@CvQfs35{(h0lT~L$vz@H>+GOfBznI6O}M=zRdP8e-_qVw!qcyr`#Ba7b&BXU~Tw9LG;3nSrARxV0<1bfe!k*ZacFZPj=lzNWoPfAm?A=F9gX`eJ8wyjj^wgb_f3tt$9;PNJhjB`+nWFu z?!J}rl?jvbLL45&OF|eVx^R)LwR?|Se#dJfRSM=B-Q5`Zb-fxJkRsd6A|88p4dKqH(Xls^?QeJGQdvQ=d_th>xMAIM4T(bz&)JE_?@e@GKO%Q84A-CWEoRRpUc z_lV%fFoh)+!B3+}E`t9Jo{~kdBseL7Gl`eP72V-1!3}ZsK7xFne1xm$H1l4o61V;s zboI`}VQUd-2vzLUx!bIFthR84;hzprQ?bv#7vswkeAe2i;Bu_b0p z5dK#1daek(Wa#XBR4FTT7SY7dOdCG#8$r@ZjSeNBcMYpu`pP0P|i6OQnN^GmW9%w%_n!WJRmPPAS(>hs)X3mG^Sv?eiN5fxn+Tb?Fd+J zEh_i3$yfj>#0b?IVYT9rubwpujj-KW>~u?Tb~;mty=+j#(qVT-VZ>4`j@Y=R9d#L< zC)YsbuAF4IPJJ58s5q7ALUC$(6EfcYV{mmp$`e6G62!Xw9~~7r4v*1bwmRR<(W(eC zO06ULCUeNrF_DHra;5%G$pb(OcS=lpVonKr8p0_Nw)>P6SKyh2DRkXtakSV3cNWu6g%0|m?)a|A$`upJ>B4@qLrs&ou|4d!H1Vs)`d3ceqqN1 z15uwh{Ggoe=2g+iRdk@yiN|B_rw`kJD?tAIMJGB~`!~byNr3cha7O%ZKNL=rb7~xp*}kp1DT(#OTca3(Z z)uL-wYo0-84;vnxX-`HTmHAD&Ds=)EV=BLE*k%-7pA-X^x*(3%sL16yZ=2Jm8ayEO zXW^_ft4X~hfdqZa8%Ya@Db}~5BjES1e*>Lz?emxP#Iz548bbT1@eCXiI}|%K`fO{U zSm!Sn4Wtcv5Dla?appD9Ukj3#{L)_o{Ya~!u}ZQAqHgkPpy$F4mYD|9ki#R25e=k$ z7aA!3R!OSW=W!7$As>fhwgyrla#m3@x(50#KzJ53P<(1!1N{odlcIs*#ia&%B`Qb_ zBqsw6^gTfZ{gzt}70^I9rQYZ?ktu_bKpC01YlSHyx+YmEqa|!nVf)fdY)7?%)JuOw z0N{G*5>dIIYbKH|B9BT-z;K%B=EA;_ z)_uBe`u%0)9rX;mpLW{W8$h4xY2?i7r(f6jroVo=SE~`1t9G(}qHgl)rz2qp!E(p3 z<|A!NLLinsdfqF!)eI+F+)q+~avIc(uBBd&mrJar@=z_;Q@@4Ill4>&G^D0_C#pzI zB_{+;^#+<-4qxf8rm5f*)m*ml0H>&d14qP33g5l&dRb00oc^&2r zENPnx>yL^lCEF%R+UgM1;M(eULwIPc7m0TPjM9se;Dff}jSQr%K8{Ygw)zA;F>S@3 zhS65xcm~#1&@WhA8Y+BO{BjR|RpIDSziSe?PJ%|KDH6-_M3&hV8GNk$lu^ z*Fb+R$XW72e+~4ERzqWhWDP{!H^gYHEose|OCpo0vWUk)8~yXMXSDa?Zj7kwz&)_$;q zC>xf3T$W;$8FyQ{1{Ka95R=KTxh|y|TyvcWA)&EfT;WO0B>@M`#Tyw&bIqeu?#L|A z6VqJmX&B8Fj%Q%a^@fn=xZ66EOY^$H)fVeLU1xn{dFm`N>V66<=^~#v+(lCN8BI!f zzaV?bGyNT&4{J3vc1hM&)J~5ny_;s1Lp>eQ)DwA2Kt?1rfyLLr znK*cyF4dX!aGnhvZHx=kMH)j`B6OjaxK)MsZ-{A0rqfs`u5p-)^(fWgit68mFv+YY z6_o@b6cuk|AVu{YI^~M$`}D*V6?+;+QHA3fSWz8MzUz26KkM~{6;|>n(iPVe%Sv&j zjlQ1(+mqmNrL}eD-LAhEY$187zakqsp9>dRLu038MMmA^Rb)R4hZMX_Fs>=IEg9&9 zVoUq11l`4%AkI#EP|$NOqGogj_X421#0steMRP?rg@Gk2x-{5Gg|`nirNWcbgTi}B zkW9Zsi0O#JGjZIDS3{zmZ`O_5%!-A>rjABa}k2Zgyq3s8v z(IS;uN?GF~oqeQIN5X42A)oNRaQOF!!)H%}4BuWaMWGtSgneUhnN*0ARqSw{RKey+ z4_l)q8*a5zw=g=9=B~<@sr-~GkL$CrOE#QR{x$3eyQ?%@?dNtUsy_}L-0TN!Mu zbUY7v_+`=7(O|uNgT+^?do)-J4x$))yBln-x|NP!tGB0cE)R}6ZdP%XCErijeZ0%l z{&AO5$8UA~?ooTw(O`VeYFe;2T@NjdS7CVK2IWQzKh^;VK89+|))uiD(6cPr%?vvQKYVkjfDcVMv_oKImE+E5nx_(-s!jeA~kB2;++3Al~! zBf&=6hVhX%LuH*$AenfA+-8G&I#0{Rmbh~n6b^*D#e_55<(I%NTztAdhk z*2AA8!Defr1}Ng{jZRw@8VN?K7H*hEdmHCXuL&rk1TwH1cry-kR4kejjSoAqJAT<} zR@^E|b%XJaKRbE-Br=P;!6osJWy|wiuWVy8UET740U9c568jM!l<}9WOh}5c*Aneg#quHVTzTvB2RSo2}q1tJ*${|StuCi(HG)^#zTax^-?tC1 z+f%JYA7X0C_2$4)ub`4_04Q1Ztp?EJ108Gee)94wuLV3edb1U+d3vLof0b+=%xe3J|GbG*?yyr&c=On23%D2?e5{V!8XujqZ~44IDsV>jh zo3pW9)CT>osk=n_>)Q&a&IKKhP41}nC zveQBr8!{TX#*)jBA)k0?FWrxhgn# z5hJiI%SRutz-jO1$+FcjYxS~Ot&-ejquxv{6UN(CeU{6#)4^)1d8!Kq9jxWj1ndh+ ztTp*H^JU-k<}9C0ZZif2%JLy@(MHvpC21aqhYB2Kw`J`m=fze;%Pf@1Z}9 zG5qo9&y#EM=d1LGZeVukhGvKEu5;*aJBKbiaOg4whmPoU=m<}TPJ40aG#G~t9dPJS z0=7MdZ8LHxP1&JbW`|P29Lg7SXwBZCg?)$CRGeM(hXPj)MYkNX@EvjkI>Cl0LopO@ zsMPpvPsGIh4arSej?+@~4KD}D1O{x(xb=`nSvSzU=p1@|>{fn>0_g4`Y#KWb3Dq(^$U2aE8%)VN4265_ g^}6sif+i*qoY)X>;-s;GgeF<$cIR$pyt}iR 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 literal 0 HcmV?d00001 diff --git a/docs/.doctrees/honeybee_doe2.simulation.doctree b/docs/.doctrees/honeybee_doe2.simulation.doctree new file mode 100644 index 0000000000000000000000000000000000000000..291b3f356f0bfce85ed82a1e6d9a2e339c35c58d GIT binary patch literal 40499 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 literal 0 HcmV?d00001 diff --git a/docs/.doctrees/honeybee_doe2.util.doctree b/docs/.doctrees/honeybee_doe2.util.doctree new file mode 100644 index 0000000000000000000000000000000000000000..3aede5353c4bc3e3bb463099673545f8ee6b1560 GIT binary patch literal 31137 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 ZyFp*{=G=+n=Ywo7(5b3v>1iY_Ka;+| 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 QXbM*vv?K`W$q85e|8XiVf&c&j literal 0 HcmV?d00001 diff --git a/docs/.doctrees/index.doctree b/docs/.doctrees/index.doctree new file mode 100644 index 0000000000000000000000000000000000000000..dc5fc0c00a2d4f8cdec23a667ff0b9eb070d0bd0 GIT binary patch literal 7970 zcmcIpTZkmp8J?X>&-7e(#@)?jTx}z|v(cVOBw(^=jG9$9qfJm*LrAEtt~%YPYO1Ts zs#7~Nf?ysD_HqQl3dBbP0SN(<5Z?lZ5MpjZ$U`3U5QIDmf{@32|EW4v)it+XV+OjX z>p$oG=fB_TrI{an=JpBoCs*Q-JO19LY1@8avpAJ=c3>p~=8N?8^x_ZF7t;;djLh9Q zNFs}+asoRn?s#^@{Pg=+T&DfP@#4)K!EDSd;RJqhp3m?GpT%C@lrzE+9;+aw%=u}Z3pbW3vo-6ViLYPQbGb8)6cR!qE6m()X{&v^u~e1FQ*wZjnD+? zBIT>HY3K`5J|!DDiyb-bIX+7}N!OI~rVx?SO$0VKZ%|Z5S z&Q8Mep=(+@5$n;OM9vDcPfICZ;p=>n-^!=>dHKK=2kTo=;`=Px+6|%|04g%5J%QYK z%kgctw;9D?;kNC`qzj2O!IRmK%#c?ld;b$TsutwM{1`H9^@6D748kB1Ez`HLpni&A zs}}`>)|Jc8w69*y8g!~RD@lJg1!sh}$7a<;g4{!7H z{9bT0t;LgcS#dya>}FQd7D0PNLhTsFk{PVBlGN15<;DEW7?x#LDVYZaQyJlkB9ie! z<_e`LpVk1mc*T!}>3P}p%0|!CfTcj57+)Y{CzmT^%z=!};@0!mu7yt6a;q$w~a&k>}Hr-tUc1?{`7()p4~@C5yka(WWs#I> z%HpN2mPTwx8+r{|a{t2k+>^F;E81GFN!ZEA?Wu3K+3U70dK6$0}O+*OI zRtYFMdi~}&dac6I>WKY4^B5ut;`V^T2*pd7B22AkT5L3It2p!Ux3AQoF+;@XtQDGl z7Pq?03wAd(;r|!hr3~I2Uj{lT-2&|@SwIF&B)|Y6H1X}KTd5SsClKfZOGK=ip7ms*7D2nAQ|vq=unnR=bhT~QMm$`-sQhV z-uOK}f7qVn@5$z)0c_6~@uigiamfEP`vf&?8`B?|Hf7JQm ze;<7~S; zO>}Mz0y}|WRSS#%RYjdL?qv+Xj7e?onNt%JCX_eL-|HNvv0O!N1N*X)z@5dl83dOk>iBDA#j#DW? zckbQA300!psp8T?H}O0s49`JvsH^v~WI>%sD+Wq}L1kI4Ttbz4=~|!pDhlPrLs4qD z-=Mo@;cXLgF=SxT?;CqKQo&K~Y08GU1C~;WN3wy_F!_|fi_V6A4ot^S-RE#l&H^CzLo_;5bcbBP zH;QD>u^fTONXxrs*zk?0)`C}4!cv?b;Uw$B; z5_RNa#AwuFc>B7?)kJk;t43gFE`7F)?AU%@h? zu%z;QZKa07Ju?XpUe55AH0aZ}jxN*=%hSXIY%k^zkq4eqx#XFCKS5^*iQ9OdL<=Kt ziI^2cwt;>JmV;}kPwL2q75F`{35htiHVEF3%Vr`1qXfxG2j;e9Cxg%^OcH`s0M)zt zrbh@@6ht`$X}<)8F-z>g*c*^Rou<)Q%#7+uWhIs{t~;@lne2*TJ24f4U?itMZS41YoCu zsuAiDP{$nL?YqA8707cr>RC1P1S!$qt)2wPkXJY3d9xPuqj z)XUDv^RUT*Q8;J8fDwmeAwzjO-uH#MXK<&_J$zul(_TQPzZefpINI|GygG)UZc)$K zqu~XXnYGXIyu~p!wJ@~E{0&l8BE;#PB*Yao*;ajV9tO}v1LF8S*gzf^)+kWKNw>Dm z8IbLIftfiY&69Uhm<$?j8y>t53OGaIIFx5C?AkFHN>IiIC1Cb@gFnI_;(|ZVU*$LWNBl$gPNXxpMPL7>uMhB*$R?ej`dK9p{>YGvA%Atq zKN_n2L$!C9@H=P_{1C?A&tnRB1B0^<`D+Rp|5#yC{Y@g5ss^A)T0$MJyoHP|gOH!= zeHrgnNVX3{02s`m8+e6HsjX*fz+!iE1Y=X*st&D<;77=gL<$EyTgR2JV7h`RWMN(e zQ$w1v0yJsr4GHql?4vpSbqL)30^;cQsrcpeX?PZ9`tVV_S%_&wM(qG) z7iqKX@`}Dqe*Rf{*V4kAibZ7En1ctcm?H}nleXiwl;JwfMgD3y#KKoO~n#lkR-2g-JF>f$r6KUa67Mu_t;l?bw z&Q#s^3P~>$36+1G)9<1GD9p%WQ5ZQLgc9y7|?D-|Z!io#6CKoyf03b4wF3;DDgIk-=+XepIf-<)oA U@F&z*ecqJ*n7Do)gaGHjl7eCRo{NL!H~ z@<)8cAM-ta8h)8_U9hR~N-;CN*5(R=I;pdi)Yb~&+G(Mwm&~3UizL3e*!44H-OqJV zYOm-%D4pIsYLmdr%5nPfVDwr)nU zgPyb2#5&ii7dYHhX}wV+kF3g;EDm9DuWoM@8TxZKs?88u(D7H{fipx|Nm8Y<(&&X@ zwgz3tX-8yTjz*`dj!*vXg-PyBf^^mbc(jt#Kn{J&oD*sRjvlw9n;Weh17bq=4UrzL zYgyaX-j&|POMZA61`7so5~oeXf)Y@{k)p)nz-a9dDmuT6;odZcgF1u^ey^Y~Y?j_g ztj6d@mPnCy5lSbu@+O9pIm{^S*v97PFiyh&P{@{ZZHo9gOe|1XW&nB`F%||N)e8-p ziBYH`Gz=pJBm=Z8XDOu=pHQe-##F8;v|<=|H$VI7%nE!zzPp(*W3zHo6XAb@cJwjjfa6C?x>kS&sThB!t;1iCTEFU??}m zdKXj;_YKRnp&57$*uYJi374UpYc)rXD2JdcH1KYi5bt!h7KL2_tc|HJ%B;mBs#*yI zplB44$>3onso0QOzZR92d8)HzkKlHKSg1LF+1Jhv2T_NFY;K&RVqG@LL z!zln+WGyq>1TtGDgxrQBd!rm#W?U?|#1G)zmpb8oWD5e8{pCSvi$dM6*7Y)zIw$ot z5l(YX5Dyw(lMPj_N{G`}zJ!bPK&a+_GXrp0KqAx}7-)vVNtzPY&$iS=k+3T@shOBA z^s5NS;9{Ym?+qg0j5+vtm_zF-V+9d1!&4>=-74zi<}m`S%6UD|Zo?i^@6*E|^y^Uq z?gEKIQ2}na%n`F-7)^K-93vAcnPhyXdBQidP2Yy(Fx^ z`CId?s@`xvdpMR4WewykCd7d{3?j)x3Tf$JpKQlhZP0ry4k zw?_U2$$yN00Q`8%fkt?JS@gSh*v^eR;)7OPwd|mIbO0iY)U6>+qpg_&>GJlo^Zx<2 CP+Q&r literal 0 HcmV?d00001 diff --git a/docs/.nojekyll b/docs/.nojekyll new file mode 100644 index 0000000..e69de29 diff --git a/docs/_modules/honeybee_doe2/construction.html b/docs/_modules/honeybee_doe2/construction.html new file mode 100644 index 0000000..f0fcb27 --- /dev/null +++ b/docs/_modules/honeybee_doe2/construction.html @@ -0,0 +1,426 @@ + + + + + + + honeybee_doe2.construction — honeybee-doe2 documentation + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ +

Source code for honeybee_doe2.construction

+"""honeybee-inp construction translators."""
+from __future__ import division
+
+from ladybug.datatype.uvalue import UValue
+from ladybug.datatype.rvalue import RValue
+from ladybug.datatype.distance import Distance
+from honeybee.typing import clean_doe2_string
+from honeybee_energy.material.opaque import EnergyMaterialNoMass
+
+from .config import RES_CHARS, MIN_LAYER_THICKNESS
+from .util import generate_inp_string, generate_inp_string_list_format
+
+# dictionary to map between E+ and DOE-2 roughness types
+ROUGHNESS_MAP = {
+    'VeryRough': 1, 'Rough': 2, 'MediumRough': 3,
+    'MediumSmooth': 4, 'Smooth': 5, 'VerySmooth': 6
+}
+
+
+
+[docs] +def opaque_material_to_inp(material): + """Convert an EnergyMaterial or EnergyMaterialNoMass into a MATERIAL INP string. + + Note that EnergyMaterials that are below a certain thickness will be automatically + converted to No Mass materials for compatibility with DOE-2. Also note that + this does not work for any materials that can be a part of a window constructions. + """ + doe2_id = clean_doe2_string(material.identifier, RES_CHARS) + # check if the material should be translated as a no mass material + if isinstance(material, EnergyMaterialNoMass) or \ + material.thickness < MIN_LAYER_THICKNESS: + r_val = RValue().to_unit([material.r_value], 'h-ft2-F/Btu', 'm2-K/W')[0] + keywords = ('TYPE', 'RESISTANCE') + values = ('RESISTANCE', round(r_val, 6)) + return generate_inp_string(doe2_id, 'MATERIAL', keywords, values) + # write out detailed properties for the material + thickness = round(Distance().to_unit([material.thickness], 'ft', 'm')[0], 3) + conduct = round(material.conductivity * 0.578176, 3) # convert to BTU/h-ft-F + density = round(material.density / 16.018, 3) # convert to lb/ft3 + spec_en = round(material.specific_heat * 0.0002388459, 3) # convert to BTU/lb-F + keywords = ('TYPE', 'THICKNESS', 'CONDUCTIVITY', 'DENSITY', 'SPECIFIC-HEAT') + values = ('PROPERTIES', thickness, conduct, density, spec_en) + return generate_inp_string(doe2_id, 'MATERIAL', keywords, values)
+ + + +
+[docs] +def opaque_construction_to_inp(construction): + """Convert an OpaqueConstruction into a CONSTRUCTION INP string. + + This will include both the LAYERS definition as well as the CONSTRUCTION but + it does NOT include the constituent MATERIAL definitions and their properties. + """ + doe2_id = clean_doe2_string(construction.identifier, RES_CHARS) + # if the construction has no heat capacity, simply make a U-VALUE construction + if construction.area_heat_capacity == 0 or \ + construction.thickness <= MIN_LAYER_THICKNESS * len(construction.materials): + con_cond = UValue().to_unit([construction.u_factor], 'Btu/h-ft2-F', 'W/m2-K')[0] + keywords = ('TYPE', 'U-VALUE') + values = ('U-VALUE', round(con_cond, 6)) + return generate_inp_string(doe2_id, 'CONSTRUCTION', keywords, values) + # create the specification of material layers + layer_id = '{}_l'.format(doe2_id) + layers = ['"{}"'.format(clean_doe2_string(mat, RES_CHARS)) + for mat in construction.layers] + layer_str = generate_inp_string_list_format( + layer_id, 'LAYERS', ['MATERIAL'], [layers]) + # create the construction specification + roughness = ROUGHNESS_MAP[construction.materials[0].roughness] + sol_absorb = round(1 - construction.outside_solar_reflectance, 3) + keywords = ('TYPE', 'ABSORPTANCE', 'ROUGHNESS', 'LAYERS') + values = ('LAYERS', sol_absorb, roughness, '"{}"'.format(layer_id)) + constr_str = generate_inp_string(doe2_id, 'CONSTRUCTION', keywords, values) + return ''.join((layer_str, constr_str))
+ + + +
+[docs] +def window_construction_to_inp(construction): + """Convert a WindowConstruction (or its variants) into a GLASS-TYPE INP string.""" + doe2_id = clean_doe2_string(construction.identifier, RES_CHARS) + shading_coef = construction.shgc / 0.87 + glass_cond = UValue().to_unit([construction.u_factor], 'Btu/h-ft2-F', 'W/m2-K')[0] + keywords = ('TYPE', 'SHADING-COEF', 'GLASS-CONDUCT') + values = ('SHADING-COEF', round(shading_coef, 3), round(glass_cond, 6)) + return generate_inp_string(doe2_id, 'GLASS-TYPE', keywords, values)
+ + + +
+[docs] +def door_construction_to_inp(construction): + """Convert an OpaqueConstruction or WindowConstruction to a CONSTRUCTION INP string. + + This translation pathway always uses a NoMass U-VALUE Construction. + """ + doe2_id = clean_doe2_string(construction.identifier, RES_CHARS) + constr_cond = UValue().to_unit([construction.u_factor], 'Btu/h-ft2-F', 'W/m2-K')[0] + keywords = ('TYPE', 'U-VALUE') + values = ('U-VALUE', round(constr_cond, 6)) + return generate_inp_string(doe2_id, 'CONSTRUCTION', keywords, values)
+ + + +
+[docs] +def air_construction_to_inp(construction): + """Convert an AirBoundaryConstruction to a CONSTRUCTION INP string. + + This translation pathway always uses a NoMass U-VALUE Construction. + """ + doe2_id = clean_doe2_string(construction.identifier, RES_CHARS) + constr_cond = 1.0 # default U-Value in Btu/h-ft2-F + keywords = ('TYPE', 'U-VALUE') + values = ('U-VALUE', constr_cond) + return generate_inp_string(doe2_id, 'CONSTRUCTION', keywords, values)
+ +
+ +
+ +
+
+
+
+

+ Back to top + +

+

+ © Copyright 2024, Ladybug Tools.
+ Created using Sphinx 8.0.2.
+

+
+
+ + \ No newline at end of file diff --git a/docs/_modules/honeybee_doe2/grouping.html b/docs/_modules/honeybee_doe2/grouping.html new file mode 100644 index 0000000..ddb70da --- /dev/null +++ b/docs/_modules/honeybee_doe2/grouping.html @@ -0,0 +1,549 @@ + + + + + + + honeybee_doe2.grouping — honeybee-doe2 documentation + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ +

Source code for honeybee_doe2.grouping

+# coding=utf-8
+"""Methods for grouping rooms to comply with INP rules."""
+from __future__ import division
+import math
+
+from ladybug_geometry.geometry2d import Point2D, Polygon2D
+from ladybug_geometry.geometry3d import Vector3D, Point3D, Face3D
+from honeybee.typing import clean_doe2_string
+from honeybee.room import Room
+
+from .config import DOE2_TOLERANCE, FLOOR_LEVEL_TOL, RES_CHARS
+
+
+
+[docs] +def group_rooms_by_doe2_level(rooms, model_tolerance): + """Group Honeybee Rooms according to acceptable floor levels in DOE-2. + + This means that not only will Rooms be on separate DOE-2 levels if their floor + heights differ but also Rooms that share the same floor height but are + disconnected from one another in plan will also be separate levels. + For example, when the model is of two towers on a plinth, each tower will + get its own separate level group. + + Args: + rooms: A list of Honeybee Rooms to be grouped. + model_tolerance: The tolerance of the model that the Rooms originated from. + + Returns: + A tuple with three elements. + + - room_groups: A list of lists where each sub-list contains Honeybee + Rooms that should be on the same DOE-2 level. + + - level_geometries: A list of Face3D with the same length as the + room_groups, which contains the geometry that represents each floor + level. These geometries will always be pointing upwards so that + their vertices are counter-clockwise when viewed from above. They + will also have colinear vertices removed such that they are ready + to be translated to INP POLYGONS. + + - level_names: A list of text strings that align with the level + geometry and contain suggested names for the DOE-2 levels. + """ + # set up lists of the outputs to be populated + room_groups, level_geometries, level_names, existing_levels = [], [], [], {} + + # first group the rooms by floor height + grouped_rooms, _ = Room.group_by_floor_height(rooms, FLOOR_LEVEL_TOL) + for fi, room_group in enumerate(grouped_rooms): + # determine a base name for the level using the story assigned to the rooms + level_name = clean_doe2_string(room_group[0].story, RES_CHARS - 8) \ + if room_group[0].story is not None else 'Level_{}'.format(fi) + if level_name in existing_levels: + existing_levels[level_name] += 1 + level_name = level_name + str(existing_levels[level_name]) + else: + existing_levels[level_name] = 1 + + # then, group the rooms by contiguous horizontal boundary + floor_geos = [] + for room in room_group: + if room.properties.doe2.space_polygon_geometry is not None: + floor_geos.append(room.properties.doe2.space_polygon_geometry) + else: + try: + flr_geo = room.horizontal_floor_boundaries(tolerance=model_tolerance) + if len(flr_geo) == 0: # possible when Rooms have no floors + flr_geo = room.horizontal_boundary(tolerance=model_tolerance) + floor_geos.append(flr_geo) + else: + floor_geos.extend(flr_geo) + except Exception: # level geometry is overlapping or not clean + pass + + # join all of the floors into horizontal boundaries + hor_bounds = _grouped_floor_boundary(floor_geos, model_tolerance) + + # if we got lucky and everything is one contiguous polygon, we're done! + if len(hor_bounds) == 0: # we will write the story with NO-SHAPE + room_groups.append(room_group) + level_geometries.append(None) + level_names.append(level_name) + elif len(hor_bounds) == 1: # just one clean polygon for the level + flr_geo = hor_bounds[0] + flr_geo = flr_geo if flr_geo.normal.z >= 0 else flr_geo.flip() + if flr_geo.has_holes: # remove holes as we only care about the boundary + flr_geo = Face3D(flr_geo.boundary, flr_geo.plane) + flr_geo = flr_geo.remove_colinear_vertices(tolerance=DOE2_TOLERANCE) + room_groups.append(room_group) + level_geometries.append(flr_geo) + level_names.append(level_name) + else: # we need to figure out which Room belongs to which geometry + # first get a set of Point2Ds that are inside each room in plan + room_pts, z_axis = [], Vector3D(0, 0, 1) + for room in room_group: + for face in room.faces: + if math.degrees(z_axis.angle(face.normal)) >= 91: + down_geo = face.geometry + break + room_pt3d = down_geo.center if down_geo.is_convex else \ + down_geo.pole_of_inaccessibility(DOE2_TOLERANCE) + room_pts.append(Point2D(room_pt3d.x, room_pt3d.y)) + # loop through floor geometries and determine all rooms associated with them + for si, flr_geo in enumerate(hor_bounds): + flr_geo = flr_geo if flr_geo.normal.z >= 0 else flr_geo.flip() + if flr_geo.has_holes: # remove holes as we only care about the boundary + flr_geo = Face3D(flr_geo.boundary, flr_geo.plane) + flr_geo = flr_geo.remove_colinear_vertices(tolerance=DOE2_TOLERANCE) + flr_poly = Polygon2D([Point2D(pt.x, pt.y) for pt in flr_geo.boundary]) + flr_rooms = [] + for room, room_pt in zip(room_group, room_pts): + if flr_poly.is_point_inside_bound_rect(room_pt): + flr_rooms.append(room) + room_groups.append(flr_rooms) + level_geometries.append(flr_geo) + level_names.append('{}_Section{}'.format(level_name, si)) + + # return all of the outputs + return room_groups, level_geometries, level_names
+ + + +
+[docs] +def group_rooms_by_doe2_hvac(model, hvac_mapping): + """Group Honeybee Rooms according to HVAC logic. + + Args: + model: A Honeybee Model for which Rooms will be grouped for HVAC assignment. + hvac_mapping: Text to indicate how HVAC systems should be assigned. + Model will use only one HVAC system for the whole model and + AssignedHVAC will follow how the HVAC systems have been assigned + to the Rooms.properties.energy.hvac. Choose from the options below. + + * Room + * Model + * AssignedHVAC + + Returns: + A tuple with three elements. + + - room_groups: A list of lists where each sub-list contains Honeybee + Rooms that should ave the same HVAC system. + + - hvac_names: A list of text strings that align with the room_groups + and contain suggested names for the DOE-2 HVAC systems. + """ + # clean up the hvac_mapping text + hvac_mapping = hvac_mapping.upper().replace('-', '').replace(' ', '') + + # determine the mapping to be used + if hvac_mapping == 'MODEL': + hvac_name = clean_doe2_string('{}_Sys'.format(model.display_name), RES_CHARS) + return [model.rooms], [hvac_name] + elif hvac_mapping == 'ROOM': + hvac_names = [clean_doe2_string('{}_Sys'.format(room.identifier), RES_CHARS) + for room in model.rooms] + room_groups = [[room] for room in model.rooms] + else: # assume that it is the assigned HVAC + hvac_dict = {} + for room in model.rooms: + if room.properties.energy.hvac is not None: + hvac_id = room.properties.energy.hvac.display_name + try: + hvac_dict[hvac_id].append(room) + except KeyError: # the first time that we are encountering the HVAC + hvac_dict[hvac_id] = [room] + else: + try: + hvac_dict['Unassigned'].append(room) + except KeyError: # the first time that we have an unassigned room + hvac_dict['Unassigned'] = [room] + room_groups, hvac_names, existing_dict = [], [], {} + for hvac_name, rooms in hvac_dict.items(): + room_groups.append(rooms) + hvac_doe2_name = clean_doe2_string(hvac_name, RES_CHARS - 2) + if hvac_doe2_name in existing_dict: + existing_dict[hvac_doe2_name] += 1 + hvac_names.append(hvac_doe2_name + str(existing_dict[hvac_doe2_name])) + else: + existing_dict[hvac_doe2_name] = 1 + hvac_names.append(hvac_doe2_name) + + return room_groups, hvac_names
+ + + +def _grouped_floor_boundary(floor_geos, tolerance=0.01): + """Get a list of Face3D for the boundary around several horizontal Face3Ds. + + Args: + floor_geos: A list of Honeybee Rooms for which the horizontal boundary will + be computed. + tolerance: The maximum difference between coordinate values of two + vertices at which they can be considered equivalent. (Default: 0.01, + suitable for objects in meters). + """ + # remove colinear vertices and degenerate faces + clean_floor_geos = [] + for geo in floor_geos: + try: + clean_floor_geos.append(geo.remove_colinear_vertices(tolerance)) + except AssertionError: # degenerate geometry to ignore + pass + if len(clean_floor_geos) == 0: + return [] # no Room boundary to be found + + # convert the floor Face3Ds into counterclockwise Polygon2Ds + floor_polys, z_vals = [], [] + for flr_geo in clean_floor_geos: + z_vals.append(flr_geo.min.z) + b_poly = Polygon2D([Point2D(pt.x, pt.y) for pt in flr_geo.boundary]) + floor_polys.append(b_poly) + if flr_geo.has_holes: + for hole in flr_geo.holes: + h_poly = Polygon2D([Point2D(pt.x, pt.y) for pt in hole]) + floor_polys.append(h_poly) + z_min = min(z_vals) + + # find the joined intersected boundary + closed_polys = Polygon2D.joined_intersected_boundary(floor_polys, tolerance) + + # remove colinear vertices from the resulting polygons + clean_polys = [] + for poly in closed_polys: + try: + clean_polys.append(poly.remove_colinear_vertices(tolerance)) + except AssertionError: + pass # degenerate polygon to ignore + + # figure out if polygons represent holes in the others and make Face3D + if len(clean_polys) == 0: + return [] + elif len(clean_polys) == 1: # can be represented with a single Face3D + pts3d = [Point3D(pt.x, pt.y, z_min) for pt in clean_polys[0]] + return [Face3D(pts3d)] + else: # need to separate holes from distinct Face3Ds + bound_faces = [] + for poly in clean_polys: + pts3d = tuple(Point3D(pt.x, pt.y, z_min) for pt in poly) + bound_faces.append(Face3D(pts3d)) + return Face3D.merge_faces_to_holes(bound_faces, tolerance) +
+ +
+ +
+
+
+
+

+ Back to top + +

+

+ © Copyright 2024, Ladybug Tools.
+ Created using Sphinx 8.0.2.
+

+
+
+ + \ No newline at end of file diff --git a/docs/_modules/honeybee_doe2/load.html b/docs/_modules/honeybee_doe2/load.html new file mode 100644 index 0000000..aad0424 --- /dev/null +++ b/docs/_modules/honeybee_doe2/load.html @@ -0,0 +1,608 @@ + + + + + + + honeybee_doe2.load — honeybee-doe2 documentation + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ +

Source code for honeybee_doe2.load

+"""honeybee-doe2 load translators."""
+from __future__ import division
+
+from ladybug.datatype.area import Area
+from ladybug.datatype.power import Power
+from ladybug.datatype.energyflux import EnergyFlux
+from ladybug.datatype.volumeflowrate import VolumeFlowRate
+from ladybug.datatype.volumeflowrateintensity import VolumeFlowRateIntensity
+from honeybee.typing import clean_doe2_string
+
+from .config import RES_CHARS
+
+# list of all keywords associated with different load types
+PEOPLE_KEYS = ('AREA/PERSON', 'PEOPLE-SCHEDULE')
+LIGHTING_KEYS = ('LIGHTING-W/AREA', 'LIGHTING-SCHEDULE', 'LIGHT-TO-RETURN',
+                 'LIGHT-RAD-FRAC')
+EQUIP_KEYS = ('EQUIPMENT-W/AREA', 'EQUIP-SCHEDULE',
+              'EQUIP-SENSIBLE', 'EQUIP-LATENT', 'EQUIP-RAD-FRAC')
+SOURCE_KEYS = ('SOURCE-TYPE', 'SOURCE-POWER', 'SOURCE-SCHEDULE',
+               'SOURCE-SENSIBLE', 'SOURCE-RAD-FRAC', 'SOURCE-LATENT')
+INFILTRATION_KEYS = ('INF-METHOD', 'INF-FLOW/AREA', 'INF-SCHEDULE')
+SETPOINT_KEYS = ('DESIGN-HEAT-T', 'DESIGN-COOL-T', 'HEAT-TEMP-SCH', 'COOL-TEMP-SCH')
+VENTILATION_KEYS = ('OA-FLOW/PER', 'OA-FLOW/AREA', 'OA-CHANGES', 'OUTSIDE-AIR-FLOW',
+                    'MIN-FLOW-SCH')
+MECH_AIRFLOW_KEYS = ('ASSIGNED-FLOW', 'FLOW/AREA', 'MIN-FLOW-RATIO', 'MIN-FLOW/AREA',
+                     'HMAX-FLOW-RATIO')
+SPACE_KEYS = PEOPLE_KEYS + LIGHTING_KEYS + EQUIP_KEYS + INFILTRATION_KEYS
+ZONE_KEYS = SETPOINT_KEYS + VENTILATION_KEYS + MECH_AIRFLOW_KEYS
+SCHEDULE_KEYS = (
+    'PEOPLE-SCHEDULE', 'LIGHTING-SCHEDULE', 'EQUIP-SCHEDULE', 'SOURCE-SCHEDULE',
+    'INF-SCHEDULE', 'HEAT-TEMP-SCH', 'COOL-TEMP-SCH', 'MIN-FLOW-SCH')
+
+# TODO: Add methods to map honeybee_energy process loads to SOURCE-TYPE PROCESS
+# TODO: Add methods to translate daylight sensors
+
+
+
+[docs] +def people_to_inp(people): + """Translate a People definition into INP (Keywords, Values). + + Args: + people: A honeybee-energy People definition. None is allowed. + + Returns: + A tuple with two elements. + + - keywords: A tuple of text strings for keywords related to defining + people for a Space. + + - values: A tuple of text strings that aligns with the keywords and + denotes the value for each keyword. + """ + if people is None: + return (), () + ppl_den = Area().to_unit([people.area_per_person], 'ft2', 'm2')[0] + ppl_den = round(ppl_den, 3) + ppl_sch = clean_doe2_string(people.occupancy_schedule.identifier, RES_CHARS) + ppl_sch = '"{}"'.format(ppl_sch) + return PEOPLE_KEYS, (ppl_den, ppl_sch)
+ + + +
+[docs] +def lighting_to_inp(lighting): + """Translate a Lighting definition into INP (Keywords, Values). + + Args: + lighting: A honeybee-energy Lighting definition. None is allowed. + + Returns: + A tuple with two elements. + + - keywords: A tuple of text strings for keywords related to defining + lighting for a Space. + + - values: A tuple of text strings that aligns with the keywords and + denotes the value for each keyword. + """ + if lighting is None: + return (), () + lpd = EnergyFlux().to_unit([lighting.watts_per_area], 'W/ft2', 'W/m2')[0] + lpd = round(lpd, 3) + lgt_sch = clean_doe2_string(lighting.schedule.identifier, RES_CHARS) + lgt_sch = '"{}"'.format(lgt_sch) + ret_fract = round(lighting.return_air_fraction, 3) + rad_fract = round(lighting.radiant_fraction, 3) + return LIGHTING_KEYS, (lpd, lgt_sch, ret_fract, rad_fract)
+ + + +
+[docs] +def electric_equipment_to_inp(electric_equip): + """Translate an ElectricEquipment into INP (Keywords, Values). + + Args: + electric_equip: A honeybee-energy ElectricEquipment definition. + + Returns: + A tuple with two elements. + + - keywords: A tuple of text strings for keywords related to defining + the equipment for a Space. + + - values: A tuple of text strings that aligns with the keywords and + denotes the value for each keyword. + """ + if electric_equip is None: + return (), () + epd = EnergyFlux().to_unit([electric_equip.watts_per_area], 'W/ft2', 'W/m2')[0] + epd = round(epd, 3) + eqp_sch = clean_doe2_string(electric_equip.schedule.identifier, RES_CHARS) + eqp_sch = '("{}")'.format(eqp_sch) + sens_fract = 1 - electric_equip.latent_fraction - electric_equip.lost_fraction + values = (epd, eqp_sch, sens_fract, electric_equip.latent_fraction, + electric_equip.radiant_fraction) + return EQUIP_KEYS, values
+ + + +
+[docs] +def hot_water_and_gas_to_inp(hot_water, gas_equip, room_floor_area): + """Translate a ServiceHotWater and/or GasEquipment into INP (Keywords, Values). + + Args: + hot_water: A honeybee-energy ServiceHotWater definition. None is allowed. + None is allowed. + gas_equip: gas_equip: A honeybee-energy GasEquipment definition. + None is allowed. + room_floor_area: The host Room floor area in square feet, which will + be used to convert the hot water flow per unit floor area to an + absolute load in BTU/h. + + Returns: + A tuple with two elements. + + - keywords: A tuple of text strings for keywords related to defining + the hot water SOURCE load for a Space. + + - values: A tuple of text strings that aligns with the keywords and + denotes the value for each keyword. + """ + # first check whether anything is assigned + if hot_water is None and gas_equip is None: + return (), () + + # process the hot water and gas into absolute values in Btu/h + shw_values, gas_values = None, None + if hot_water is not None: + flow_den = hot_water.flow_per_area # L/h-m2 + flr_area = Area().to_unit([room_floor_area], 'm2', 'ft2')[0] # m2 + total_flow = flow_den * flr_area # L/h + delta_t = 50 # assume the water heater must heat water from 10C to 60C + c_water = 4.186 # J/g-C, the specific heat of water + shw_heat = total_flow * c_water * delta_t # J/h using Q = m * c * deltaT + shw_heat = shw_heat / 3600. # Watts + shw_power = round(Power().to_unit([shw_heat], 'Btu/h', 'W')[0], 3) + shw_sch = clean_doe2_string(hot_water.schedule.identifier, RES_CHARS) + shw_sch = '"{}"'.format(shw_sch) + sens_fract = round(hot_water.sensible_fraction, 3) + lat_fract = round(hot_water.latent_fraction, 3) + shw_values = ('HOT-WATER', shw_power, shw_sch, sens_fract, 0.0, lat_fract) + if gas_equip is not None: + epd = EnergyFlux().to_unit([gas_equip.watts_per_area], 'Btu/h-ft2', 'W/m2')[0] + total_power = round(epd * flr_area, 3) # Btu/h + eqp_sch = clean_doe2_string(gas_equip.schedule.identifier, RES_CHARS) + eqp_sch = '"{}"'.format(eqp_sch) + sens_fract = round(1 - gas_equip.latent_fraction - gas_equip.lost_fraction, 3) + rad_fract = round(gas_equip.radiant_fraction, 3) + lat_fract = round(gas_equip.latent_fraction, 3) + gas_values = ('GAS', total_power, eqp_sch, sens_fract, rad_fract, lat_fract) + + # if both were specified, format them into a single set of numbers + if shw_values is not None and gas_values is not None: + total_load = round(shw_values[1] + gas_values[1], 3) + shw_weight = shw_values[1] / total_load + gas_weight = gas_values[1] / total_load + if gas_weight > shw_weight: + values = ['GAS', total_load, gas_values[2]] + else: + values = ['HOT-WATER', total_load, shw_values[2]] + for shw_v, gas_v in zip(shw_values[3:], gas_values[3:]): + new_v = (shw_v * shw_weight) + (gas_v * gas_weight) + values.append(round(new_v, 3)) + else: + values = shw_values if shw_values is not None else gas_values + + return SOURCE_KEYS, values
+ + + +
+[docs] +def infiltration_to_inp(infiltration): + """Translate an Infiltration definition into INP (Keywords, Values). + + Args: + infiltration: A honeybee-energy Infiltration definition. None is allowed. + + Returns: + A tuple with two elements. + + - keywords: A tuple of text strings for keywords related to defining + infiltration for a Space. + + - values: A tuple of text strings that aligns with the keywords and + denotes the value for each keyword. + """ + if infiltration is None: + return (), () + inf_den = infiltration.flow_per_exterior_area + inf_den = VolumeFlowRateIntensity().to_unit([inf_den], 'cfm/ft2', 'm3/s-m2')[0] + inf_den = round(inf_den, 3) + inf_sch = clean_doe2_string(infiltration.schedule.identifier, RES_CHARS) + inf_sch = '"{}"'.format(inf_sch) + return INFILTRATION_KEYS, ('AIR-CHANGE', inf_den, inf_sch)
+ + + +
+[docs] +def setpoint_to_inp(setpoint): + """Translate a Setpoint definition into INP (Keywords, Values). + + Args: + setpoint: A honeybee-energy Setpoint definition. None is allowed. + + Returns: + A tuple with two elements. + + - keywords: A tuple of text strings for keywords related to defining + setpoints for a Zone. + + - values: A tuple of text strings that aligns with the keywords and + denotes the value for each keyword. + """ + if setpoint is None: # use some default setpoints + return ('DESIGN-HEAT-T', 'DESIGN-COOL-T'), (72, 75) + heat_setpt = round(setpoint.heating_setpoint * (9. / 5.) + 32., 2) + cool_setpt = round(setpoint.cooling_setpoint * (9. / 5.) + 32., 2) + heat_sch = clean_doe2_string(setpoint.heating_schedule.identifier, RES_CHARS) + heat_sch = '"{}"'.format(heat_sch) + cool_sch = clean_doe2_string(setpoint.cooling_schedule.identifier, RES_CHARS) + cool_sch = '"{}"'.format(cool_sch) + return SETPOINT_KEYS, (heat_setpt, cool_setpt, heat_sch, cool_sch)
+ + + +
+[docs] +def ventilation_to_inp(ventilation): + """Translate a Ventilation definition into INP (Keywords, Values). + + Args: + ventilation: A honeybee-energy Ventilation definition. None is allowed. + + Returns: + A tuple with two elements. + + - keywords: A list of text strings for keywords related to defining + ventilation for a Space. + + - values: A list of text strings that aligns with the keywords and + denotes the value for each keyword. + """ + keywords, values = [], [] + if ventilation is None: + return keywords, values + # check the flow per person + ppl_den = ventilation.flow_per_person + if ppl_den != 0: + keywords.append('OA-FLOW/PER') + ppl_den = VolumeFlowRate().to_unit([ppl_den], 'cfm', 'm3/s')[0] + values.append(round(ppl_den, 3)) + # check the flow per floor area + vent_den = ventilation.flow_per_area + if vent_den != 0: + keywords.append('OA-FLOW/AREA') + vent_den = VolumeFlowRateIntensity().to_unit([vent_den], 'cfm/ft2', 'm3/s-m2')[0] + values.append(round(vent_den, 3)) + # check the air changes per hour + ach = ventilation.air_changes_per_hour + if ach != 0: + keywords.append('OA-CHANGES') + values.append(round(ach, 3)) + # check the flow per zone + total_flow = ventilation.flow_per_zone + if total_flow != 0: + keywords.append('OUTSIDE-AIR-FLOW') + total_flow = VolumeFlowRate().to_unit([total_flow], 'cfm', 'm3/s')[0] + values.append(round(total_flow, 3)) + # check the schedule + vent_sch = ventilation.schedule + if vent_sch is not None: + keywords.append('MIN-FLOW-SCH') + vent_sch = clean_doe2_string(vent_sch.identifier, RES_CHARS) + values.append('"{}"'.format(vent_sch)) + return keywords, values
+ +
+ +
+ +
+
+
+
+

+ Back to top + +

+

+ © Copyright 2024, Ladybug Tools.
+ Created using Sphinx 8.0.2.
+

+
+
+ + \ No newline at end of file diff --git a/docs/_modules/honeybee_doe2/programtype.html b/docs/_modules/honeybee_doe2/programtype.html new file mode 100644 index 0000000..77df359 --- /dev/null +++ b/docs/_modules/honeybee_doe2/programtype.html @@ -0,0 +1,487 @@ + + + + + + + honeybee_doe2.programtype — honeybee-doe2 documentation + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ +

Source code for honeybee_doe2.programtype

+"""honeybee-doe2 program type translators."""
+from __future__ import division
+
+from .util import switch_statement_id
+from .load import people_to_inp, lighting_to_inp, electric_equipment_to_inp, \
+    infiltration_to_inp, setpoint_to_inp, ventilation_to_inp, \
+    SPACE_KEYS, ZONE_KEYS, SCHEDULE_KEYS, MECH_AIRFLOW_KEYS
+SCH_KEY_SET = set(SCHEDULE_KEYS)
+
+
+
+[docs] +def program_type_to_inp(program_type, switch_dict=None): + """Translate a ProgramType into a dictionary used to write INP switch statements. + + Args: + program_type: A honeybee-energy ProgramType definition. + switch_dict: An optional dictionary with INP keywords as keys (such as + PEOPLE-SCHEDULE or AREA/PERSON or LIGHTING-W/AREA). The values of the + dictionary should be lists of switch statement text strings, such as + 'case "conf": #SI("Small Off Occ", "SPACE", "PEOPLE-SCHEDULE")'. + Specifying an input dictionary here can be used to build up switch + statements for all program types across a model. + + Returns: + An dictionary with INP keywords as keys (such as PEOPLE-SCHEDULE or AREA/PERSON). + The values of the dictionary are lists of switch statement text strings, + such as 'case "conf": #SI("Small Off Occ", "SPACE", "PEOPLE-SCHEDULE")'. + """ + # set up the switch statement dictionary to be filled + switch_dict = switch_dict if switch_dict is not None else {} + prog_uid = switch_statement_id(program_type.identifier) + base_switch = 'case "{}": '.format(prog_uid) + + def _format_schedule(sch_key, sch_uid, obj_type='SPACE'): + """Format schedules in the way they are written into switch statements.""" + return '{}#SI({}, "{}", "{}")'.format(base_switch, sch_uid, obj_type, sch_key) + + def _add_to_switch_dict(keyword, value): + """Add a key: value pair to the switch dictionary with a check.""" + try: + switch_dict[keyword].append(value) + except KeyError: # the first time this key was encountered in the dict + switch_dict[keyword] = [value] + + # write the people into the dictionary + ppl_kwd, ppl_val = people_to_inp(program_type.people) + for key, val in zip(ppl_kwd, ppl_val): + if key in SCH_KEY_SET: + _add_to_switch_dict(key, _format_schedule(key, val, 'SPACE')) + else: + _add_to_switch_dict(key, '{}{}'.format(base_switch, val)) + + + # write the lighting into the dictionary + lgt_kwd, lgt_val = lighting_to_inp(program_type.lighting) + for key, val in zip(lgt_kwd, lgt_val): + if key == 'LIGHTING-SCHEDULE': + key = 'LIGHTING-SCHEDUL' # there's a typo in DOE-2 that was never fixed + _add_to_switch_dict(key, _format_schedule(key, val, 'SPACE')) + else: + _add_to_switch_dict(key, '{}{}'.format(base_switch, val)) + + # write the equipment into the dictionary + eq_kwd, eq_val = electric_equipment_to_inp(program_type.electric_equipment) + for key, val in zip(eq_kwd, eq_val): + if key in SCH_KEY_SET: + _add_to_switch_dict(key, _format_schedule(key, val, 'SPACE')) + else: + _add_to_switch_dict(key, '{}{}'.format(base_switch, val)) + + # write the infiltration into the dictionary + inf_kwd, inf_val = infiltration_to_inp(program_type.infiltration) + for key, val in zip(inf_kwd, inf_val): + if key in SCH_KEY_SET: + _add_to_switch_dict(key, _format_schedule(key, val, 'SPACE')) + elif key == 'INF-METHOD': + continue # DOE-2 does not like when we define this key + else: + _add_to_switch_dict(key, '{}{}'.format(base_switch, val)) + + # write the setpoint into the dictionary + stp_kwd, stp_val = setpoint_to_inp(program_type.setpoint) + for key, val in zip(stp_kwd, stp_val): + if key in SCH_KEY_SET: + _add_to_switch_dict(key, _format_schedule(key, val, 'ZONE')) + else: + _add_to_switch_dict(key, '{}{}'.format(base_switch, val)) + + # write the ventilation into the dictionary + vt_kwd, vt_val = ventilation_to_inp(program_type.ventilation) + for key, val in zip(vt_kwd, vt_val): + if key in SCH_KEY_SET: + _add_to_switch_dict(key, _format_schedule(key, val, 'ZONE')) + else: + _add_to_switch_dict(key, '{}{}'.format(base_switch, val)) + + # if the user_data of the ProgramType has Mech AirFlow keys, add them + if program_type.user_data is not None: + for air_key in MECH_AIRFLOW_KEYS: + if air_key in program_type.user_data: + val = program_type.user_data[air_key] + _add_to_switch_dict(air_key, '{}{}'.format(base_switch, val)) + + return switch_dict
+ + + +
+[docs] +def switch_dict_to_space_inp(switch_dict): + """Translate a switch statement dictionary into INP strings for the SPACE. + + Args: + switch_dict: An dictionary with INP keywords as keys (such as + PEOPLE-SCHEDULE or AREA/PERSON or LIGHTING-W/AREA). The values of the + dictionary should be lists of switch statement text strings, such as + 'case "conf": #SI("Small Off Occ", "SPACE", "PEOPLE-SCHEDULE")'. + + Returns: + A text string to be written into an INP file. This should go at the top + of the description of Floors / Spaces. + """ + # loop through the space keys and build a list of all switch statement keys + all_switch_strs = [] + for s_key in SPACE_KEYS: + try: + if len(s_key) > 16: # switch statements limit characters to 16 + s_key = s_key[:16] + switch_progs = switch_dict[s_key] + switch_strs = ['SET-DEFAULT FOR SPACE'] + switch_strs.append(' {} ='.format(s_key)) + switch_strs.append('{switch(#L("C-ACTIVITY-DESC"))') + switch_strs.extend(switch_progs) + switch_strs.append('default: no_default') + switch_strs.append('endswitch}') + switch_strs.append('..\n') + all_switch_strs.append('\n'.join(switch_strs)) + except KeyError: + pass # none of the programs types have this space key + # add something to set the INF-METHOD for all spaces + inf_str = 'SET-DEFAULT FOR SPACE\n' \ + ' INF-METHOD = AIR-CHANGE\n' \ + '..\n' + all_switch_strs.append(inf_str) + return '\n'.join(all_switch_strs)
+ + + +
+[docs] +def switch_dict_to_zone_inp(switch_dict): + """Translate a switch statement dictionary into INP strings for the ZONE. + + Args: + switch_dict: An dictionary with INP keywords as keys (such as + HEAT-TEMP-SCH or DESIGN-HEAT-T or OUTSIDE-AIR-FLOW). The values of the + dictionary should be lists of switch statement text strings, such as + 'case "conf": #SI("Small Off HtgStp", "SPACE", "HEAT-TEMP-SCH")'. + + Returns: + A text string to be written into an INP file. This should go at the top + of the description of HVAC Systems / Zones. + """ + # loop through the space keys and build a list of all switch statement keys + all_switch_strs = [] + for s_key in ZONE_KEYS: + try: + switch_progs = switch_dict[s_key] + switch_strs = ['SET-DEFAULT FOR ZONE', ' TYPE = CONDITIONED'] + switch_strs.append(' {} ='.format(s_key)) + switch_strs.append('{switch(#LR("SPACE", "C-ACTIVITY-DESC"))') + switch_strs.extend(switch_progs) + switch_strs.append('default: no_default') + switch_strs.append('endswitch}') + switch_strs.append('..\n') + all_switch_strs.append('\n'.join(switch_strs)) + except KeyError: + pass # none of the programs types have this space key + return '\n'.join(all_switch_strs)
+ +
+ +
+ +
+
+
+
+

+ Back to top + +

+

+ © Copyright 2024, Ladybug Tools.
+ Created using Sphinx 8.0.2.
+

+
+
+ + \ No newline at end of file diff --git a/docs/_modules/honeybee_doe2/properties/model.html b/docs/_modules/honeybee_doe2/properties/model.html new file mode 100644 index 0000000..1d5f916 --- /dev/null +++ b/docs/_modules/honeybee_doe2/properties/model.html @@ -0,0 +1,371 @@ + + + + + + + honeybee_doe2.properties.model — honeybee-doe2 documentation + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ +

Source code for honeybee_doe2.properties.model

+# coding=utf-8
+"""Model DOE-2 Properties."""
+
+
+
+[docs] +class ModelDoe2Properties(object): + """DOE-2 Properties for Honeybee Model. + + Args: + host: A honeybee_core Model object that hosts these properties. + + Properties: + * host + """ + + def __init__(self, host): + """Initialize ModelDoe2Properties.""" + self._host = host + + @property + def host(self): + """Get the Model object hosting these properties.""" + return self._host + +
+[docs] + def to_dict(self): + """Return Model DOE-2 properties as a dictionary.""" + return {'doe2': {'type': 'ModelDoe2Properties'}}
+ + +
+[docs] + def apply_properties_from_dict(self, data): + """Apply the energy properties of a dictionary to the host Model of this object. + + Args: + data: A dictionary representation of an entire honeybee-core Model. + Note that this dictionary must have ModelEnergyProperties in order + for this method to successfully apply the energy properties. + """ + assert 'doe2' in data['properties'], \ + 'Dictionary possesses no ModelDoe2Properties.' + room_doe2_dicts = [] + if 'rooms' in data and data['rooms'] is not None: + for room_dict in data['rooms']: + try: + room_doe2_dicts.append(room_dict['properties']['doe2']) + except KeyError: + room_doe2_dicts.append(None) + for room, r_dict in zip(self.host.rooms, room_doe2_dicts): + if r_dict is not None: + room.properties.doe2.apply_properties_from_dict(r_dict)
+ + +
+[docs] + def ToString(self): + return self.__repr__()
+ + + def __repr__(self): + return 'Model DOE2 Properties: [host: {}]'.format(self.host.display_name)
+ +
+ +
+ +
+
+
+
+

+ Back to top + +

+

+ © Copyright 2024, Ladybug Tools.
+ Created using Sphinx 8.0.2.
+

+
+
+ + \ No newline at end of file diff --git a/docs/_modules/honeybee_doe2/properties/room.html b/docs/_modules/honeybee_doe2/properties/room.html new file mode 100644 index 0000000..b47c8fb --- /dev/null +++ b/docs/_modules/honeybee_doe2/properties/room.html @@ -0,0 +1,700 @@ + + + + + + + honeybee_doe2.properties.room — honeybee-doe2 documentation + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ +

Source code for honeybee_doe2.properties.room

+# coding=utf-8
+"""Room DOE-2 Properties."""
+import math
+
+from ladybug_geometry.geometry3d import Face3D
+from honeybee.typing import float_in_range, float_positive
+from honeybee.altnumber import autocalculate
+
+from ..load import MECH_AIRFLOW_KEYS
+
+
+
+[docs] +class RoomDoe2Properties(object): + """DOE-2 Properties for Honeybee Room. + + Args: + host: A honeybee_core Room object that hosts these properties. + assigned_flow: A number for the design supply air flow rate for the zone + the Room is assigned to (cfm). This establishes the minimum allowed + design air flow. Note that the actual design flow may be larger. If + None, this parameter will not be written into the INP. (Default: None). + flow_per_area: A number for the design supply air flow rate to + the zone per unit floor area (cfm/ft2). If None, this parameter + will not be written into the INP. (Default: None). + min_flow_ratio: A number between 0 and 1 for the minimum allowable zone + air supply flow rate, expressed as a fraction of design flow rate. + Applicable to variable-volume type systems only. If None, this parameter + will not be written into the INP. (Default: None). + min_flow_per_area: A number for the minimum air flow per square foot of + floor area (cfm/ft2). This is an alternative way of specifying the + min_flow_ratio. If None, this parameter will not be written into + the INP. (Default: None). + hmax_flow_ratio: A number between 0 and 1 for the ratio of the maximum + (or fixed) heating airflow to the cooling airflow. The specific + meaning varies according to the type of zone terminal. If None, this + parameter will not be written into the INP. (Default: None). + space_polygon_geometry: An optional horizontal Face3D object, which will + be used to set the SPACE polygon during export to INP. If None, + the SPACE polygon is auto-calculated from the 3D Room geometry. + Specifying a geometry here can help overcome some limitations of + this auto-calculation, particularly for cases where the floors + of the Room are composed of AirBoundaries. (Default: None). + + Properties: + * host + * assigned_flow + * flow_per_area + * min_flow_ratio + * min_flow_per_area + * hmax_flow_ratio + * space_polygon_geometry + """ + __slots__ = ( + '_host', '_assigned_flow', '_flow_per_area', '_min_flow_ratio', + '_min_flow_per_area', '_hmax_flow_ratio', '_space_polygon_geometry' + ) + + def __init__( + self, host, assigned_flow=None, flow_per_area=None, min_flow_ratio=None, + min_flow_per_area=None, hmax_flow_ratio=None, space_polygon_geometry=None + ): + """Initialize Room DOE-2 properties.""" + # set the main properties of the Room + self._host = host + self.assigned_flow = assigned_flow + self.flow_per_area = flow_per_area + self.min_flow_ratio = min_flow_ratio + self.min_flow_per_area = min_flow_per_area + self.hmax_flow_ratio = hmax_flow_ratio + self.space_polygon_geometry = space_polygon_geometry + + @property + def host(self): + """Get the Room object hosting these properties.""" + return self._host + + @property + def assigned_flow(self): + """Get or set the design supply air flow rate for the zone (cfm).""" + return self._assigned_flow + + @assigned_flow.setter + def assigned_flow(self, value): + if value is not None: + value = float_positive(value, 'zone assigned flow') + self._assigned_flow = value + + @property + def flow_per_area(self): + """Get or set the design supply air flow rate per unit floor area (cfm/ft2). + """ + return self._flow_per_area + + @flow_per_area.setter + def flow_per_area(self, value): + if value is not None: + value = float_positive(value, 'zone flow per area') + self._flow_per_area = value + + @property + def min_flow_ratio(self): + """Get or set the the min supply airflow rate as a fraction of design flow rate. + """ + return self._min_flow_ratio + + @min_flow_ratio.setter + def min_flow_ratio(self, value): + if value is not None: + value = float_in_range(value, 0.0, 1.0, 'zone min flow ratio') + self._min_flow_ratio = value + + @property + def min_flow_per_area(self): + """Get or set the minimum air flow per square foot of floor area (cfm/ft2).""" + return self._min_flow_per_area + + @min_flow_per_area.setter + def min_flow_per_area(self, value): + if value is not None: + value = float_positive(value, 'zone min flow per area') + self._min_flow_per_area = value + + @property + def hmax_flow_ratio(self): + """Get or set the ratio of the maximum heating airflow to the cooling airflow. + """ + return self._hmax_flow_ratio + + @hmax_flow_ratio.setter + def hmax_flow_ratio(self, value): + if value is not None: + value = float_in_range(value, 0.0, 1.0, 'zone heating max flow ratio') + self._hmax_flow_ratio = value + + @property + def space_polygon_geometry(self): + """Get or set a horizontal Face3D to set the space polygon geometry.""" + return self._space_polygon_geometry + + @space_polygon_geometry.setter + def space_polygon_geometry(self, value): + if value is not None: + assert isinstance(value, Face3D), \ + 'Expected ladybug_geometry Face3D. Got {}'.format(type(value)) + if value.normal.z < 0: # ensure upward-facing Face3D + self._floor_geometry = value.flip() + self._space_polygon_geometry = value + +
+[docs] + def move(self, moving_vec): + """Move this object along a vector. + + Args: + moving_vec: A ladybug_geometry Vector3D with the direction and distance + to move the object. + """ + if self.space_polygon_geometry is not None: + self._space_polygon_geometry = self.space_polygon_geometry.move(moving_vec)
+ + +
+[docs] + def rotate(self, angle, axis, origin): + """Rotate this object by a certain angle around an axis and origin. + + Args: + angle: An angle for rotation in degrees. + axis: Rotation axis as a Vector3D. + origin: A ladybug_geometry Point3D for the origin around which the + object will be rotated. + """ + if self.space_polygon_geometry is not None: + self._space_polygon_geometry = \ + self.space_polygon_geometry.rotate(math.radians(angle), axis, origin)
+ + +
+[docs] + def rotate_xy(self, angle, origin): + """Rotate this object counterclockwise in the world XY plane by a certain angle. + + Args: + angle: An angle in degrees. + origin: A ladybug_geometry Point3D for the origin around which the + object will be rotated. + """ + if self.space_polygon_geometry is not None: + self._space_polygon_geometry = \ + self.space_polygon_geometry.rotate_xy(math.radians(angle), origin)
+ + +
+[docs] + def reflect(self, plane): + """Reflect this object across a plane. + + Args: + plane: A ladybug_geometry Plane across which the object will + be reflected. + """ + if self.space_polygon_geometry is not None: + self._space_polygon_geometry = self.space_polygon_geometry.reflect(plane)
+ + +
+[docs] + def scale(self, factor, origin=None): + """Scale this object by a factor from an origin point. + + Args: + factor: A number representing how much the object should be scaled. + origin: A ladybug_geometry Point3D representing the origin from which + to scale. If None, it will be scaled from the World origin (0, 0, 0). + """ + if self.space_polygon_geometry is not None: + self._space_polygon_geometry = \ + self.space_polygon_geometry.scale(factor, origin)
+ + +
+[docs] + @classmethod + def from_dict(cls, data, host): + """Create RoomDoe2Properties from a dictionary. + + Args: + data: A dictionary representation of RoomDoe2Properties with the + format below. + host: A Room object that hosts these properties. + + .. code-block:: python + + { + "type": 'RoomDoe2Properties', + "assigned_flow": 100, # number in cfm + "flow_per_area": 1, # number in cfm/ft2 + "min_flow_ratio": 0.3, # number between 0 and 1 + "min_flow_per_area": 0.3, # number in cfm/ft2 + "hmax_flow_ratio": 0.3, # number between 0 and 1 + "space_polygon_geometry": {} # optional Face3D dictionary + } + """ + assert data['type'] == 'RoomDoe2Properties', \ + 'Expected RoomDoe2Properties. Got {}.'.format(data['type']) + new_prop = cls(host) + auto_dict = autocalculate.to_dict() + if 'assigned_flow' in data and data['assigned_flow'] != auto_dict: + new_prop.assigned_flow = data['assigned_flow'] + if 'flow_per_area' in data and data['flow_per_area'] != auto_dict: + new_prop.flow_per_area = data['flow_per_area'] + if 'min_flow_ratio' in data and data['min_flow_ratio'] != auto_dict: + new_prop.min_flow_ratio = data['min_flow_ratio'] + if 'min_flow_per_area' in data and data['min_flow_per_area'] != auto_dict: + new_prop.min_flow_per_area = data['min_flow_per_area'] + if 'hmax_flow_ratio' in data and data['hmax_flow_ratio'] != auto_dict: + new_prop.hmax_flow_ratio = data['hmax_flow_ratio'] + if 'space_polygon_geometry' in data and \ + data['space_polygon_geometry'] is not None: + new_prop.space_polygon_geometry = \ + Face3D.from_dict(data['space_polygon_geometry']) + return new_prop
+ + +
+[docs] + def apply_properties_from_dict(self, data): + """Apply properties from a RoomDoe2Properties dictionary. + + Args: + data: A RoomDoe2Properties dictionary (typically coming from a Model). + """ + auto_dict = autocalculate.to_dict() + if 'assigned_flow' in data and data['assigned_flow'] != auto_dict: + self.assigned_flow = data['assigned_flow'] + if 'flow_per_area' in data and data['flow_per_area'] != auto_dict: + self.flow_per_area = data['flow_per_area'] + if 'min_flow_ratio' in data and data['min_flow_ratio'] != auto_dict: + self.min_flow_ratio = data['min_flow_ratio'] + if 'min_flow_per_area' in data and data['min_flow_per_area'] != auto_dict: + self.min_flow_per_area = data['min_flow_per_area'] + if 'hmax_flow_ratio' in data and data['hmax_flow_ratio'] != auto_dict: + self.hmax_flow_ratio = data['hmax_flow_ratio'] + if 'space_polygon_geometry' in data and \ + data['space_polygon_geometry'] is not None: + self.space_polygon_geometry = \ + Face3D.from_dict(data['space_polygon_geometry'])
+ + +
+[docs] + def apply_properties_from_user_data(self): + """Apply properties from a the user_data assigned to the host room. + + For this method to successfully assign properties from user_data, the + properties on this object must currently be None and the keys in + user_data must use the INP convention for each of the attributes, + which must be CAPITALIZED like the following: + + .. code-block:: python + + { + "ASSIGNED-FLOW": 100, # number in cfm + "FLOW/AREA": 1, # number in cfm/ft2 + "MIN-FLOW-RATIO": 0.3, # number between 0 and 1 + "MIN-FLOW/AREA": 0.3, # number in cfm/ft2 + "HMAX-FLOW-RATIO": 0.3 # number between 0 and 1 + } + """ + attrs = ('assigned_flow', 'flow_per_area', 'min_flow_ratio', + 'min_flow_per_area', 'hmax_flow_ratio') + data = self.host.user_data + if data is not None: + for key, attr in zip(MECH_AIRFLOW_KEYS, attrs): + if key in data and getattr(self, attr) is None: + try: + setattr(self, attr, data[key]) + except Exception: + pass # it's user_data; users are allowed to make mistakes
+ + +
+[docs] + def to_dict(self, abridged=False): + """Return Room Doe2 properties as a dictionary.""" + base = {'doe2': {}} + base['doe2']['type'] = 'RoomDoe2Properties' + if self.assigned_flow is not None: + base['doe2']['assigned_flow'] = self.assigned_flow + if self.flow_per_area is not None: + base['doe2']['flow_per_area'] = self.flow_per_area + if self.min_flow_ratio is not None: + base['doe2']['min_flow_ratio'] = self.min_flow_ratio + if self.min_flow_per_area is not None: + base['doe2']['min_flow_per_area'] = self.min_flow_per_area + if self.hmax_flow_ratio is not None: + base['doe2']['hmax_flow_ratio'] = self.hmax_flow_ratio + if self.space_polygon_geometry is not None: + base['doe2']['space_polygon_geometry'] = \ + self.space_polygon_geometry.to_dict() + return base
+ + +
+[docs] + def to_inp(self): + """Get RoomDoe2Properties as INP (Keywords, Values). + + Returns: + A tuple with two elements. + + - keywords: A list of text strings for keywords to assign to the room. + + - values: A list of text strings that aligns with the keywords and + denotes the value for each keyword. + """ + keywords = [] + values = [] + attrs = ('assigned_flow', 'flow_per_area', 'min_flow_ratio', + 'min_flow_per_area', 'hmax_flow_ratio') + for key, attr in zip(MECH_AIRFLOW_KEYS, attrs): + attr_value = getattr(self, attr) + if attr_value is not None: + keywords.append(key) + values.append(attr_value) + return keywords, values
+ + +
+[docs] + def duplicate(self, new_host=None): + """Get a copy of this object. + + Args: + new_host: A new Room object that hosts these properties. + If None, the properties will be duplicated with the same host. + """ + _host = new_host or self._host + new_room = RoomDoe2Properties( + _host, self.assigned_flow, self.flow_per_area, self.min_flow_ratio, + self.min_flow_per_area, self.hmax_flow_ratio, self.space_polygon_geometry) + return new_room
+ + +
+[docs] + def ToString(self): + return self.__repr__()
+ + + def __repr__(self): + return 'Room DOE2 Properties: [host: {}]'.format(self.host.display_name)
+ +
+ +
+ +
+
+
+
+

+ Back to top + +

+

+ © Copyright 2024, Ladybug Tools.
+ Created using Sphinx 8.0.2.
+

+
+
+ + \ No newline at end of file diff --git a/docs/_modules/honeybee_doe2/schedule.html b/docs/_modules/honeybee_doe2/schedule.html new file mode 100644 index 0000000..b7a174d --- /dev/null +++ b/docs/_modules/honeybee_doe2/schedule.html @@ -0,0 +1,995 @@ + + + + + + + honeybee_doe2.schedule — honeybee-doe2 documentation + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ +

Source code for honeybee_doe2.schedule

+# coding=utf-8
+"""honeybee-doe2 schedule translators."""
+from __future__ import division
+import re
+
+from ladybug.dt import Date, MONTHNAMES
+from ladybug.analysisperiod import AnalysisPeriod
+from honeybee.typing import clean_doe2_string, clean_ep_string
+from honeybee_energy.schedule.day import ScheduleDay
+from honeybee_energy.schedule.rule import ScheduleRule
+from honeybee_energy.schedule.ruleset import ScheduleRuleset
+from honeybee_energy.lib.scheduletypelimits import fractional, on_off, temperature
+
+from .config import RES_CHARS
+from .util import generate_inp_string, generate_inp_string_list_format, \
+    clean_inp_file_contents, parse_inp_string
+
+
+"""____________TRANSLATORS FROM HONEYBEE TO INP____________"""
+
+
+
+[docs] +def schedule_type_limit_to_inp(type_limit): + """Get the DOE-2 type for a honeybee-energy ScheduleTypeLimit.""" + if type_limit is None: + return 'FRACTION' + elif type_limit.display_name == 'Multiplier': + return "MULTIPLIER" + elif type_limit.unit_type == 'Temperature': + return 'TEMPERATURE' + else: + if type_limit.numeric_type == 'Discrete': + return 'ON/OFF' + else: + return 'FRACTION'
+ + + +
+[docs] +def schedule_day_to_inp(day_schedule, type_limit=None): + """Convert a ScheduleDay into a DAY-SCHEDULE INP string.""" + # setup the DOE-2 identifier and lists for keywords and values + doe2_id = clean_doe2_string(day_schedule.identifier, RES_CHARS) + type_text = schedule_type_limit_to_inp(type_limit) + keywords, values = ['TYPE'], [type_text] + hour_values = day_schedule.values_at_timestep(1) + + # convert temperature to fahrenheit if the type if temperature + if type_text == 'TEMPERATURE': + hour_values = [round(v * (9. / 5.) + 32., 2) for v in hour_values] + + # setup a function to format list of values correctly + def _format_day_values(values_to_format): + if len(values_to_format) == 1: + return '({})'.format(round(values_to_format[0], 3)) + elif len(values_to_format) < 5: + return str(tuple(round(v, 3) for v in values_to_format)) + else: # we have to format it with multiple lines + spc = ' ' * 31 + full_str = '(' + for i, v in enumerate(values_to_format): + if i == len(values_to_format) - 1: + full_str += str(round(v, 3)) + ')' + elif (i + 1) % 5 == 0: + full_str += str(round(v, 3)) + ',\n' + spc + else: + full_str += str(round(v, 3)) + ', ' + return full_str + + # loop through the hourly values and write them in the format DOE-2 likes + prev_count, prev_hour, prev_values = 0, 1, [hour_values[0]] + for i, val in enumerate(hour_values): + if i == 0: + continue # ignore the first value already in the list + if val == prev_values[-1]: + prev_count += 1 + if len(prev_values) > 1: + keywords.append('HOURS') + if prev_hour != i - 1: + values.append('({}, {})'.format(prev_hour, i - 1)) + keywords.append('VALUES') + values.append(_format_day_values(prev_values[:-1])) + prev_values = [prev_values[-1]] + prev_hour = i + else: + values.append('({}, {})'.format(prev_hour, i)) + keywords.append('VALUES') + values.append(_format_day_values(prev_values)) + prev_values = [prev_values[-1]] + prev_hour = i + 1 + continue # wait for the value to change + if prev_count == 0: # just keep assembling the list of values + prev_values.append(val) + else: + keywords.append('HOURS') + values.append('({}, {})'.format(prev_hour, i)) + keywords.append('VALUES') + values.append(_format_day_values(prev_values)) + prev_values = [val] + prev_hour = i + 1 + prev_count = 0 + keywords.append('HOURS') + values.append('({}, {})'.format(prev_hour, 24)) + keywords.append('VALUES') + values.append(_format_day_values(prev_values)) + + # return the INP string + return generate_inp_string(doe2_id, 'DAY-SCHEDULE', keywords, values)
+ + + +
+[docs] +def schedule_ruleset_to_inp(schedule): + """Convert a ScheduleRuleset into a WEEK-SCHEDULE-PD and SCHEDULE INP strings. + + Note that this method only outputs SCHEDULE and WEEK-SCHEDULE objects + However, to write the full schedule into an INP, the schedules's + day_schedules must also be written. + + Returns: + A tuple with two elements + + - year_schedule: Text string representation of the SCHEDULE + describing this schedule. + + - week_schedules: A list of WEEK-SCHEDULE-PD text strings that are + referenced in the year_schedule. + """ + # setup the DOE-2 identifier and lists for keywords and values + doe2_id = clean_doe2_string(schedule.identifier, RES_CHARS) + type_text = schedule_type_limit_to_inp(schedule.schedule_type_limit) + day_types = [ + 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', + 'Sunday', 'Holiday', 'Winter Design Day', 'Summer Design Day' + ] + + def _get_week_list(schedule, rule_indices): + """Get a list of the ScheduleDay identifiers applied on each day of the week.""" + week_list = [] + for dow in range(7): + for i in rule_indices: + if schedule._schedule_rules[i].week_apply_tuple[dow]: + day_sch_id = schedule._schedule_rules[i].schedule_day.identifier + week_list.append(clean_doe2_string(day_sch_id, RES_CHARS)) + break + else: # no rule applies; use default_day_schedule. + day_sch_id = schedule.default_day_schedule.identifier + week_list.append(clean_doe2_string(day_sch_id, RES_CHARS)) + week_list.append(week_list.pop(0)) # DOE-2 starts week on Monday; not Sunday + return week_list + + def _get_extra_week_fields(schedule): + """Get schedule identifiers of extra days in Schedule:Week.""" + # add summer and winter design days + week_fields = [] + if schedule._holiday_schedule is not None: + day_sch_id = schedule._holiday_schedule.identifier + week_fields.append(clean_doe2_string(day_sch_id, RES_CHARS)) + else: + day_sch_id = schedule._default_day_schedule.identifier + week_fields.append(clean_doe2_string(day_sch_id, RES_CHARS)) + if schedule._winter_designday_schedule is not None: + day_sch_id = schedule._winter_designday_schedule.identifier + week_fields.append(clean_doe2_string(day_sch_id, RES_CHARS)) + else: + day_sch_id = schedule._default_day_schedule.identifier + week_fields.append(clean_doe2_string(day_sch_id, RES_CHARS)) + if schedule._summer_designday_schedule is not None: + day_sch_id = schedule._summer_designday_schedule.identifier + week_fields.append(clean_doe2_string(day_sch_id, RES_CHARS)) + else: + day_sch_id = schedule._default_day_schedule.identifier + week_fields.append(clean_doe2_string(day_sch_id, RES_CHARS)) + return week_fields + + def _inp_week_schedule_from_rule_indices(schedule, rule_indices, week_index): + """Create an INP string of a week schedule from a list of rules indices.""" + week_sch_id = '{}_Week {}'.format(schedule.identifier, week_index) + week_sch_id = clean_doe2_string(week_sch_id, RES_CHARS) + week_fields = [] + # check rules that apply for the days of the week + week_fields.extend(_get_week_list(schedule, rule_indices)) + # add extra days (including summer and winter design days) + week_fields.extend(_get_extra_week_fields(schedule)) + week_keywords, week_values = ['TYPE'], [type_text] + day_list = [] + for day_type, day_sch in zip(day_types, week_fields): + day_list.append('"{}", $ {}'.format(day_sch, day_type)) + week_keywords.append('DAY-SCHEDULES') + week_values.append(day_list) + week_schedule = generate_inp_string_list_format( + week_sch_id, 'WEEK-SCHEDULE-PD', week_keywords, week_values) + return week_schedule, week_sch_id + + def _inp_week_schedule_from_week_list(schedule, week_list, week_index): + """Create an INP string of a week schedule from a list ScheduleDay identifiers. + """ + week_sch_id = '{}_Week {}'.format(schedule.identifier, week_index) + week_sch_id = clean_doe2_string(week_sch_id, RES_CHARS) + week_fields = list(week_list) + week_fields.append(week_fields.pop(0)) # DOE-2 starts week on Monday; not Sunday + week_fields.extend(_get_extra_week_fields(schedule)) + week_keywords, week_values = ['TYPE'], [type_text] + day_list = [] + for day_type, day_sch in zip(day_types, week_fields): + day_list.append('"{}", $ {}'.format(day_sch, day_type)) + week_keywords.append('DAY-SCHEDULES') + week_values.append(day_list) + week_schedule = generate_inp_string_list_format( + week_sch_id, 'WEEK-SCHEDULE-PD', week_keywords, week_values) + return week_schedule, week_sch_id + + # prepare to create a full Schedule:Year + week_schedules = [] + if schedule.is_single_week: # create the only one week schedule + wk_sch, wk_sch_id = \ + _inp_week_schedule_from_rule_indices(schedule, range(len(schedule)), 1) + week_schedules.append(wk_sch) + yr_wk_s_ids = [wk_sch_id] + yr_wk_dt_range = [[Date(1, 1), Date(12, 31)]] + else: # create a set of week schedules throughout the year + # loop through 365 days of the year to find unique combinations of rules + rules_each_day = [] + for doy in range(1, 366): + rules_on_doy = tuple(i for i, rule in enumerate(schedule._schedule_rules) + if rule.does_rule_apply_doy(doy)) + rules_each_day.append(rules_on_doy) + unique_rule_sets = set(rules_each_day) + # check if any combination yield the same week schedule and remove duplicates + week_tuples = [tuple(_get_week_list(schedule, rule_set)) + for rule_set in unique_rule_sets] + unique_week_tuples = list(set(week_tuples)) + # create the unique week schedules from the combinations of rules + week_sched_ids = [] + for i, week_list in enumerate(unique_week_tuples): + wk_schedule, wk_sch_id = \ + _inp_week_schedule_from_week_list(schedule, week_list, i + 1) + week_schedules.append(wk_schedule) + week_sched_ids.append(wk_sch_id) + # create a dictionary mapping unique rule index lists to week schedule ids + rule_set_map = {} + for rule_i, week_list in zip(unique_rule_sets, week_tuples): + unique_week_i = unique_week_tuples.index(week_list) + rule_set_map[rule_i] = week_sched_ids[unique_week_i] + # loop through all 365 days of the year to find when rules change + yr_wk_s_ids = [] + yr_wk_dt_range = [] + prev_week_sched = None + for doy in range(1, 366): + week_sched = rule_set_map[rules_each_day[doy - 1]] + if week_sched != prev_week_sched: # change to a new rule set + yr_wk_s_ids.append(week_sched) + if doy != 1: + yr_wk_dt_range[-1].append(Date.from_doy(doy - 1)) + yr_wk_dt_range.append([Date.from_doy(doy)]) + else: + yr_wk_dt_range.append([Date(1, 1)]) + prev_week_sched = week_sched + yr_wk_dt_range[-1].append(Date(12, 31)) + + # create the year fields + keywords, values = ['TYPE'], [type_text] + for i, (wk_sch_id, dt_range) in enumerate(zip(yr_wk_s_ids, yr_wk_dt_range)): + end_date = dt_range[1] + thru = 'THRU {} {}'.format(MONTHNAMES[end_date.month - 1].upper(), end_date.day) + keywords.append(thru) + values.append('"{}"'.format(wk_sch_id)) + year_schedule = generate_inp_string(doe2_id, 'SCHEDULE', keywords, values) + return year_schedule, week_schedules
+ + + +
+[docs] +def schedule_fixed_interval_to_inp(schedule): + """Convert a ScheduleFixedInterval to INP strings. + + Note that true Fixed Interval schedules are not supported by DOE-2 and there + is no way to faithfully translate them given that DOE-2 SCHEDULE objects have + a hard limit of 12 THRU statements. This method tries to write as best of + an approximation for the schedule as possible by averaging the hourly values + from each day of the fixed interval schedule. A separate day schedule will + be used for each month in an attempt to account for changes in the fixed + interval schedule over the year. + + All of this will allow the translation to succeed and gives roughly matching + behavior of the DOE-2 simulation to the EnergyPlus simulation. However, it is + recommended that users replace ScheduleFixedIntervals with ScheduleRulesets + that they know best represents the schedule. Or EnergyPlus should be used for + the simulation instead of DOE-2. + + Returns: + A tuple with three elements + + - year_schedule: Text string representation of the SCHEDULE + describing this schedule. + + - week_schedules: A list of WEEK-SCHEDULE text strings that are + referenced in the year_schedule. + + - day_schedules: A list of DAY-SCHEDULE-PD text strings that are + referenced in the week_schedules. + """ + # setup the DOE-2 identifier and lists for keywords and values + doe2_id = clean_doe2_string(schedule.identifier, RES_CHARS) + base_id = clean_doe2_string(schedule.identifier, RES_CHARS - 6) + type_text = schedule_type_limit_to_inp(schedule.schedule_type_limit) + + # loop through the months of the year and create appropriate schedules + day_schedules, week_schedules = [], [] + year_keywords, year_values = ['TYPE'], [type_text] + sch_data = schedule.data_collection + if sch_data.header.analysis_period.timestep != 1: + sch_data = sch_data.cull_to_timestep(1) + for month_i in range(1, 13): + # create the day schedules + month_name = AnalysisPeriod.MONTHNAMES[month_i] + month_days = AnalysisPeriod.NUMOFDAYSEACHMONTH[month_i - 1] + week_id = '{}{}'.format(base_id, month_name) + day_id = '{}{}'.format(week_id, 'Day') + period = AnalysisPeriod(st_month=month_i, end_month=month_i, end_day=month_days) + month_data = sch_data.filter_by_analysis_period(period) + mon_per_hr = month_data.average_monthly_per_hour() + hour_values = [round(v, 3) for v in mon_per_hr.values] + if type_text == 'TEMPERATURE': + hour_values = [round(v * (9. / 5.) + 32., 2) for v in hour_values] + day_keywords, day_values = ['TYPE', 'VALUES'], [type_text, hour_values] + day_inp_str = generate_inp_string_list_format( + day_id, 'DAY-SCHEDULE-PD', day_keywords, day_values) + day_schedules.append(day_inp_str) + # create week schedule + week_keywords = ['TYPE', 'DAYS', 'DAY-SCHEDULES'] + week_values = [type_text, '(ALL)', '("{}")'.format(day_id)] + week_sch = generate_inp_string( + week_id, 'WEEK-SCHEDULE', week_keywords, week_values) + week_schedules.append(week_sch) + # add values to the year schedules + thru = 'THRU {} {}'.format(month_name.upper(), period.end_day) + year_keywords.append(thru) + year_values.append('"{}"'.format(week_id)) + + # return all of the strings + year_schedule = generate_inp_string(doe2_id, 'SCHEDULE', year_keywords, year_values) + return year_schedule, week_schedules, day_schedules
+ + + +"""____________TRANSLATORS FROM INP TO HONEYBEE____________""" + + +
+[docs] +def schedule_type_limit_from_inp(inp_type_string): + """Get a honeybee-energy ScheduleTypeLimit for a given DOE-2 schedule type.""" + clean_type = inp_type_string.strip().upper() + if clean_type == 'ON/OFF': + return on_off + elif clean_type == 'TEMPERATURE': + return temperature + else: + return fractional
+ + + +
+[docs] +def schedule_day_from_inp(inp_string): + """Create a Honeybee ScheduleDay from a DOE-2 INP text string. + + Note that this method can accept both types of DOE-2 Day Schedules + (DAY-SCHEDULE, DAY-SCHEDULE-PD). + + Args: + inp_string: A text string fully describing a DOE-2 DAY-SCHEDULE. + """ + # parse the string into properties + u_name, command, keywords, values = parse_inp_string(inp_string) + # extract the hourly values of the schedule + hour_vals, sch_type = [], 'FRACTIONAL' + if command.upper() == 'DAY-SCHEDULE-PD': + field_dict = {k: v for k, v in zip(keywords, values)} + sch_type = field_dict['TYPE'].upper() + hour_vals_init = eval(field_dict['VALUES'].replace('&D', '"&D"'), {}) + if isinstance(hour_vals_init, tuple): + for val in hour_vals_init: + if val == '&D': + hour_vals.append(hour_vals[-1]) + else: + hour_vals.append(float(val)) + if len(hour_vals) < 24: + for _ in range(24 - len(hour_vals)): + hour_vals.append(hour_vals[-1]) + else: # a constant schedule + hour_vals = [hour_vals_init] * 24 + elif command.upper() == 'DAY-SCHEDULE': + prev_count = 0 + for key, val in zip(keywords, values): + if key == 'HOURS': + hr_range = eval(val, {}) + prev_count = hr_range[-1] - hr_range[0] + 1 + elif key == 'VALUES': + hr_vals = eval(val, {}) + if isinstance(hr_vals, tuple): + hour_vals.extend(hr_vals) + else: + hour_vals.extend([hr_vals] * prev_count) + elif key == 'TYPE': + sch_type = val.upper() + else: + raise ValueError('Schedule type "{}" is not recognized.'.format(command)) + # convert temperature values from F to C if type is TEMPERATURE + if sch_type == 'TEMPERATURE': + hour_vals = [round((v - 32.) * (5. / 9.), 2) for v in hour_vals] + return ScheduleDay.from_values_at_timestep(clean_ep_string(u_name), hour_vals)
+ + + +def _inp_day_schedule_dictionary(day_inp_strings): + """Get a dictionary of DaySchedule objects from an INP string list.""" + day_schedule_dict = {} + for sch_str in day_inp_strings: + sch_str = sch_str.strip() + try: + sch_obj = schedule_day_from_inp(sch_str) + day_schedule_dict[sch_obj.identifier] = sch_obj + except Exception: + pass # not a schedule that can be converted + return day_schedule_dict + + +
+[docs] +def extract_all_rules_from_inp_schedule_week( + week_inp_string, day_schedule_dict, start_date=None, end_date=None): + """Extract all ScheduleRule objects from an INP string of a WEEK-SCHEDULE-PD. + + Args: + week_inp_string: A text string fully describing a DOE-2 WEEK-SCHEDULE-PD. + day_schedule_dict: A dictionary with the identifiers of ScheduleDay objects + as keys and the corresponding ScheduleDay objects as values. These objects + will be used to build the ScheduleRules using the week_idf_string. + start_date: A ladybug Date object for the start of the period over which + the ScheduleRules apply. If None, Jan 1 will be used. + end_date: A ladybug Date object for the end of the period over which + the ScheduleRules apply. If None, Dec 31 will be used. + + Returns: + A tuple with five elements + + - u_name: The unique name of the WEEK-SCHEDULE-PD. + + - schedule_rules: A list of ScheduleRule objects that together describe + the WEEK-SCHEDULE-PD. + + - holiday: Text for the name of the SCHEDULE-DAY for the Holiday. + + - winter_dd: Text for the name of the SCHEDULE-DAY for the Winter Design Day. + + - summer_dd: Text for the name of the SCHEDULE-DAY for the Summer Design Day. + """ + # parse the string into properties + u_name, command, keywords, values = parse_inp_string(week_inp_string) + assert command.upper() == 'WEEK-SCHEDULE-PD', 'Week schedule must be in ' \ + 'WEEK-SCHEDULE-PD format. Got "{}".'.format(command) + # create the ScheduleRule objects from the parsed properties + schedule_rules = [] + field_dict = {k: v for k, v in zip(keywords, values)} + week_vals = eval(field_dict['DAY-SCHEDULES'].replace('&D', '"&D"'), {}) + applied_day_ids, prev_day = [], None + for i, day_sch_id in enumerate(week_vals[:7]): + day_sch_id = day_sch_id.replace('"', '') + day_sch_id = prev_day if day_sch_id == '&D' else day_sch_id + prev_day = day_sch_id # increment it for the next item + if day_sch_id not in applied_day_ids: # make a new rule + rule = ScheduleRule(day_schedule_dict[clean_ep_string(day_sch_id)], + start_date=start_date, end_date=end_date) + if i == 6: + rule.apply_day_by_dow(1) + else: + rule.apply_day_by_dow(i + 2) + schedule_rules.append(rule) + applied_day_ids.append(day_sch_id) + else: # edit one of the existing rules to apply it to the new day + sch_rule_index = applied_day_ids.index(day_sch_id) + rule = schedule_rules[sch_rule_index] + if i == 6: + rule.apply_day_by_dow(1) + else: + rule.apply_day_by_dow(i + 2) + # process any of the specified Holiday or Design Day schedules + holiday = week_vals[7] if len(week_vals) > 7 and week_vals[7] != '&D' \ + else prev_day + winter_dd = week_vals[8] if len(week_vals) > 8 and week_vals[8] != '&D' \ + else holiday + summer_dd = week_vals[9] if len(week_vals) > 9 and week_vals[9] != '&D' \ + else winter_dd + return u_name, schedule_rules, holiday, winter_dd, summer_dd
+ + + +def _inp_week_schedule_dictionary(week_inp_strings, day_sch_dict): + """Get a dictionary of ScheduleRule objects from WEEK-SCHEDULE-PD strings.""" + week_schedule_dict = {} + week_designday_dict = {} + for sch_str in week_inp_strings: + sch_str = sch_str.strip() + try: + u_name, rules, holiday, winter_dd, summer_dd = \ + extract_all_rules_from_inp_schedule_week(sch_str, day_sch_dict) + week_schedule_dict[u_name] = rules + week_designday_dict[u_name] = [ + day_sch_dict[clean_ep_string(holiday)], + day_sch_dict[clean_ep_string(summer_dd)], + day_sch_dict[clean_ep_string(winter_dd)] + ] + except Exception: + pass # schedule is not translate-able + return week_schedule_dict, week_designday_dict + + +def _convert_schedule_year(year_inp_string, week_sch_dict, week_dd_dict): + """Convert an INP string of a year SCHEDULE or SCHEDULE-PD to a ScheduleRuleset. + + Args: + year_inp_string: An INP text string describing a DOE-2 SCHEDULE or SCHEDULE-PD. + week_sch_dict: A dictionary of ScheduleRules from _inp_week_schedule_dictionary. + week_dd_dict: A dictionary of design day ScheduleDay output from the + _inp_week_schedule_dictionary method. + """ + # use the year schedule to bring it all together + u_name, command, keywords, values = parse_inp_string(year_inp_string) + field_dict = {k: v for k, v in zip(keywords, values)} + schedule_type = schedule_type_limit_from_inp(field_dict['TYPE']) + all_rules = [] + if command.upper() == 'SCHEDULE-PD': + week_vals = eval(field_dict['WEEK-SCHEDULES'], {}) + if not isinstance(week_vals, tuple): # only one week for the whole year + week_id = week_vals.replace('"', '') + rules = week_sch_dict[week_id] + all_rules.extend(rules) + else: + month_vals = eval(field_dict['MONTH'], {}) + day_vals = eval(field_dict['DAY'], {}) + prev_month, prev_day = 1, 1 + for month, day, week in zip(month_vals, day_vals, week_vals): + week_id = week.replace('"', '') + rules = week_sch_dict[week_id] + st_date = Date(int(prev_month), int(prev_day)) + end_date = Date(int(month), int(day)) + for rule in rules: + rule.start_date = st_date + rule.end_date = end_date + all_rules.extend(rules) + end_doy = end_date.doy + 1 if end_date.doy != 365 else 365 + next_day = Date.from_doy(end_doy) + prev_month, prev_day = next_day.month, next_day.day + elif command.upper() == 'SCHEDULE': + prev_month, prev_day = 1, 1 + for key, val in zip(keywords, values): + if key.startswith('THRU'): + week_id = val.replace('"', '') + rules = week_sch_dict[week_id] + st_date = Date(int(prev_month), int(prev_day)) + date_vals = key.replace('THRU ', '').split(' ') + date_str = '{} {}'.format(date_vals[1], date_vals[0].title()) + end_date = Date.from_date_string(date_str) + for rule in rules: + rule.start_date = st_date + rule.end_date = end_date + all_rules.extend(rules) + end_doy = end_date.doy + 1 if end_date.doy != 365 else 365 + next_day = Date.from_doy(end_doy) + prev_month, prev_day = next_day.month, next_day.day + + # check to be sure the schedule days don't already have a parent + for rule in all_rules: + if rule.schedule_day._parent is not None: + rule.schedule_day = rule.schedule_day.duplicate() + default_day_schedule = all_rules[0].schedule_day + holiday_sch, summer_dd_sch, winter_dd_sch = week_dd_dict[week_id] + if holiday_sch._parent is not None: + holiday_sch = holiday_sch.duplicate() + if summer_dd_sch._parent is not None: + summer_dd_sch = summer_dd_sch.duplicate() + if winter_dd_sch._parent is not None: + winter_dd_sch = summer_dd_sch.duplicate() + + # create the ScheduleRuleset and apply the design days + sched = ScheduleRuleset(clean_ep_string(u_name), default_day_schedule, + all_rules[1:], schedule_type) + ScheduleRuleset._apply_designdays_with_check( + sched, holiday_sch, summer_dd_sch, winter_dd_sch) + return sched + + +
+[docs] +def schedule_ruleset_from_inp(year_inp_string, week_inp_strings, day_inp_strings): + """Create a ScheduleRuleset from a DOE-2 INP text strings. + + Args: + year_inp_string: An INP text string describing a DOE-2 SCHEDULE or SCHEDULE-PD. + week_inp_strings: A list of INP text strings for all of the WEEK-SCHEDULE-PD + objects used in the SCHEDULE. + day_inp_strings: A list of text strings for all of the DAY-SCHEDULE or + DAY-SCHEDULE-PD objects used in the week_inp_strings. + """ + # process the schedule components + day_schedule_dict = _inp_day_schedule_dictionary(day_inp_strings) + week_sch_dict, week_dd_dict = _inp_week_schedule_dictionary( + week_inp_strings, day_schedule_dict) + + # convert the year_inp_string into a ScheduleRuleset + return _convert_schedule_year(year_inp_string, week_sch_dict, week_dd_dict)
+ + + +
+[docs] +def extract_all_schedule_ruleset_from_inp_file(inp_file): + """Extract all ScheduleRuleset objects from a DOE-2 INP file. + + Args: + inp_file: A path to an INP file containing objects for SCHEDULE + (or SCHEDULE-PD) and corresponding WEEK-SCHEDULE-PD and DAY-SCHEDULE + (or DAY-SCHEDULE-PD) objects. The SCHEDULE will be used to assemble + all of these into a ScheduleRuleset. + + Returns: + schedules -- A list of all Schedule objects in the INP file as + honeybee_energy ScheduleRuleset objects. + """ + # read the file and remove lines of comments + file_contents = clean_inp_file_contents(inp_file) + # extract all of the DAY-SCHEDULE objects + day_pattern1 = re.compile(r'(?i)(".*=.*DAY-SCHEDULE\n[\s\S]*?\.\.)') + day_pattern2 = re.compile(r'(?i)(".*=.*DAY-SCHEDULE-PD\n[\s\S]*?\.\.)') + day_sch_str = day_pattern1.findall(file_contents) + \ + day_pattern2.findall(file_contents) + day_schedule_dict = _inp_day_schedule_dictionary(day_sch_str) + # extract all of the WEEK-SCHEDULE-PD objects + week_pattern = re.compile(r'(?i)(".*=.*WEEK-SCHEDULE-PD\n[\s\S]*?\.\.)') + week_sch_str = week_pattern.findall(file_contents) + week_sch_dict, week_dd_dict = _inp_week_schedule_dictionary( + week_sch_str, day_schedule_dict) + # extract all of the SCHEDULE objects and convert to ScheduleRuleset + year_pattern1 = re.compile(r'(?i)(".*=.*SCHEDULE\n[\s\S]*?\.\.)') + year_pattern2 = re.compile(r'(?i)(".*=.*SCHEDULE-PD\n[\s\S]*?\.\.)') + year_sch_str = year_pattern1.findall(file_contents) + \ + year_pattern2.findall(file_contents) + + # translate each SCHEDULE and check to be sure ScheduleDay objects are unique + schedules = [] + for year_sch in year_sch_str: + try: + yr_sch = _convert_schedule_year(year_sch, week_sch_dict, week_dd_dict) + schedules.append(yr_sch) + except Exception: + pass # schedule is not translate-able + return schedules
+ + + +"""______EXTRA UTILITY FUNCTIONS RELATED TO SCHEDULES______""" + + +
+[docs] +def energy_trans_sch_to_transmittance(shade_obj): + """Try to extract the transmittance from the shade energy properties.""" + trans = 0 + trans_sch = shade_obj.properties.energy.transmittance_schedule + if trans_sch is not None: + if trans_sch.is_constant: + try: # assume ScheduleRuleset + trans = trans_sch.default_day_schedule[0] + except AttributeError: # ScheduleFixedInterval + trans = trans_sch.values[0] + else: # not a constant schedule; use the average transmittance + try: # assume ScheduleRuleset + sch_vals = trans_sch.values() + except Exception: # ScheduleFixedInterval + sch_vals = trans_sch.values + trans = round(sum(sch_vals) / len(sch_vals), 3) + return trans
+ +
+ +
+ +
+
+
+
+

+ Back to top + +

+

+ © Copyright 2024, Ladybug Tools.
+ Created using Sphinx 8.0.2.
+

+
+
+ + \ No newline at end of file diff --git a/docs/_modules/honeybee_doe2/simulation.html b/docs/_modules/honeybee_doe2/simulation.html new file mode 100644 index 0000000..242eb45 --- /dev/null +++ b/docs/_modules/honeybee_doe2/simulation.html @@ -0,0 +1,610 @@ + + + + + + + honeybee_doe2.simulation — honeybee-doe2 documentation + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ +

Source code for honeybee_doe2.simulation

+# coding=utf-8
+"""honeybee-doe2 simulation parameters."""
+from __future__ import division
+
+from honeybee.typing import clean_doe2_string, int_in_range
+from honeybee_energy.simulation.runperiod import RunPeriod
+
+from .config import GEO_CHARS
+from .util import generate_inp_string, header_comment_minor
+
+
+
+[docs] +class SimulationPar(object): + """Complete set of DOE-2 Simulation Settings. + + Args: + title: Text for the title of the project. (Default: *Unnamed*). + run_period: A honeybee-energy RunPeriod object to describe the time period + over which to run the simulation. (Default: Run for the whole year). + site: A SiteData object describing the site where the simulation is + run. (Default: HArtford, CT). + + Properties: + * title + * run_period + * site + """ + __slots__ = ('_title', '_run_period', '_site') + + def __init__(self, title='Unnamed', run_period=None, site=None): + """Initialize SimulationPar.""" + self.title = title + self.run_period = run_period + self.site = site + +
+[docs] + @classmethod + def from_dict(cls, data): + """Create a SimulationPar object from a dictionary. + + Args: + data: A SimulationPar dictionary in following the format below. + + .. code-block:: python + + { + "type": "SimulationPar", + "title": 'sample_project', # Text for the title + "run_period": {}, # Honeybee RunPeriod dictionary + "site": {}, # Honeybee SiteData dictionary + } + """ + assert data['type'] == 'SimulationPar', \ + 'Expected SimulationPar dictionary. Got {}.'.format(data['type']) + title = data['title'] if 'title' in data else 'Unnamed' + run_period = None + if 'run_period' in data and data['run_period'] is not None: + run_period = RunPeriod.from_dict(data['run_period']) + site = None + if 'site' in data and data['site'] is not None: + site = SiteData.from_dict(data['site']) + return cls(title, run_period, site)
+ + + @property + def title(self): + """Get or set text for the title of the project.""" + return self._title + + @title.setter + def title(self, value): + if value: + value = clean_doe2_string(value, GEO_CHARS) + else: + value = None + self._title = value + + @property + def run_period(self): + """Get or set a RunPeriod object for the time period to run the simulation.""" + return self._run_period + + @run_period.setter + def run_period(self, value): + if value is not None: + assert isinstance(value, RunPeriod), 'Expected RunPeriod for ' \ + 'SimulationPar run_period. Got {}.'.format(type(value)) + self._run_period = value + else: + self._run_period = RunPeriod() + + @property + def site(self): + """Get or set a SiteData object for the project site of the simulation.""" + return self._site + + @site.setter + def site(self, value): + if value is not None: + assert isinstance(value, SiteData), 'Expected SiteData for ' \ + 'SimulationPar site. Got {}.'.format(type(value)) + self._site = value + else: + self._site = SiteData() + +
+[docs] + def to_inp(self): + """Get an DOE-2 INP string representation of the SimulationPar.""" + # add the starting headers + sp_str = [] + sp_str.append(header_comment_minor('Abort, Diagnostics')) + sp_str.append(header_comment_minor('Global Parameters')) + sp_str.append(header_comment_minor('Title, Run Periods, Design Days, Holidays')) + # add the title and run period + title_str = \ + 'TITLE\n' \ + ' LINE-1 = *{}*\n' \ + ' ..\n'.format(self.title) + sp_str.append(title_str) + sp_str.append(self.run_period.to_inp()) + # add the site and building data + sp_str.append(header_comment_minor('Compliance Data')) + sp_str.append(header_comment_minor('Site and Building Data')) + sp_str.append(self.site.to_inp()) + return '\n'.join(sp_str)
+ + +
+[docs] + def to_dict(self): + """SimulationPar dictionary representation.""" + return { + 'type': 'SimulationPar', + 'title': self.title, + 'run_period': self.run_period.to_dict(), + 'site': self.site.to_dict(), + }
+ + +
+[docs] + def duplicate(self): + """Get a copy of this object.""" + return self.__copy__()
+ + +
+[docs] + def ToString(self): + """Overwrite .NET ToString.""" + return self.__repr__()
+ + + def __copy__(self): + return SimulationPar( + self.title, self.run_period.duplicate(), self.site.duplicate()) + + def __key(self): + """A tuple based on the object properties, useful for hashing.""" + return (self.title, hash(self.run_period), hash(self.site)) + + def __hash__(self): + return hash(self.__key()) + + def __eq__(self, other): + return isinstance(other, SimulationPar) and self.__key() == other.__key() + + def __ne__(self, other): + return not self.__eq__(other) + + def __repr__(self): + return 'DOE-2 SimulationPar: {}'.format(self.title)
+ + + +
+[docs] +class SiteData(object): + """Object to describe the project site of the simulation. + + Args: + altitude: A number for the altitude of the location above sea level + in Feet. (Default: 150). + + Properties: + * altitude + """ + __slots__ = ('_altitude',) + + def __init__(self, altitude=150): + """Initialize SimulationPar.""" + self.altitude = altitude + +
+[docs] + @classmethod + def from_dict(cls, data): + """Create a SiteData object from a dictionary. + + Args: + data: A SiteData dictionary in following the format below. + + .. code-block:: python + + { + "type": "SiteData", + "altitude": 100 # altitude above sea level (ft) + } + """ + assert data['type'] == 'SiteData', \ + 'Expected SiteData dictionary. Got {}.'.format(data['type']) + altitude = data['altitude'] if 'altitude' in data else 150 + return cls(altitude)
+ + + @property + def altitude(self): + """A number for the altitude of the location above sea level in Feet.""" + return self._altitude + + @altitude.setter + def altitude(self, value): + self._altitude = int_in_range(value, input_name='site data altitude') + +
+[docs] + def to_inp(self): + """Get an DOE-2 INP string representation of the SiteData.""" + # create the INP string for the site + keywords = ('ALTITUDE', 'C-STATE', 'C-WEATHER-FILE', + 'C-COUNTRY', 'C-901-LOCATION') + values = (self.altitude, '21', '*TMY2\\HARTFOCT.bin*', '1', '1092') + site_str = generate_inp_string('Site Data', 'SITE-PARAMETERS', keywords, values) + # create the INP string for the building data + keywords, values = ('HOLIDAYS',), ('"Standard US Holidays"',) + bldg_str = generate_inp_string( + 'Building Data', 'BUILD-PARAMETERS', keywords, values) + return site_str + bldg_str
+ + +
+[docs] + def to_dict(self): + """SiteData dictionary representation.""" + return { + 'type': 'SiteData', + 'altitude': self.altitude + }
+ + +
+[docs] + def duplicate(self): + """Get a copy of this object.""" + return self.__copy__()
+ + +
+[docs] + def ToString(self): + """Overwrite .NET ToString.""" + return self.__repr__()
+ + + def __copy__(self): + return SiteData(self.altitude) + + def __key(self): + """A tuple based on the object properties, useful for hashing.""" + return (self.altitude,) + + def __hash__(self): + return hash(self.__key()) + + def __eq__(self, other): + return isinstance(other, SiteData) and self.__key() == other.__key() + + def __ne__(self, other): + return not self.__eq__(other) + + def __repr__(self): + return self.to_inp()
+ + + +
+[docs] +def run_period_to_inp(run_period): + """Translate a honeybee-energy RunPeriod object to a DOE-2 INP string""" + # create the string for the run period + year = 2020 if run_period.is_leap_year else 2021 + keywords = ('BEGIN-MONTH', 'BEGIN-DAY', 'BEGIN-YEAR', + 'END-MONTH', 'END-DAY', 'END-YEAR') + values = (run_period.start_date.month, run_period.start_date.day, year, + run_period.end_date.month, run_period.end_date.day, year) + rp_str = generate_inp_string('Default Run Period', 'RUN-PERIOD-PD', keywords, values) + # create the string for the holidays + keywords, values = ('LIBRARY-ENTRY',), ('"US"',) + hol_str = generate_inp_string('Standard US Holidays', 'HOLIDAYS', keywords, values) + return rp_str + hol_str
+ +
+ +
+ +
+
+
+
+

+ Back to top + +

+

+ © Copyright 2024, Ladybug Tools.
+ Created using Sphinx 8.0.2.
+

+
+
+ + \ No newline at end of file diff --git a/docs/_modules/honeybee_doe2/util.html b/docs/_modules/honeybee_doe2/util.html new file mode 100644 index 0000000..5e05bd5 --- /dev/null +++ b/docs/_modules/honeybee_doe2/util.html @@ -0,0 +1,532 @@ + + + + + + + honeybee_doe2.util — honeybee-doe2 documentation + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ +

Source code for honeybee_doe2.util

+# coding=utf-8
+"""Various utilities used throughout the package."""
+from __future__ import division
+
+import re
+import os
+
+
+
+[docs] +def generate_inp_string(u_name, command, keywords, values): + """Get an INP string representation of a DOE-2 object. + + This method is written in a generic way so that it can describe practically + any element of the INP Building Description Language (BDL). + + Args: + u_name: Text for the unique, user-specified name of the object being created. + This must be 32 characters or less and not contain special or non-ASCII + characters. The clean_doe2_string method may be used to convert + strings to a format that is acceptable here. For example, a U-Name + of a space might be "Floor2W ClosedOffice5". + command: Text indicating the type of instruction that the DOE-2 object + executes. Commands are typically in capital letters and examples + include POLYGON, FLOOR, SPACE, EXTERIOR-WALL, WINDOW, CONSTRUCTION, etc. + keywords: A list of text with the same length as the values that denote + the attributes of the DOE-2 object. + values: A list of values with the same length as the keywords that describe + the values of the attributes for the object. + + Returns: + inp_str -- A DOE-2 INP string representing a single object. + """ + space_count = tuple((25 - len(str(n))) for n in keywords) + spc = tuple(s_c * ' ' if s_c > 0 else ' ' for s_c in space_count) + body_str = '\n'.join(' {}{}= {}'.format(kwd, s, val) + for kwd, s, val in zip(keywords, spc, values)) + inp_str = '"{}" = {}\n{}\n ..\n'.format(u_name, command, body_str) + return inp_str
+ + + +
+[docs] +def generate_inp_string_list_format(u_name, command, keywords, values): + """Get an INP string of a DOE-2 object with nicer formatting for list values. + + This method will process any values that are a list or tuple and format them + such that they are indented and more readable. This method is written in a + generic way so that it can describe practically any element of the INP Building + Description Language (BDL). + + Args: + u_name: Text for the unique, user-specified name of the object being created. + This must be 32 characters or less and not contain special or non-ASCII + characters. The clean_doe2_string method may be used to convert + strings to a format that is acceptable here. For example, a U-Name + of a space might be "Floor2W ClosedOffice5". + command: Text indicating the type of instruction that the DOE-2 object + executes. Commands are typically in capital letters and examples + include POLYGON, FLOOR, SPACE, EXTERIOR-WALL, WINDOW, CONSTRUCTION, etc. + keywords: A list of text with the same length as the values that denote + the attributes of the DOE-2 object. + values: A list of values with the same length as the keywords that describe + the values of the attributes for the object. The items in this list + can be list themselves, in which case they will be translated with + nice indented formatting. + + Returns: + inp_str -- A DOE-2 INP string representing a single object. + """ + space_count = tuple((25 - len(str(n))) for n in keywords) + spc = tuple(s_c * ' ' if s_c > 0 else ' ' for s_c in space_count) + body_strs = [] + for kwd, s, val in zip(keywords, spc, values): + if isinstance(val, (list, tuple)): + body_strs.append(' {}{}= ('.format(kwd, s)) + for v in val: + body_strs.append(' {},'.format(v)) + body_strs.append(' )') + else: + body_strs.append(' {}{}= {}'.format(kwd, s, val)) + body_str = '\n'.join(body_strs) + inp_str = '"{}" = {}\n{}\n ..\n'.format(u_name, command, body_str) + return inp_str
+ + + +
+[docs] +def clean_inp_file_contents(inp_file): + """Get the contents of an INP file without any commented lines. + + These comment lines might interfere with regex parsing if they are present. + + Args: + inp_file: A path to an IDF file containing objects to be parsed. + + Returns: + A single string for the clean IDF file contents. + """ + assert os.path.isfile(inp_file), 'Cannot find an INP file at: {}'.format(inp_file) + file_lines = [] + with open(inp_file, 'r') as ep_file: + for line in ep_file: + if not line.startswith('$'): + file_lines.append(line) + return ''.join(file_lines)
+ + + +
+[docs] +def parse_inp_string(inp_string): + """Parse an INP string of a single DOE-2 object into a list of values. + + Note that this method is only equipped to parse DOE-2 test strings + that originate from eQuest or from this package. It has not yet + been generalized to parse all formats of text formats that can + appear in a DOE-2 file. + + Args: + inp_string: An INP string for a single DOE-2 object. + + Returns: + A tuple with four elements. + + - u_name: Text for the unique name of the object. + + - command: Text for the type of instruction that the DOE-2 object executes. + + - keywords: A list of text with the same length as the values that denote + the attributes of the DOE-2 object. + + - values: A list of values with the same length as the keywords that describe + the values of the attributes for the object. + """ + inp_string = inp_string.strip() + inp_strings = inp_string.split('..') + assert len(inp_strings) == 2, 'Received more than one object in inp_string.' + inp_string = re.sub(r'\$.*\n', '\n', inp_strings[0]) # remove all comments + doe2_fields = [e_str.strip() for e_str in inp_string.split('=')] + u_name = doe2_fields.pop(0).replace('"', '') + split_field_1 = doe2_fields[0].split('\n') + command = split_field_1[0].strip() + keywords = [split_field_1[1].strip()] + values = [] + for field in doe2_fields[1:]: + split_field = [f.strip() for f in field.split('\n')] + if len(split_field) == 1: + values.append(split_field[0]) + elif len(split_field) == 2 and not split_field[0].endswith(','): + values.append(split_field[0]) + keywords.append(split_field[1]) + else: + v_lines, end_val = [], False + for row in split_field: + if row.endswith(',') or row.endswith('('): + v_lines.append(row) + elif not end_val: + v_lines.append(row) + end_val = True + else: + keywords.append(row) + values.append(' '.join(v_lines)) + return u_name, command, keywords, values
+ + + +
+[docs] +def header_comment_minor(header_text): + """Create a header given header_text, which can help organize the INP file contents. + """ + return \ + '$ ---------------------------------------------------------\n' \ + '$ {}\n' \ + '$ ---------------------------------------------------------\n'\ + '\n'.format(header_text)
+ + + +
+[docs] +def header_comment_major(header_text): + """Create a header given header_text, which can help organize the INP file contents. + """ + return \ + '$ *********************************************************\n' \ + '$ ** **\n' \ + '$ {}\n' \ + '$ ** **\n' \ + '$ *********************************************************\n'\ + '\n'.format(header_text)
+ + + +
+[docs] +def switch_statement_id(value): + """Convert a string into a 4-character ID that can be used for switch statements. + + This is needed to deal with the major limitations that DOE-2 places on + switch statement IDs, where every ID must be 4 characters + """ + # first remove dangerous characters + val = re.sub(r'[^.A-Za-z0-9:]', '', value) # remove all unusable characters + val = val.replace(' ', '').replace('_', '') # remove spaces and underscores + + # the user has formatted their program id specifically for switch statements + if len(val) <= 4: + return val + + # remove lower-case vowels for readability + val = re.sub(r'[aeiouy_\-]', '', val) + if '::' in val: # program id originating from openstudio-standards + val = val.split('::')[-1] + if len(val) >= 4: + return val[:4] + + # some special user-generated program id + val = val.replace(':', '') + if len(val) >= 4: + return val[-4:] + return val
+ +
+ +
+ +
+
+
+
+

+ Back to top + +

+

+ © Copyright 2024, Ladybug Tools.
+ Created using Sphinx 8.0.2.
+

+
+
+ + \ No newline at end of file diff --git a/docs/_modules/honeybee_doe2/writer.html b/docs/_modules/honeybee_doe2/writer.html new file mode 100644 index 0000000..934202c --- /dev/null +++ b/docs/_modules/honeybee_doe2/writer.html @@ -0,0 +1,1380 @@ + + + + + + + honeybee_doe2.writer — honeybee-doe2 documentation + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ +

Source code for honeybee_doe2.writer

+# coding=utf-8
+"""Methods to write to inp."""
+from __future__ import division
+import os
+import math
+
+from ladybug_geometry.geometry2d import Vector2D, Point2D
+from ladybug_geometry.geometry3d import Vector3D, Point3D, LineSegment3D, Plane, Face3D
+from ladybug_geometry.bounding import bounding_box
+from honeybee.typing import clean_doe2_string, clean_string
+from honeybee.boundarycondition import Surface
+from honeybee.facetype import Wall, Floor, RoofCeiling
+from honeybee_energy.schedule.ruleset import ScheduleRuleset
+from honeybee_energy.construction.opaque import OpaqueConstruction
+from honeybee_energy.construction.air import AirBoundaryConstruction
+from honeybee_energy.lib.constructionsets import generic_construction_set
+
+from .config import DOE2_TOLERANCE, DOE2_ANGLE_TOL, GEO_DEC_COUNT, RECT_WIN_SUBD, \
+    DOE2_INTERIOR_BCS, GEO_CHARS, RES_CHARS
+from .util import generate_inp_string, header_comment_minor, \
+    header_comment_major, switch_statement_id
+from .grouping import group_rooms_by_doe2_level, group_rooms_by_doe2_hvac
+from .construction import opaque_material_to_inp, opaque_construction_to_inp, \
+    window_construction_to_inp, door_construction_to_inp, air_construction_to_inp
+from .schedule import energy_trans_sch_to_transmittance
+from .load import people_to_inp, lighting_to_inp, electric_equipment_to_inp, \
+    hot_water_and_gas_to_inp, infiltration_to_inp, setpoint_to_inp, ventilation_to_inp
+from .programtype import program_type_to_inp, switch_dict_to_space_inp, \
+    switch_dict_to_zone_inp
+from .simulation import SimulationPar
+
+
+
+[docs] +def face_3d_to_inp(face_3d, parent_name='HB object'): + """Convert a Face3D into a DOE-2 POLYGON string and info to position it in space. + + In this operation, all holes in the Face3D are ignored since they are not + supported by DOE-2. Collapsing the boundary and holes into a single list + that winds inward to cut out the holes will cause eQuest to raise an error. + + Args: + face_3d: A ladybug-geometry Face3D object for which a INP POLYGON + string will be generated. + parent_name: The name of the parent object that will reference this + POLYGON. This will be used to generate a name for the polygon. + Note that this should ideally have 24 characters or less so that + the result complies with the strict 32 character limit of DOE-2 + identifiers. + + Returns: + A tuple with two elements. + + - polygon_str: Text string for the INP polygon. + + - position_info: A tuple of values used to locate the Polygon in 3D space. + The order of properties in the tuple is as follows: (ORIGIN, TILT, AZIMUTH). + """ + # TODO: Consider adding a workaround for the DOE-2 limit of 40 vertices + # perhaps we can just say NO-SHAPE and specify AREA, VOLUME, and HEIGHT + # get the main properties that place the geometry in 3D space + pts_3d = face_3d.lower_left_counter_clockwise_boundary + tilt, azimuth = math.degrees(face_3d.tilt), math.degrees(face_3d.azimuth) + llc_origin = face_3d.lower_left_corner + llc_coords = [] + for coord in llc_origin: # avoid signed zero + coord = round(coord, GEO_DEC_COUNT) + clean_coord = 0.0 if coord == 0 else coord + llc_coords.append(clean_coord) + llc_origin = Point3D.from_array(llc_coords) + + # get the 2D vertices in the plane of the Face + if DOE2_ANGLE_TOL <= tilt <= 180 - DOE2_ANGLE_TOL: # vertical or tilted + proj_y = Vector3D(0, 0, 1).project(face_3d.normal) + proj_x = proj_y.rotate(face_3d.normal, math.pi / -2) + ref_plane = Plane(face_3d.normal, llc_origin, proj_x) + vertices = [ref_plane.xyz_to_xy(pt) for pt in pts_3d] + else: # horizontal; ensure vertices are always counterclockwise from above + azimuth = 180.0 + llc = Point2D(llc_origin.x, llc_origin.y) + vertices = [Point2D(v.x - llc.x, v.y - llc.y) for v in pts_3d] + if tilt > 180 - DOE2_ANGLE_TOL: + vertices = [Point2D(v.x, -v.y) for v in vertices] + + # format the vertices into a POLYGON string + verts_values = [] + for pt in vertices: + x_coord = round(pt.x, GEO_DEC_COUNT) + y_coord = round(pt.y, GEO_DEC_COUNT) + if x_coord == 0: # avoid signed zero + x_coord = 0.0 + if y_coord == 0: # avoid signed zero + y_coord = 0.0 + verts_values.append('({}, {})'.format(x_coord, y_coord)) + verts_keywords = tuple('V{}'.format(i + 1) for i in range(len(verts_values))) + poly_name = '{} Plg'.format(parent_name) + polygon_str = generate_inp_string(poly_name, 'POLYGON', verts_keywords, verts_values) + position_info = (llc_origin, tilt, azimuth) + return polygon_str, position_info
+ + + +
+[docs] +def face_3d_to_inp_rectangle(face_3d): + """Convert a Face3D into parameters needed to represent it as a rectangle in INP. + + The output of this function will be None if the Face3D cannot be represented + as an INP rectangle without alteration of the geometry. + + Args: + face_3d: A ladybug-geometry Face3D object which will be tested for whether + it can be represented as a rectangle in INP. + + Returns: + Will be None if the Face3D cannot be translated to a WIDTH and HEIGHT + without alteration of the geometry. If the geometry can be successfully + translated, this will be a tuple with five elements. + + - width: A number for the width of the rectangle. + + - height: A number for the height of the rectangle. + + - llc_origin: A Point3D for the lower-left corner of the Shade + geometry origin. + + - tilt: A number for the tilt of the rectangle in degrees. + + - azimuth: A number for the azimuth of the rectangle in degrees. + """ + if face_3d.boundary_polygon2d.is_rectangle(math.radians(DOE2_ANGLE_TOL)): + # check to see at least one of the segments is horizontal + are_segs_hor = [seg.max.z - seg.min.z <= DOE2_TOLERANCE + for seg in face_3d.boundary_segments] + if True in are_segs_hor: + pts_3d = face_3d.lower_left_counter_clockwise_boundary + llc_origin = pts_3d[0] + width = llc_origin.distance_to_point(pts_3d[1]) + height = llc_origin.distance_to_point(pts_3d[-1]) + if all(is_horiz for is_horiz in are_segs_hor): # horizontal; adjust azimuth + tilt = 0.0 + hgt_vec = llc_origin - pts_3d[-1] + hgt_vec_2d = Vector2D(hgt_vec.x, hgt_vec.y) + azimuth = math.degrees(Vector2D(0, 1).angle_clockwise(hgt_vec_2d)) + else: # vertical or tilted; use Face3D azimuth + tilt = math.degrees(face_3d.tilt) + azimuth = math.degrees(face_3d.azimuth) + return width, height, llc_origin, tilt, azimuth + return None
+ + + +
+[docs] +def shade_mesh_to_inp(shade_mesh, equest_version=None): + """Generate an INP string representation of a ShadeMesh. + + Args: + shade_mesh: A honeybee ShadeMesh for which an INP representation + will be returned. + equest_version: An optional text string to denote the version of eQuest + for which the Shade INP definition will be generated. If unspecified + or unrecognized, the latest version of eQuest will be used. + + Returns: + A tuple with two elements. + + - shade_polygons: A list of text strings for the INP polygons needed + to represent the ShadeMesh. + + - shade_defs: A list of text strings for the INP definitions needed + to represent the ShadeMesh. + """ + # extract the transmittance properties of the shade + base_id = clean_doe2_string(shade_mesh.identifier, GEO_CHARS) + trans_kwd = ['TRANSMITTANCE'] + trans_vals = [energy_trans_sch_to_transmittance(shade_mesh)] + t_sch_obj = shade_mesh.properties.energy.transmittance_schedule + if t_sch_obj is not None and not t_sch_obj.is_constant: + trans_kwd.append('SHADE-SCHEDULE') + t_shc_id = clean_doe2_string(t_sch_obj.identifier, RES_CHARS) + trans_vals.append('"{}"'.format(t_shc_id)) + + # set up collector lists and properties for all shades + shade_polygons, shade_defs = [], [] + + # loop through the mesh faces and create individual shade objects + for i, face in enumerate(shade_mesh.geometry.face_vertices): + doe2_id = '{}{}'.format(base_id, i) + f_geo = Face3D(face) + shd_geo = f_geo if f_geo.altitude > 0 else f_geo.flip() + clean_geo = shd_geo.remove_colinear_vertices(DOE2_TOLERANCE) + rect_info = face_3d_to_inp_rectangle(clean_geo) + if equest_version == '3.64': + shade_polygon = '' + if rect_info is not None: + width, height, origin, tilt, az = rect_info + else: # take the bounding rectangle around the Face3D + min_pt, max_pt = clean_geo.min, clean_geo.max + f_tilt = math.degrees(clean_geo.tilt) + if 90 - DOE2_ANGLE_TOL <= f_tilt <= 90 + DOE2_ANGLE_TOL: # vertical + seg_dir = Vector3D(max_pt.x - min_pt.x, max_pt.y - min_pt.y, 0) + seg = LineSegment3D(min_pt, seg_dir) + ext_dir = Vector3D(0, 0, max_pt.z - min_pt.z) + else: # horizontal or tilted + seg = LineSegment3D(min_pt, Vector3D(max_pt.x - min_pt.x, 0, 0)) + ext_dir = Vector3D(0, max_pt.y - min_pt.y, max_pt.z - min_pt.z) + rect_geo = Face3D.from_extrusion(seg, ext_dir) + width, height, origin, tilt, az = face_3d_to_inp_rectangle(rect_geo) + geo_kwd, geo_vals = ['HEIGHT', 'WIDTH'], [height, width] + elif rect_info is not None: # shade is a rectangle; translate it without POLYGON + width, height, origin, tilt, az = rect_info + geo_kwd = ['SHAPE', 'HEIGHT', 'WIDTH'] + geo_vals = ['RECTANGLE', height, width] + else: # otherwise, create the polygon string from the geometry + shade_polygon, pos_info = face_3d_to_inp(clean_geo, doe2_id) + shade_polygons.append(shade_polygon) + origin, tilt, az = pos_info + geo_kwd = ['SHAPE', 'POLYGON'] + geo_vals = ['POLYGON', '"{} Plg"'.format(doe2_id)] + geo_kwd.extend(('X-REF', 'Y-REF', 'Z-REF', 'TILT', 'AZIMUTH')) + geo_vals.extend((round(origin.x, GEO_DEC_COUNT), round(origin.y, GEO_DEC_COUNT), + round(origin.z, GEO_DEC_COUNT), tilt, az)) + # create the final shade definition, which includes the position information + keywords = geo_kwd + trans_kwd + values = geo_vals + trans_vals + shade_def = generate_inp_string(doe2_id, 'FIXED-SHADE', keywords, values) + shade_defs.append(shade_def) + + return shade_polygons, shade_defs
+ + + +
+[docs] +def shade_to_inp(shade, equest_version=None): + """Generate an INP string representation of a Shade. + + Args: + shade: A honeybee Shade for which an INP representation will be returned. + equest_version: An optional text string to denote the version of eQuest + for which the Shade INP definition will be generated. If unspecified + or unrecognized, the latest version of eQuest will be used. + + Returns: + A tuple with two elements. + + - shade_polygon: Text string for the INP polygon for the Shade. + + - shade_def: Text string for the INP definition of the Shade. + """ + # extract the transmittance properties of the shade + doe2_id = clean_doe2_string(shade.identifier, GEO_CHARS) + trans_kwd = ['TRANSMITTANCE'] + trans_vals = [energy_trans_sch_to_transmittance(shade)] + t_sch_obj = shade.properties.energy.transmittance_schedule + if t_sch_obj is not None and not t_sch_obj.is_constant: + trans_kwd.append('SHADE-SCHEDULE') + t_shc_id = clean_doe2_string(t_sch_obj.identifier, RES_CHARS) + trans_vals.append('"{}"'.format(t_shc_id)) + + # extract the geometry properties of the shade + shd_geo = shade.geometry if shade.altitude > 0 else shade.geometry.flip() + clean_geo = shd_geo.remove_colinear_vertices(DOE2_TOLERANCE) + rect_info = face_3d_to_inp_rectangle(clean_geo) + if equest_version == '3.64': + shade_polygon = '' + if rect_info is not None: + width, height, origin, tilt, az = rect_info + else: # take the bounding rectangle around the Face3D + min_pt, max_pt = clean_geo.min, clean_geo.max + f_tilt = math.degrees(clean_geo.tilt) + if 90 - DOE2_ANGLE_TOL <= f_tilt <= 90 + DOE2_ANGLE_TOL: # vertical + seg_dir = Vector3D(max_pt.x - min_pt.x, max_pt.y - min_pt.y, 0) + seg = LineSegment3D(min_pt, seg_dir) + ext_dir = Vector3D(0, 0, max_pt.z - min_pt.z) + else: # horizontal or tilted + seg = LineSegment3D(min_pt, Vector3D(max_pt.x - min_pt.x, 0, 0)) + ext_dir = Vector3D(0, max_pt.y - min_pt.y, max_pt.z - min_pt.z) + rect_geo = Face3D.from_extrusion(seg, ext_dir) + width, height, origin, tilt, az = face_3d_to_inp_rectangle(rect_geo) + geo_kwd, geo_vals = ['HEIGHT', 'WIDTH'], [height, width] + elif rect_info is not None: # shade is a rectangle; translate it without POLYGON + width, height, origin, tilt, az = rect_info + geo_kwd = ['SHAPE', 'HEIGHT', 'WIDTH'] + geo_vals = ['RECTANGLE', height, width] + shade_polygon = '' + else: # otherwise, create the polygon string from the geometry + shade_polygon, pos_info = face_3d_to_inp(clean_geo, doe2_id) + origin, tilt, az = pos_info + geo_kwd = ['SHAPE', 'POLYGON'] + geo_vals = ['POLYGON', '"{} Plg"'.format(doe2_id)] + geo_kwd.extend(('X-REF', 'Y-REF', 'Z-REF', 'TILT', 'AZIMUTH')) + geo_vals.extend((round(origin.x, GEO_DEC_COUNT), round(origin.y, GEO_DEC_COUNT), + round(origin.z, GEO_DEC_COUNT), tilt, az)) + + # create the final shade definition, which includes the position information + keywords = geo_kwd + trans_kwd + values = geo_vals + trans_vals + shade_def = generate_inp_string(doe2_id, 'FIXED-SHADE', keywords, values) + return shade_polygon, shade_def
+ + + +
+[docs] +def door_to_inp(door): + """Generate an INP string representation of a Door. + + Doors assigned to a parent Face will use the parent Face plane in order to + determine their XY coordinates. Otherwise, the Door's own plane will be used. + + Note that the resulting string does not include full construction definitions. + Also note that shades assigned to the Door are not included in the resulting + string. To write these objects into a final string, you must loop through the + Door.shades, and call the to.inp method on each one. + + Args: + door: A honeybee Door for which an INP representation will be returned. + + Returns: + Text string for the INP definition of the Door. + """ + # extract the plane information from the parent geometry + if door.has_parent: + parent_llc = door.parent.geometry.lower_left_corner + rel_plane = door.parent.geometry.plane + else: + parent_llc = door.geometry.lower_left_corner + rel_plane = door.geometry.plane + # get the LLC and URC of the bounding rectangle of the door + apt_llc = door.geometry.lower_left_corner + apt_urc = door.geometry.upper_right_corner + + # determine the width and height and origin in the parent coordinate system + if DOE2_ANGLE_TOL <= door.tilt <= 180 - DOE2_ANGLE_TOL: # vertical or tilted + proj_y = Vector3D(0, 0, 1).project(rel_plane.n) + proj_x = proj_y.rotate(rel_plane.n, math.pi / -2) + else: # located within the XY plane + proj_x = Vector3D(1, 0, 0) + ref_plane = Plane(rel_plane.n, parent_llc, proj_x) + min_2d = ref_plane.xyz_to_xy(apt_llc) + max_2d = ref_plane.xyz_to_xy(apt_urc) + width = round(max_2d.x - min_2d.x, GEO_DEC_COUNT) + height = round(max_2d.y - min_2d.y, GEO_DEC_COUNT) + + # create the aperture definition + doe2_id = clean_doe2_string(door.identifier, GEO_CHARS) + dr_con = door.properties.energy.construction + constr_o_name = dr_con.identifier if isinstance(dr_con, OpaqueConstruction) \ + else dr_con.identifier + '_d' + constr = clean_doe2_string(constr_o_name, RES_CHARS) + keywords = ('X', 'Y', 'WIDTH', 'HEIGHT', 'CONSTRUCTION') + values = (round(min_2d.x, GEO_DEC_COUNT), round(min_2d.y, GEO_DEC_COUNT), + width, height, '"{}"'.format(constr)) + door_def = generate_inp_string(doe2_id, 'DOOR', keywords, values) + return door_def
+ + + +
+[docs] +def aperture_to_inp(aperture): + """Generate an INP string representation of a Aperture. + + Apertures assigned to a parent Face will use the parent Face plane in order to + determine their XY coordinates. Otherwise, the Aperture's own plane will be used. + + Note that the resulting string does not include full construction definitions. + Also note that shades assigned to the Aperture are not included in the resulting + string. To write these objects into a final string, you must loop through the + Aperture.shades, and call the to.inp method on each one. + + Args: + aperture: A honeybee Aperture for which an INP representation will be returned. + + Returns: + Text string for the INP definition of the Aperture. + """ + # extract the plane information from the parent geometry + if aperture.has_parent: + parent_llc = aperture.parent.geometry.lower_left_corner + rel_plane = aperture.parent.geometry.plane + else: + parent_llc = aperture.geometry.lower_left_corner + rel_plane = aperture.geometry.plane + # get the LLC and URC of the bounding rectangle of the aperture + apt_llc = aperture.geometry.lower_left_corner + apt_urc = aperture.geometry.upper_right_corner + + # determine the width and height and origin in the parent coordinate system + if DOE2_ANGLE_TOL <= aperture.tilt <= 180 - DOE2_ANGLE_TOL: # vertical or tilted + proj_y = Vector3D(0, 0, 1).project(rel_plane.n) + proj_x = proj_y.rotate(rel_plane.n, math.pi / -2) + else: # located within the XY plane + proj_x = Vector3D(1, 0, 0) + ref_plane = Plane(rel_plane.n, parent_llc, proj_x) + min_2d = ref_plane.xyz_to_xy(apt_llc) + max_2d = ref_plane.xyz_to_xy(apt_urc) + width = round(max_2d.x - min_2d.x, GEO_DEC_COUNT) + height = round(max_2d.y - min_2d.y, GEO_DEC_COUNT) + + # create the aperture definition + doe2_id = clean_doe2_string(aperture.identifier, GEO_CHARS) + constr_o_name = aperture.properties.energy.construction.identifier + constr = clean_doe2_string(constr_o_name, RES_CHARS) + keywords = ('X', 'Y', 'WIDTH', 'HEIGHT', 'GLASS-TYPE') + values = (round(min_2d.x, GEO_DEC_COUNT), round(min_2d.y, GEO_DEC_COUNT), + width, height, '"{}"'.format(constr)) + aperture_def = generate_inp_string(doe2_id, 'WINDOW', keywords, values) + return aperture_def
+ + + +
+[docs] +def face_to_inp(face, space_origin=Point3D(0, 0, 0), location=None): + """Generate an INP string representation of a Face. + + Note that the resulting string does not include full construction definitions. + + Also note that this does not include any of the shades assigned to the Face + in the resulting string. Nor does it include the strings for the + apertures or doors. To write these objects into a final string, you must + loop through the Face.apertures, and Face.doors and call the to.inp method + on each one. + + Args: + face: A honeybee Face for which an INP representation will be returned. + space_origin: A ladybug-geometry Point3D for the origin of the space + to which the Face is assigned. (Default: (0, 0, 0)). + location: An optional text string to note the DOE-2 LOCATION of the + Face on the parent Room. When this is specified, the Face will be + written without using a POLYGON. (Default: None). + + Returns: + A tuple with two elements. + + - face_polygon: Text string for the INP polygon for the Face. + + - face_def: Text string for the INP definition of the Face. + """ + # set up attributes based on the face type and boundary condition + f_type_str, bc_str = str(face.type), str(face.boundary_condition) + if bc_str == 'Outdoors': + doe2_type = 'EXTERIOR-WALL' # DOE2 uses walls for a lot of things + if f_type_str == 'RoofCeiling': + doe2_type = 'ROOF' + elif bc_str in DOE2_INTERIOR_BCS or f_type_str == 'AirBoundary': + doe2_type = 'INTERIOR-WALL' # DOE2 uses walls for a lot of things + else: # likely ground or some other fancy ground boundary condition + doe2_type = 'UNDERGROUND-WALL' + + # process the face identifier and the construction + doe2_id = clean_doe2_string(face.identifier, GEO_CHARS) + constr_o_name = face.properties.energy.construction.identifier + constr = clean_doe2_string(constr_o_name, RES_CHARS) + + # process the geometry + if location is not None: + keywords = ['CONSTRUCTION', 'LOCATION'] + values = ['"{}"'.format(constr), location] + face_polygon = '' + else: # create the polygon string from the geometry + f_geo = face.geometry.remove_colinear_vertices(DOE2_TOLERANCE) + face_polygon, pos_info = face_3d_to_inp(f_geo, doe2_id) + face_origin, tilt, az = pos_info + origin = face_origin - space_origin + keywords = ['POLYGON', 'CONSTRUCTION', 'TILT', 'AZIMUTH', 'X', 'Y', 'Z'] + values = ['"{} Plg"'.format(doe2_id), '"{}"'.format(constr), tilt, az, + round(origin.x, GEO_DEC_COUNT), + round(origin.y, GEO_DEC_COUNT), + round(origin.z, GEO_DEC_COUNT)] + + # add information related to the boundary condition + if bc_str == 'Surface': + adj_room = face.boundary_condition.boundary_condition_objects[-1] + adj_id = clean_doe2_string(adj_room, GEO_CHARS) + values.append('"{}"'.format(adj_id)) + keywords.append('NEXT-TO') + elif doe2_type == 'INTERIOR-WALL': # assume that it is adiabatic + keywords.append('INT-WALL-TYPE') + values.append('ADIABATIC') + if location is None and f_type_str == 'Floor' and doe2_type != 'INTERIOR-WALL': + keywords.append('LOCATION') + values.append('BOTTOM') + + # create the face definition + face_def = generate_inp_string(doe2_id, doe2_type, keywords, values) + return face_polygon, face_def
+ + + +
+[docs] +def room_to_inp(room, floor_origin=Point3D(0, 0, 0), floor_height=None, + exclude_interior_walls=False, exclude_interior_ceilings=False): + """Generate an INP string representation of a Room. + + This will include the Room's constituent Faces, Apertures and Doors with + each of these elements being a separate item in the list of strings returned. + However, any shades assigned to the Room or its constituent elements are + excluded and should be written by looping through the shades on the parent model. + + The resulting string will also include all internal gain definitions for the + Room (people, lights, equipment), infiltration definitions, ventilation + requirements, and thermostat objects. + + However, complete schedule definitions assigned to these load objects are + excluded as well as any construction or material definitions. + + Args: + floor_origin: A ladybug-geometry Point3D for the origin of the + floor (aka. story) to which the Room is a part of. (Default: (0, 0, 0)). + floor_height: An optional number for the parent story SPACE-HEIGHT, + which will be used to check the Room geometry to determine if + it must be written using POLYGONs. If None, no check will be + performed. (Default: None) + exclude_interior_walls: Boolean to note whether interior wall Faces + should be excluded from the resulting string. (Default: False). + exclude_interior_ceilings: Boolean to note whether interior ceiling + Faces should be excluded from the resulting string. (Default: False). + + Returns: + A tuple with two elements. + + - room_polygons: A list of text strings for the INP polygons needed + to represent the Room and all of its constituent Faces. + + - room_defs: A list of text strings for the INP definitions needed + to represent the Room and all of its constituent Faces, Apertures + and Doors. + """ + # process the room identifier + doe2_id = clean_doe2_string(room.identifier, GEO_CHARS) + + # set up attributes based on the Room's energy properties + energy_attr_keywords = ['ZONE-TYPE'] + energy_attr_values = [room_doe2_conditioning_type(room)] + if room.properties.energy._program_type is not None: + energy_attr_keywords.append('C-ACTIVITY-DESC') + prog_uid = switch_statement_id(room.properties.energy.program_type.identifier) + energy_attr_values.append('*{}*'.format(prog_uid)) + # people + ppl_kwd, ppl_val = people_to_inp(room.properties.energy._people) + energy_attr_keywords.extend(ppl_kwd) + energy_attr_values.extend(ppl_val) + # lighting + lgt_kwd, lgt_val = lighting_to_inp(room.properties.energy._lighting) + energy_attr_keywords.extend(lgt_kwd) + energy_attr_values.extend(lgt_val) + # equipment + eq_kwd, eq_val = electric_equipment_to_inp( + room.properties.energy._electric_equipment) + energy_attr_keywords.extend(eq_kwd) + energy_attr_values.extend(eq_val) + # hot water and gas usage + shw_gas_kwd, shw_gas_val = hot_water_and_gas_to_inp( + room.properties.energy.service_hot_water, + room.properties.energy.gas_equipment, room.floor_area) + energy_attr_keywords.extend(shw_gas_kwd) + energy_attr_values.extend(shw_gas_val) + # infiltration + inf_kwd, inf_val = infiltration_to_inp(room.properties.energy._infiltration) + energy_attr_keywords.extend(inf_kwd) + energy_attr_values.extend(inf_val) + + def _is_room_3d_extruded(hb_room): + """Test if a Room is a pure extrusion. + + Args: + hb_room: The Honeybee Room to be tested. + + Returns: + A tuple with two elements. + + - is_extrusion: True if the geometry is an extrusion. False if not. + + - face_orientations: A list of integers that aligns with the Room.faces + and denotes whether each face is downward (-1), vertical (0) or + upward (+1). + """ + # first check if we have to use POLYGONS because of the parent SPACE-HEIGHT + if floor_height is not None: + room_height = room.max.z - room.min.z + if abs(room_height - floor_height) > DOE2_TOLERANCE: + return False, [] + + # set up the parameters for evaluating vertical or horizontal + vert_vec = Vector3D(0, 0, 1) + min_v_ang = math.radians(DOE2_ANGLE_TOL) + max_v_ang = math.pi - min_v_ang + min_h_ang = (math.pi / 2) - min_v_ang + max_h_ang = (math.pi / 2) + min_v_ang + + # loop through the Room faces and test them + face_orientations = [] + for face in hb_room.faces: + try: # first make sure that the geometry is not degenerate + clean_geo = face.geometry.remove_colinear_vertices(DOE2_TOLERANCE) + v_ang = clean_geo.normal.angle(vert_vec) + if v_ang <= min_v_ang: + face_orientations.append(1) + continue + elif v_ang >= max_v_ang: + face_orientations.append(-1) + continue + elif min_h_ang <= v_ang <= max_h_ang: + face_orientations.append(0) + continue + return False, [] + except AssertionError: # degenerate face to ignore + pass + return True, face_orientations + + # if the room is extruded, determine the locations of each face + face_locations = [] + is_extrusion, face_orientations = _is_room_3d_extruded(room) + if is_extrusion: # try to translate without using POLYGON for the Room faces + if room.properties.doe2.space_polygon_geometry is not None: + r_geo = room.properties.doe2.space_polygon_geometry + else: + try: + r_geo = room.horizontal_boundary( + match_walls=True, tolerance=DOE2_TOLERANCE) + except Exception: # we may need to write it with NO-SHAPE + r_geo = None + if r_geo is not None: + r_geo = r_geo if r_geo.normal.z >= 0 else r_geo.flip() + r_geo = r_geo.remove_duplicate_vertices(DOE2_TOLERANCE) + rm_pts = r_geo.lower_left_counter_clockwise_boundary + rm_height = room.max.z - room.min.z + ceil_count = len([orient for orient in face_orientations if orient == 1]) + floor_count = len([orient for orient in face_orientations if orient == -1]) + for face, orient in zip(room.faces, face_orientations): + if orient == 0: # wall to associate with a room vertex + clean_geo = face.geometry.remove_colinear_vertices(DOE2_TOLERANCE) + face_height = face.max.z - face.min.z + if clean_geo.boundary_polygon2d.is_rectangle(DOE2_ANGLE_TOL) and \ + abs(rm_height - face_height) <= DOE2_TOLERANCE: + f_origin = face.geometry.lower_left_corner + for i, r_pt in enumerate(rm_pts): + if f_origin.is_equivalent(r_pt, DOE2_TOLERANCE): + face_locations.append('SPACE-V{}'.format(i + 1)) + break + else: # not associated with any Room vertex + face_locations.append(None) + else: # not a rectangular geometry + face_locations.append(None) + elif orient == 1: + loc = 'TOP' if ceil_count == 1 and not r_geo.has_holes else None + face_locations.append(loc) + else: + loc = 'BOTTOM' if floor_count == 1 else None + face_locations.append(loc) + + # if the room is not extruded, just use the generic horizontal boundary + if len(face_locations) == 0: + if room.properties.doe2.space_polygon_geometry is not None: + r_geo = room.properties.doe2.space_polygon_geometry + else: + try: + r_geo = room.horizontal_boundary( + match_walls=False, tolerance=DOE2_TOLERANCE) + r_geo = r_geo if r_geo.normal.z >= 0 else r_geo.flip() + r_geo = r_geo.remove_colinear_vertices(tolerance=DOE2_TOLERANCE) + except Exception: # we may need to write it with NO-SHAPE + r_geo = None + face_locations = [None] * len(room.faces) + + # create the space definition + if r_geo is None: # we have to use NO-SHAPE + msg = 'Using NO-SHAPE for SPACE "{}".'.format(room.display_name) + print(msg) + space_origin = room.min + origin = space_origin - floor_origin + keywords = ['SHAPE', 'AZIMUTH', 'X', 'Y', 'Z', 'AREA', 'VOLUME'] + values = ['NO-SHAPE', 0, round(origin.x, GEO_DEC_COUNT), + round(origin.y, GEO_DEC_COUNT), round(origin.z, GEO_DEC_COUNT), + round(room.floor_area, GEO_DEC_COUNT), + round(room.volume, GEO_DEC_COUNT)] + if room.multiplier != 1: + keywords.append('MULTIPLIER') + values.append(room.multiplier) + keywords.extend(energy_attr_keywords) + values.extend(energy_attr_values) + space_def = generate_inp_string(doe2_id, 'SPACE', keywords, values) + room_polygons = [] + room_defs = [space_def] + else: + # create the room polygon string from the geometry + room_polygon, pos_info = face_3d_to_inp(r_geo, doe2_id) + space_origin, _, _ = pos_info + origin = space_origin - floor_origin + # create the space definition, which includes the position info + keywords = ['SHAPE', 'POLYGON', 'AZIMUTH', 'X', 'Y', 'Z', 'VOLUME'] + values = ['POLYGON', '"{} Plg"'.format(doe2_id), 0, + round(origin.x, GEO_DEC_COUNT), round(origin.y, GEO_DEC_COUNT), + round(origin.z, GEO_DEC_COUNT), round(room.volume, GEO_DEC_COUNT)] + if room.multiplier != 1: + keywords.append('MULTIPLIER') + values.append(room.multiplier) + keywords.extend(energy_attr_keywords) + values.extend(energy_attr_values) + space_def = generate_inp_string(doe2_id, 'SPACE', keywords, values) + room_polygons = [room_polygon] + room_defs = [space_def] + + # gather together all face definitions and polygons to define the room + for face, f_loc in zip(room.faces, face_locations): + # first check if this is a face that should be excluded + if isinstance(face.boundary_condition, Surface): + if exclude_interior_walls and isinstance(face.type, Wall): + continue + elif exclude_interior_ceilings and \ + isinstance(face.type, (Floor, RoofCeiling)): + continue + # add the face definition along with all apertures and doors + face_polygon, face_def = face_to_inp(face, space_origin, f_loc) + if face_polygon != '': + room_polygons.append(face_polygon) + room_defs.append(face_def) + for ap in face.apertures: + ap_def = aperture_to_inp(ap) + room_defs.append(ap_def) + if not isinstance(face.boundary_condition, Surface): + for dr in face.doors: + dr_def = door_to_inp(dr) + room_defs.append(dr_def) + return room_polygons, room_defs
+ + + +
+[docs] +def model_to_inp( + model, simulation_par=None, hvac_mapping='Story', + exclude_interior_walls=False, exclude_interior_ceilings=False, equest_version=None +): + """Generate an INP string representation of a Model. + + The resulting string will include all geometry (Rooms, Faces, Apertures, + Doors, Shades), all fully-detailed constructions + materials, all fully-detailed + schedules, and the room properties. It will also include the simulation + parameters. Essentially, the string includes everything needed to simulate + the model. + + Args: + model: A honeybee Model for which an INP representation will be returned. + simulation_par: A honeybee-doe2 SimulationPar object to specify how the + DOE-2 simulation should be run. If None, default simulation + parameters will be generated, which will run the simulation for the + full year. (Default: None). + hvac_mapping: Text to indicate how HVAC systems should be assigned to the + exported model. Story will assign one HVAC system for each distinct + level polygon, Model will use only one HVAC system for the whole model + and AssignedHVAC will follow how the HVAC systems have been assigned + to the Rooms.properties.energy.hvac. Choose from the options + below. (Default: Story). + + * Room + * Story + * Model + * AssignedHVAC + + exclude_interior_walls: Boolean to note whether interior wall Faces + should be excluded from the resulting string. (Default: False). + exclude_interior_ceilings: Boolean to note whether interior ceiling + Faces should be excluded from the resulting string. (Default: False). + equest_version: An optional text string to denote the version of eQuest + for which the INP definition will be generated. If unspecified + or unrecognized, the latest version of eQuest will be used. + + Usage: + + .. code-block:: python + + import os + from ladybug.futil import write_to_file + from honeybee.model import Model + from honeybee.room import Room + from honeybee.config import folders + + # Crate an input Model + room = Room.from_box('Tiny House Zone', 5, 10, 3) + room.properties.energy.program_type = office_program + room.properties.energy.add_default_ideal_air() + model = Model('Tiny House', [room]) + + # create the INP string for the model + inp_str = model.to.inp(model) + + # write the final string into an INP + inp = os.path.join(folders.default_simulation_folder, 'test_file', 'in.inp') + write_to_file(inp, inp_str, True) + """ + # duplicate model to avoid mutating it as we edit it for INP export + original_model = model + model = model.duplicate() + # scale the model if the units are not feet + if model.units != 'Feet': + model.convert_to_units('Feet') + # remove degenerate geometry within native DOE-2 tolerance + try: + model.remove_degenerate_geometry(DOE2_TOLERANCE) + except ValueError: + error = 'Failed to remove degenerate Rooms.\nYour Model units system is: {}. ' \ + 'Is this correct?'.format(original_model.units) + raise ValueError(error) + # convert all of the Aperture geometries to rectangles so they can be translated + model.rectangularize_apertures( + subdivision_distance=RECT_WIN_SUBD, max_separation=0.0, + merge_all=True, resolve_adjacency=False + ) + # reset identifiers to valid DOE-2 U-Names that are derived from the display names + for room in model.rooms: + base_name = clean_doe2_string(room.display_name, GEO_CHARS - 2) + room.display_name = clean_string(base_name) + for face in room.faces: + base_name = clean_doe2_string(face.display_name, GEO_CHARS - 2) + face.display_name = clean_string(base_name) + for ap in face.apertures: + base_name = clean_doe2_string(ap.display_name, GEO_CHARS - 2) + ap.display_name = clean_string(base_name) + for dr in face.doors: + base_name = clean_doe2_string(dr.display_name, GEO_CHARS - 2) + dr.display_name = clean_string(base_name) + for shade in model.shades: + base_name = clean_doe2_string(shade.display_name, GEO_CHARS - 2) + shade.display_name = clean_string(base_name) + for shd_mesh in model.shade_meshes: + base_name = clean_doe2_string(shd_mesh.display_name, GEO_CHARS - 2) + shd_mesh.display_name = clean_string(base_name) + model.reset_ids() + # assign any doe2 properties previously supported through user_data + for room in model.rooms: + room.properties.doe2.apply_properties_from_user_data() + + # write the simulation parameters into the string + model_str = ['INPUT ..\n\n'] + sim_par = simulation_par if simulation_par is not None else SimulationPar() + model_str.append(sim_par.to_inp()) + + # write all of the schedules + all_day_scheds, all_week_scheds, all_year_scheds = [], [], [] + used_day_sched_ids, used_day_count = {}, 1 + all_scheds = model.properties.energy.schedules + for sched in all_scheds: + if isinstance(sched, ScheduleRuleset): + year_schedule, week_schedules = sched.to_inp() + # check that day schedules aren't referenced by other model schedules + day_scheds = [] + for day in sched.day_schedules: + sch_doe2_id = clean_doe2_string(day.identifier, RES_CHARS) + if sch_doe2_id not in used_day_sched_ids: + day_scheds.append(day.to_inp(sched.schedule_type_limit)) + used_day_sched_ids[sch_doe2_id] = day + elif day != used_day_sched_ids[sch_doe2_id]: + new_day = day.duplicate() + new_day.identifier = 'Schedule Day {}'.format(used_day_count) + day_scheds.append(new_day.to_inp(sched.schedule_type_limit)) + for i, week_sch in enumerate(week_schedules): + old_day_id = clean_doe2_string(day.identifier, RES_CHARS) + new_day_id = clean_doe2_string(new_day.identifier, RES_CHARS) + week_schedules[i] = week_sch.replace(old_day_id, new_day_id) + used_day_count += 1 + all_day_scheds.extend(day_scheds) + all_week_scheds.extend(week_schedules) + all_year_scheds.append(year_schedule) + else: # ScheduleFixedInterval + year_schedule, week_schedules, year_schedule = sched.to_inp() + all_day_scheds.extend(day_scheds) + all_week_scheds.extend(week_schedules) + all_year_scheds.append(year_schedule) + model_str.append(header_comment_minor('Day Schedules')) + model_str.extend(all_day_scheds) + model_str.append(header_comment_minor('Week Schedules')) + model_str.extend(all_week_scheds) + model_str.append(header_comment_minor('Annual Schedules')) + model_str.extend(all_year_scheds) + + # write all of the materials and constructions + window_constructions = model.properties.energy.aperture_constructions() + door_constructions = model.properties.energy.door_constructions() + drc_ids = set([con.identifier for con in door_constructions]) + materials = [] + construction_strs = [] + all_constrs = model.properties.energy.constructions + \ + generic_construction_set.constructions_unique + for constr in set(all_constrs): + if isinstance(constr, OpaqueConstruction) and constr.identifier not in drc_ids: + materials.extend(constr.materials) + construction_strs.append(opaque_construction_to_inp(constr)) + elif isinstance(constr, AirBoundaryConstruction): + construction_strs.append(air_construction_to_inp(constr)) + model_str.append(header_comment_minor('Materials / Layers / Constructions')) + model_str.extend([opaque_material_to_inp(mat) for mat in set(materials)]) + model_str.extend(construction_strs) + model_str.append(header_comment_minor('Glass Types')) + for w_con in window_constructions: + model_str.append(window_construction_to_inp(w_con)) + model_str.append(header_comment_minor('Door Construction')) + for dr_con in door_constructions: + if not isinstance(dr_con, OpaqueConstruction): + dr_con = dr_con.duplicate() + dr_con.identifier = dr_con.identifier + '_d' + model_str.append(door_construction_to_inp(dr_con)) + + # gather together all of the program types in a dictionary for switch statements + switch_dict = {} + for program in model.properties.energy.program_types: + program_type_to_inp(program, switch_dict) + + # loop through rooms grouped by floor level and boundary to get polygons + level_room_groups, level_geos, level_names = \ + group_rooms_by_doe2_level(model.rooms, model.tolerance) + bldg_polygons, bldg_geo_defs = [], [] + for flr_rooms, flr_geo, flr_name in zip(level_room_groups, level_geos, level_names): + # create the story definition + rooms_f2c = [room.max.z - room.min.z for room in flr_rooms] + sotry_f2f = max(rooms_f2c) + median_room_f2c = sorted(rooms_f2c)[int(len(rooms_f2c) / 2)] + if flr_geo is None: # write the level with NO-SHAPE + msg = 'Using NO-SHAPE for FLOOR "{}".'.format(flr_name) + print(msg) + flr_origin, _ = bounding_box([room.min for room in flr_rooms]) + flr_area = sum(room.floor_area for room in flr_rooms) + flr_volume = sum(room.volume for room in flr_rooms) + flr_keys = ['SHAPE', 'AREA', 'VOLUME', 'AZIMUTH', 'X', 'Y', 'Z', + 'SPACE-HEIGHT', 'FLOOR-HEIGHT'] + flr_vals = ['NO-SHAPE', round(flr_area, GEO_DEC_COUNT), + round(flr_volume, GEO_DEC_COUNT), 0, + flr_origin.x, flr_origin.y, flr_origin.z, + round(median_room_f2c, 3), round(sotry_f2f, 3)] + else: # write the level with a POLYGON + flr_polygon, pos_info = face_3d_to_inp(flr_geo, flr_name) + flr_origin, _, _ = pos_info + flr_keys = ['SHAPE', 'POLYGON', 'AZIMUTH', 'X', 'Y', 'Z', + 'SPACE-HEIGHT', 'FLOOR-HEIGHT'] + flr_vals = ['POLYGON', '"{} Plg"'.format(flr_name), 0, + flr_origin.x, flr_origin.y, flr_origin.z, + round(median_room_f2c, 3), round(sotry_f2f, 3)] + bldg_polygons.append(flr_polygon) + r_mult = flr_rooms[0].multiplier + if r_mult != 1 and all(room.multiplier == r_mult for room in flr_rooms): + # set the multiplier for the entire story instead of room-by-room + flr_keys.append('MULTIPLIER') + flr_vals.append(r_mult) + for room in flr_rooms: + room.multiplier = 1 + flr_def = generate_inp_string(flr_name, 'FLOOR', flr_keys, flr_vals) + bldg_geo_defs.append(flr_def) + # add the room and face definitions + polygons + for room in flr_rooms: + room_polygons, room_defs = room_to_inp( + room, flr_origin, median_room_f2c, + exclude_interior_walls, exclude_interior_ceilings) + bldg_polygons.extend(room_polygons) + bldg_geo_defs.extend(room_defs) + + # loop through the shades and get their definitions and polygons + shade_polygons, shade_geo_defs = [], [] + for shade in model.shades: + shade_polygon, shade_def = shade_to_inp(shade, equest_version) + if shade_polygon != '': # shade written with a RECTANGLE + shade_polygons.append(shade_polygon) + shade_geo_defs.append(shade_def) + for shade in model.shade_meshes: + shade_polygon, shade_def = shade_mesh_to_inp(shade, equest_version) + shade_polygons.extend(shade_polygon) + shade_geo_defs.extend(shade_def) + + # write the building and shade geometry into the INP + model_str.append(header_comment_minor('Polygons')) + model_str.extend(bldg_polygons) + model_str.append(header_comment_minor('Wall Parameters')) + model_str.append(header_comment_minor('Fixed and Building Shades')) + model_str.extend(shade_polygons) + model_str.extend(shade_geo_defs) + model_str.append(header_comment_minor('Misc Cost Related Objects')) + model_str.append(header_comment_major('Performance Curves')) + model_str.append(header_comment_major('Floors / Spaces / Walls / Windows / Doors')) + model_str.append(switch_dict_to_space_inp(switch_dict)) + model_str.extend(bldg_geo_defs) + + # write in placeholder headers for various HVAC components + model_str.append(header_comment_major('Electric & Fuel Meters')) + for meter in ('Electric Meters', 'Fuel Meters', 'Master Meters'): + model_str.append(header_comment_minor(meter)) + model_str.append(header_comment_major('HVAC Circulation Loops / Plant Equipment')) + hvac_comp_types = ( + 'Pumps', 'Heat Exchangers', 'Circulation Loops', 'Chillers', 'Boilers', + 'Domestic Water Heaters', 'Heat Rejection', 'Tower Free Cooling', + 'Photovoltaic Modules', 'Electric Generators', 'Thermal Storage', + 'Ground Loop Heat Exchangers', 'Compliance DHW (residential dwelling units)') + for comp in hvac_comp_types: + model_str.append(header_comment_minor(comp)) + model_str.append(header_comment_major('Steam & Chilled Water Meters')) + model_str.append(header_comment_minor('Steam Meters')) + model_str.append(header_comment_minor('Chilled Water Meters')) + model_str.append(header_comment_major('HVAC Systems / Zones')) + model_str.append(switch_dict_to_zone_inp(switch_dict)) + + # assign HVAC systems given the specified hvac_mapping + if hvac_mapping.upper() == 'STORY': + hvac_rooms = level_room_groups + hvac_names = ['{}_Sys'.format(name) for name in level_names] + else: + hvac_rooms, hvac_names = group_rooms_by_doe2_hvac(model, hvac_mapping) + for hvac_name, rooms in zip(hvac_names, hvac_rooms): + # create the definition of the HVAC + hvac_keys = ('TYPE', 'HEAT-SOURCE', 'SYSTEM-REPORTS') + hvac_vals = ('SUM', 'NONE', 'NO') + hvac_def = generate_inp_string(hvac_name, 'SYSTEM', hvac_keys, hvac_vals) + model_str.append(hvac_def) + for room in rooms: + space_name = clean_doe2_string(room.identifier, GEO_CHARS) + zone_name = '{}_Zn'.format(space_name) + zone_type = room_doe2_conditioning_type(room) + zone_keys = ['TYPE', 'SIZING-OPTION', 'SPACE'] + zone_vals = [zone_type, 'ADJUST-LOADS', '"{}"'.format(space_name)] + if room.properties.energy.is_conditioned: + if room.properties.energy._setpoint is not None: + stp_kwd, stp_val = setpoint_to_inp(room.properties.energy._setpoint) + zone_keys.extend(stp_kwd) + zone_vals.extend(stp_val) + vt_kwd, vt_val = ventilation_to_inp(room.properties.energy._ventilation) + zone_keys.extend(vt_kwd) + zone_vals.extend(vt_val) + hvac_kwd, hvac_val = room.properties.doe2.to_inp() + zone_keys.extend(hvac_kwd) + zone_vals.extend(hvac_val) + zone_def = generate_inp_string(zone_name, 'ZONE', zone_keys, zone_vals) + model_str.append(zone_def) + + # provide a few last comment headers and end the file + model_str.append(header_comment_major('Metering & Misc HVAC')) + model_str.append(header_comment_minor('Equipment Controls')) + model_str.append(header_comment_minor('Load Management')) + model_str.append(header_comment_major('Utility Rates')) + for rate in ('Ratchets', 'Block Charges', 'Utility Rates'): + model_str.append(header_comment_minor(rate)) + model_str.append(header_comment_major('Output Reporting')) + report_types = ( + 'Loads Non-Hourly Reporting', 'Systems Non-Hourly Reporting', + 'Plant Non-Hourly Reporting', 'Economics Non-Hourly Reporting', + 'Hourly Reporting', 'THE END') + for report in report_types: + model_str.append(header_comment_minor(report)) + model_str.append('END ..\nCOMPUTE ..\nSTOP ..\n') + + # create the final string and ensure that it is windows-compatible + inp_str = '\n'.join(model_str) + if os.name != 'nt': # we are on a unix-based system + inp_str = inp_str.replace('\n', '\r\n') + return inp_str
+ + + +
+[docs] +def room_doe2_conditioning_type(room): + """Get the DOE-2 conditioning type to be assigned to both the Space and Zone. + + Args: + room: A Honeybee Room for which the conditioning type will be returned. + """ + if room.exclude_floor_area: + return 'PLENUM' + elif room.properties.energy.is_conditioned: + return 'CONDITIONED' + else: + return 'UNCONDITIONED'
+ +
+ +
+ +
+
+
+
+

+ Back to top + +

+

+ © Copyright 2024, Ladybug Tools.
+ Created using Sphinx 8.0.2.
+

+
+
+ + \ No newline at end of file diff --git a/docs/_modules/index.html b/docs/_modules/index.html new file mode 100644 index 0000000..86e5744 --- /dev/null +++ b/docs/_modules/index.html @@ -0,0 +1,316 @@ + + + + + + + Overview: module code — honeybee-doe2 documentation + + + + + + + + + + + + + + + + + + + + + + + +
+
+

+ Back to top + +

+

+ © Copyright 2024, Ladybug Tools.
+ Created using Sphinx 8.0.2.
+

+
+
+ + \ No newline at end of file diff --git a/docs/_sources/cli/index.rst.txt b/docs/_sources/cli/index.rst.txt new file mode 100644 index 0000000..44374ab --- /dev/null +++ b/docs/_sources/cli/index.rst.txt @@ -0,0 +1,15 @@ +CLI Docs +======== + +Installation +------------ + +To check if the command line is installed correctly use ``honeybee-doe2 --help`` + +Commands +-------- +.. toctree:: + :maxdepth: 1 + + translate + __init__ diff --git a/docs/_sources/cli/main.rst.txt b/docs/_sources/cli/main.rst.txt new file mode 100644 index 0000000..4d8dce0 --- /dev/null +++ b/docs/_sources/cli/main.rst.txt @@ -0,0 +1,7 @@ +main +==== + +.. click:: honeybee_doe2.cli.__init__:doe2 + :prog: honeybee-doe2 + :show-nested: + :commands: diff --git a/docs/_sources/cli/translate.rst.txt b/docs/_sources/cli/translate.rst.txt new file mode 100644 index 0000000..28df996 --- /dev/null +++ b/docs/_sources/cli/translate.rst.txt @@ -0,0 +1,6 @@ +translate +========= + +.. click:: honeybee_doe2.cli.translate:translate + :prog: honeybee-doe2 translate + :show-nested: diff --git a/docs/_sources/honeybee_doe2.cli.rst.txt b/docs/_sources/honeybee_doe2.cli.rst.txt new file mode 100644 index 0000000..3bf5136 --- /dev/null +++ b/docs/_sources/honeybee_doe2.cli.rst.txt @@ -0,0 +1,18 @@ +honeybee\_doe2.cli package +========================== + +Submodules +---------- + +.. toctree:: + :maxdepth: 4 + + honeybee_doe2.cli.translate + +Module contents +--------------- + +.. automodule:: honeybee_doe2.cli + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/_sources/honeybee_doe2.cli.translate.rst.txt b/docs/_sources/honeybee_doe2.cli.translate.rst.txt new file mode 100644 index 0000000..5799cbe --- /dev/null +++ b/docs/_sources/honeybee_doe2.cli.translate.rst.txt @@ -0,0 +1,7 @@ +honeybee\_doe2.cli.translate module +=================================== + +.. automodule:: honeybee_doe2.cli.translate + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/_sources/honeybee_doe2.config.rst.txt b/docs/_sources/honeybee_doe2.config.rst.txt new file mode 100644 index 0000000..2ffbeb4 --- /dev/null +++ b/docs/_sources/honeybee_doe2.config.rst.txt @@ -0,0 +1,7 @@ +honeybee\_doe2.config module +============================ + +.. automodule:: honeybee_doe2.config + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/_sources/honeybee_doe2.construction.rst.txt b/docs/_sources/honeybee_doe2.construction.rst.txt new file mode 100644 index 0000000..51a6601 --- /dev/null +++ b/docs/_sources/honeybee_doe2.construction.rst.txt @@ -0,0 +1,7 @@ +honeybee\_doe2.construction module +================================== + +.. automodule:: honeybee_doe2.construction + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/_sources/honeybee_doe2.grouping.rst.txt b/docs/_sources/honeybee_doe2.grouping.rst.txt new file mode 100644 index 0000000..9e8302d --- /dev/null +++ b/docs/_sources/honeybee_doe2.grouping.rst.txt @@ -0,0 +1,7 @@ +honeybee\_doe2.grouping module +============================== + +.. automodule:: honeybee_doe2.grouping + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/_sources/honeybee_doe2.load.rst.txt b/docs/_sources/honeybee_doe2.load.rst.txt new file mode 100644 index 0000000..c0e653d --- /dev/null +++ b/docs/_sources/honeybee_doe2.load.rst.txt @@ -0,0 +1,7 @@ +honeybee\_doe2.load module +========================== + +.. automodule:: honeybee_doe2.load + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/_sources/honeybee_doe2.programtype.rst.txt b/docs/_sources/honeybee_doe2.programtype.rst.txt new file mode 100644 index 0000000..26813f8 --- /dev/null +++ b/docs/_sources/honeybee_doe2.programtype.rst.txt @@ -0,0 +1,7 @@ +honeybee\_doe2.programtype module +================================= + +.. automodule:: honeybee_doe2.programtype + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/_sources/honeybee_doe2.properties.model.rst.txt b/docs/_sources/honeybee_doe2.properties.model.rst.txt new file mode 100644 index 0000000..ded5eb4 --- /dev/null +++ b/docs/_sources/honeybee_doe2.properties.model.rst.txt @@ -0,0 +1,7 @@ +honeybee\_doe2.properties.model module +====================================== + +.. automodule:: honeybee_doe2.properties.model + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/_sources/honeybee_doe2.properties.room.rst.txt b/docs/_sources/honeybee_doe2.properties.room.rst.txt new file mode 100644 index 0000000..bea806d --- /dev/null +++ b/docs/_sources/honeybee_doe2.properties.room.rst.txt @@ -0,0 +1,7 @@ +honeybee\_doe2.properties.room module +===================================== + +.. automodule:: honeybee_doe2.properties.room + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/_sources/honeybee_doe2.properties.rst.txt b/docs/_sources/honeybee_doe2.properties.rst.txt new file mode 100644 index 0000000..8037495 --- /dev/null +++ b/docs/_sources/honeybee_doe2.properties.rst.txt @@ -0,0 +1,19 @@ +honeybee\_doe2.properties package +================================= + +Submodules +---------- + +.. toctree:: + :maxdepth: 4 + + honeybee_doe2.properties.model + honeybee_doe2.properties.room + +Module contents +--------------- + +.. automodule:: honeybee_doe2.properties + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/_sources/honeybee_doe2.rst.txt b/docs/_sources/honeybee_doe2.rst.txt new file mode 100644 index 0000000..db6f596 --- /dev/null +++ b/docs/_sources/honeybee_doe2.rst.txt @@ -0,0 +1,35 @@ +honeybee\_doe2 package +====================== + +Subpackages +----------- + +.. toctree:: + :maxdepth: 4 + + honeybee_doe2.cli + honeybee_doe2.properties + +Submodules +---------- + +.. toctree:: + :maxdepth: 4 + + honeybee_doe2.config + honeybee_doe2.construction + honeybee_doe2.grouping + honeybee_doe2.load + honeybee_doe2.programtype + honeybee_doe2.schedule + honeybee_doe2.simulation + honeybee_doe2.util + honeybee_doe2.writer + +Module contents +--------------- + +.. automodule:: honeybee_doe2 + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/_sources/honeybee_doe2.schedule.rst.txt b/docs/_sources/honeybee_doe2.schedule.rst.txt new file mode 100644 index 0000000..f3c7f8b --- /dev/null +++ b/docs/_sources/honeybee_doe2.schedule.rst.txt @@ -0,0 +1,7 @@ +honeybee\_doe2.schedule module +============================== + +.. automodule:: honeybee_doe2.schedule + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/_sources/honeybee_doe2.simulation.rst.txt b/docs/_sources/honeybee_doe2.simulation.rst.txt new file mode 100644 index 0000000..b3f8fa4 --- /dev/null +++ b/docs/_sources/honeybee_doe2.simulation.rst.txt @@ -0,0 +1,7 @@ +honeybee\_doe2.simulation module +================================ + +.. automodule:: honeybee_doe2.simulation + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/_sources/honeybee_doe2.util.rst.txt b/docs/_sources/honeybee_doe2.util.rst.txt new file mode 100644 index 0000000..a7b8f8a --- /dev/null +++ b/docs/_sources/honeybee_doe2.util.rst.txt @@ -0,0 +1,7 @@ +honeybee\_doe2.util module +========================== + +.. automodule:: honeybee_doe2.util + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/_sources/honeybee_doe2.writer.rst.txt b/docs/_sources/honeybee_doe2.writer.rst.txt new file mode 100644 index 0000000..1eb16c4 --- /dev/null +++ b/docs/_sources/honeybee_doe2.writer.rst.txt @@ -0,0 +1,7 @@ +honeybee\_doe2.writer module +============================ + +.. automodule:: honeybee_doe2.writer + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/_sources/index.rst.txt b/docs/_sources/index.rst.txt new file mode 100644 index 0000000..1756db9 --- /dev/null +++ b/docs/_sources/index.rst.txt @@ -0,0 +1,39 @@ +Welcome to honeybee-doe2's documentation! +=================================== + +Honeybee extension for import and export to/from IES-VE + + +Installation +============ + +``pip install honeybee-doe2`` + + +honeybee-doe2 +======= + +CLI Docs +======== + +For command line interface documentation and API documentation see the pages below. + +.. toctree:: + :maxdepth: 2 + + cli//index + + +.. toctree:: + :maxdepth: 2 + :caption: Contents: + +.. include:: modules.rst + + +Indices and tables +================== + +* :ref:`genindex` +* :ref:`modindex` +* :ref:`search` diff --git a/docs/_sources/modules.rst.txt b/docs/_sources/modules.rst.txt new file mode 100644 index 0000000..6ac7f63 --- /dev/null +++ b/docs/_sources/modules.rst.txt @@ -0,0 +1,7 @@ +honeybee_doe2 +============= + +.. toctree:: + :maxdepth: 4 + + honeybee_doe2 diff --git a/docs/_static/basic.css b/docs/_static/basic.css new file mode 100644 index 0000000..f316efc --- /dev/null +++ b/docs/_static/basic.css @@ -0,0 +1,925 @@ +/* + * basic.css + * ~~~~~~~~~ + * + * Sphinx stylesheet -- basic theme. + * + * :copyright: Copyright 2007-2024 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/docs/_static/bootstrap-2.3.2/css/bootstrap-responsive.css b/docs/_static/bootstrap-2.3.2/css/bootstrap-responsive.css new file mode 100644 index 0000000..09e88ce --- /dev/null +++ b/docs/_static/bootstrap-2.3.2/css/bootstrap-responsive.css @@ -0,0 +1,1109 @@ +/*! + * Bootstrap Responsive v2.3.2 + * + * Copyright 2012 Twitter, Inc + * Licensed under the Apache License v2.0 + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Designed and built with all the love in the world @twitter by @mdo and @fat. + */ + +.clearfix { + *zoom: 1; +} + +.clearfix:before, +.clearfix:after { + display: table; + line-height: 0; + content: ""; +} + +.clearfix:after { + clear: both; +} + +.hide-text { + font: 0/0 a; + color: transparent; + text-shadow: none; + background-color: transparent; + border: 0; +} + +.input-block-level { + display: block; + width: 100%; + min-height: 30px; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +@-ms-viewport { + width: device-width; +} + +.hidden { + display: none; + visibility: hidden; +} + +.visible-phone { + display: none !important; +} + +.visible-tablet { + display: none !important; +} + +.hidden-desktop { + display: none !important; +} + +.visible-desktop { + display: inherit !important; +} + +@media (min-width: 768px) and (max-width: 979px) { + .hidden-desktop { + display: inherit !important; + } + .visible-desktop { + display: none !important ; + } + .visible-tablet { + display: inherit !important; + } + .hidden-tablet { + display: none !important; + } +} + +@media (max-width: 767px) { + .hidden-desktop { + display: inherit !important; + } + .visible-desktop { + display: none !important; + } + .visible-phone { + display: inherit !important; + } + .hidden-phone { + display: none !important; + } +} + +.visible-print { + display: none !important; +} + +@media print { + .visible-print { + display: inherit !important; + } + .hidden-print { + display: none !important; + } +} + +@media (min-width: 1200px) { + .row { + margin-left: -30px; + *zoom: 1; + } + .row:before, + .row:after { + display: table; + line-height: 0; + content: ""; + } + .row:after { + clear: both; + } + [class*="span"] { + float: left; + min-height: 1px; + margin-left: 30px; + } + .container, + .navbar-static-top .container, + .navbar-fixed-top .container, + .navbar-fixed-bottom .container { + width: 1170px; + } + .span12 { + width: 1170px; + } + .span11 { + width: 1070px; + } + .span10 { + width: 970px; + } + .span9 { + width: 870px; + } + .span8 { + width: 770px; + } + .span7 { + width: 670px; + } + .span6 { + width: 570px; + } + .span5 { + width: 470px; + } + .span4 { + width: 370px; + } + .span3 { + width: 270px; + } + .span2 { + width: 170px; + } + .span1 { + width: 70px; + } + .offset12 { + margin-left: 1230px; + } + .offset11 { + margin-left: 1130px; + } + .offset10 { + margin-left: 1030px; + } + .offset9 { + margin-left: 930px; + } + .offset8 { + margin-left: 830px; + } + .offset7 { + margin-left: 730px; + } + .offset6 { + margin-left: 630px; + } + .offset5 { + margin-left: 530px; + } + .offset4 { + margin-left: 430px; + } + .offset3 { + margin-left: 330px; + } + .offset2 { + margin-left: 230px; + } + .offset1 { + margin-left: 130px; + } + .row-fluid { + width: 100%; + *zoom: 1; + } + .row-fluid:before, + .row-fluid:after { + display: table; + line-height: 0; + content: ""; + } + .row-fluid:after { + clear: both; + } + .row-fluid [class*="span"] { + display: block; + float: left; + width: 100%; + min-height: 30px; + margin-left: 2.564102564102564%; + *margin-left: 2.5109110747408616%; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + } + .row-fluid [class*="span"]:first-child { + margin-left: 0; + } + .row-fluid .controls-row [class*="span"] + [class*="span"] { + margin-left: 2.564102564102564%; + } + .row-fluid .span12 { + width: 100%; + *width: 99.94680851063829%; + } + .row-fluid .span11 { + width: 91.45299145299145%; + *width: 91.39979996362975%; + } + .row-fluid .span10 { + width: 82.90598290598291%; + *width: 82.8527914166212%; + } + .row-fluid .span9 { + width: 74.35897435897436%; + *width: 74.30578286961266%; + } + .row-fluid .span8 { + width: 65.81196581196582%; + *width: 65.75877432260411%; + } + .row-fluid .span7 { + width: 57.26495726495726%; + *width: 57.21176577559556%; + } + .row-fluid .span6 { + width: 48.717948717948715%; + *width: 48.664757228587014%; + } + .row-fluid .span5 { + width: 40.17094017094017%; + *width: 40.11774868157847%; + } + .row-fluid .span4 { + width: 31.623931623931625%; + *width: 31.570740134569924%; + } + .row-fluid .span3 { + width: 23.076923076923077%; + *width: 23.023731587561375%; + } + .row-fluid .span2 { + width: 14.52991452991453%; + *width: 14.476723040552828%; + } + .row-fluid .span1 { + width: 5.982905982905983%; + *width: 5.929714493544281%; + } + .row-fluid .offset12 { + margin-left: 105.12820512820512%; + *margin-left: 105.02182214948171%; + } + .row-fluid .offset12:first-child { + margin-left: 102.56410256410257%; + *margin-left: 102.45771958537915%; + } + .row-fluid .offset11 { + margin-left: 96.58119658119658%; + *margin-left: 96.47481360247316%; + } + .row-fluid .offset11:first-child { + margin-left: 94.01709401709402%; + *margin-left: 93.91071103837061%; + } + .row-fluid .offset10 { + margin-left: 88.03418803418803%; + *margin-left: 87.92780505546462%; + } + .row-fluid .offset10:first-child { + margin-left: 85.47008547008548%; + *margin-left: 85.36370249136206%; + } + .row-fluid .offset9 { + margin-left: 79.48717948717949%; + *margin-left: 79.38079650845607%; + } + .row-fluid .offset9:first-child { + margin-left: 76.92307692307693%; + *margin-left: 76.81669394435352%; + } + .row-fluid .offset8 { + margin-left: 70.94017094017094%; + *margin-left: 70.83378796144753%; + } + .row-fluid .offset8:first-child { + margin-left: 68.37606837606839%; + *margin-left: 68.26968539734497%; + } + .row-fluid .offset7 { + margin-left: 62.393162393162385%; + *margin-left: 62.28677941443899%; + } + .row-fluid .offset7:first-child { + margin-left: 59.82905982905982%; + *margin-left: 59.72267685033642%; + } + .row-fluid .offset6 { + margin-left: 53.84615384615384%; + *margin-left: 53.739770867430444%; + } + .row-fluid .offset6:first-child { + margin-left: 51.28205128205128%; + *margin-left: 51.175668303327875%; + } + .row-fluid .offset5 { + margin-left: 45.299145299145295%; + *margin-left: 45.1927623204219%; + } + .row-fluid .offset5:first-child { + margin-left: 42.73504273504273%; + *margin-left: 42.62865975631933%; + } + .row-fluid .offset4 { + margin-left: 36.75213675213675%; + *margin-left: 36.645753773413354%; + } + .row-fluid .offset4:first-child { + margin-left: 34.18803418803419%; + *margin-left: 34.081651209310785%; + } + .row-fluid .offset3 { + margin-left: 28.205128205128204%; + *margin-left: 28.0987452264048%; + } + .row-fluid .offset3:first-child { + margin-left: 25.641025641025642%; + *margin-left: 25.53464266230224%; + } + .row-fluid .offset2 { + margin-left: 19.65811965811966%; + *margin-left: 19.551736679396257%; + } + .row-fluid .offset2:first-child { + margin-left: 17.094017094017094%; + *margin-left: 16.98763411529369%; + } + .row-fluid .offset1 { + margin-left: 11.11111111111111%; + *margin-left: 11.004728132387708%; + } + .row-fluid .offset1:first-child { + margin-left: 8.547008547008547%; + *margin-left: 8.440625568285142%; + } + input, + textarea, + .uneditable-input { + margin-left: 0; + } + .controls-row [class*="span"] + [class*="span"] { + margin-left: 30px; + } + input.span12, + textarea.span12, + .uneditable-input.span12 { + width: 1156px; + } + input.span11, + textarea.span11, + .uneditable-input.span11 { + width: 1056px; + } + input.span10, + textarea.span10, + .uneditable-input.span10 { + width: 956px; + } + input.span9, + textarea.span9, + .uneditable-input.span9 { + width: 856px; + } + input.span8, + textarea.span8, + .uneditable-input.span8 { + width: 756px; + } + input.span7, + textarea.span7, + .uneditable-input.span7 { + width: 656px; + } + input.span6, + textarea.span6, + .uneditable-input.span6 { + width: 556px; + } + input.span5, + textarea.span5, + .uneditable-input.span5 { + width: 456px; + } + input.span4, + textarea.span4, + .uneditable-input.span4 { + width: 356px; + } + input.span3, + textarea.span3, + .uneditable-input.span3 { + width: 256px; + } + input.span2, + textarea.span2, + .uneditable-input.span2 { + width: 156px; + } + input.span1, + textarea.span1, + .uneditable-input.span1 { + width: 56px; + } + .thumbnails { + margin-left: -30px; + } + .thumbnails > li { + margin-left: 30px; + } + .row-fluid .thumbnails { + margin-left: 0; + } +} + +@media (min-width: 768px) and (max-width: 979px) { + .row { + margin-left: -20px; + *zoom: 1; + } + .row:before, + .row:after { + display: table; + line-height: 0; + content: ""; + } + .row:after { + clear: both; + } + [class*="span"] { + float: left; + min-height: 1px; + margin-left: 20px; + } + .container, + .navbar-static-top .container, + .navbar-fixed-top .container, + .navbar-fixed-bottom .container { + width: 724px; + } + .span12 { + width: 724px; + } + .span11 { + width: 662px; + } + .span10 { + width: 600px; + } + .span9 { + width: 538px; + } + .span8 { + width: 476px; + } + .span7 { + width: 414px; + } + .span6 { + width: 352px; + } + .span5 { + width: 290px; + } + .span4 { + width: 228px; + } + .span3 { + width: 166px; + } + .span2 { + width: 104px; + } + .span1 { + width: 42px; + } + .offset12 { + margin-left: 764px; + } + .offset11 { + margin-left: 702px; + } + .offset10 { + margin-left: 640px; + } + .offset9 { + margin-left: 578px; + } + .offset8 { + margin-left: 516px; + } + .offset7 { + margin-left: 454px; + } + .offset6 { + margin-left: 392px; + } + .offset5 { + margin-left: 330px; + } + .offset4 { + margin-left: 268px; + } + .offset3 { + margin-left: 206px; + } + .offset2 { + margin-left: 144px; + } + .offset1 { + margin-left: 82px; + } + .row-fluid { + width: 100%; + *zoom: 1; + } + .row-fluid:before, + .row-fluid:after { + display: table; + line-height: 0; + content: ""; + } + .row-fluid:after { + clear: both; + } + .row-fluid [class*="span"] { + display: block; + float: left; + width: 100%; + min-height: 30px; + margin-left: 2.7624309392265194%; + *margin-left: 2.709239449864817%; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + } + .row-fluid [class*="span"]:first-child { + margin-left: 0; + } + .row-fluid .controls-row [class*="span"] + [class*="span"] { + margin-left: 2.7624309392265194%; + } + .row-fluid .span12 { + width: 100%; + *width: 99.94680851063829%; + } + .row-fluid .span11 { + width: 91.43646408839778%; + *width: 91.38327259903608%; + } + .row-fluid .span10 { + width: 82.87292817679558%; + *width: 82.81973668743387%; + } + .row-fluid .span9 { + width: 74.30939226519337%; + *width: 74.25620077583166%; + } + .row-fluid .span8 { + width: 65.74585635359117%; + *width: 65.69266486422946%; + } + .row-fluid .span7 { + width: 57.18232044198895%; + *width: 57.12912895262725%; + } + .row-fluid .span6 { + width: 48.61878453038674%; + *width: 48.56559304102504%; + } + .row-fluid .span5 { + width: 40.05524861878453%; + *width: 40.00205712942283%; + } + .row-fluid .span4 { + width: 31.491712707182323%; + *width: 31.43852121782062%; + } + .row-fluid .span3 { + width: 22.92817679558011%; + *width: 22.87498530621841%; + } + .row-fluid .span2 { + width: 14.3646408839779%; + *width: 14.311449394616199%; + } + .row-fluid .span1 { + width: 5.801104972375691%; + *width: 5.747913483013988%; + } + .row-fluid .offset12 { + margin-left: 105.52486187845304%; + *margin-left: 105.41847889972962%; + } + .row-fluid .offset12:first-child { + margin-left: 102.76243093922652%; + *margin-left: 102.6560479605031%; + } + .row-fluid .offset11 { + margin-left: 96.96132596685082%; + *margin-left: 96.8549429881274%; + } + .row-fluid .offset11:first-child { + margin-left: 94.1988950276243%; + *margin-left: 94.09251204890089%; + } + .row-fluid .offset10 { + margin-left: 88.39779005524862%; + *margin-left: 88.2914070765252%; + } + .row-fluid .offset10:first-child { + margin-left: 85.6353591160221%; + *margin-left: 85.52897613729868%; + } + .row-fluid .offset9 { + margin-left: 79.8342541436464%; + *margin-left: 79.72787116492299%; + } + .row-fluid .offset9:first-child { + margin-left: 77.07182320441989%; + *margin-left: 76.96544022569647%; + } + .row-fluid .offset8 { + margin-left: 71.2707182320442%; + *margin-left: 71.16433525332079%; + } + .row-fluid .offset8:first-child { + margin-left: 68.50828729281768%; + *margin-left: 68.40190431409427%; + } + .row-fluid .offset7 { + margin-left: 62.70718232044199%; + *margin-left: 62.600799341718584%; + } + .row-fluid .offset7:first-child { + margin-left: 59.94475138121547%; + *margin-left: 59.838368402492065%; + } + .row-fluid .offset6 { + margin-left: 54.14364640883978%; + *margin-left: 54.037263430116376%; + } + .row-fluid .offset6:first-child { + margin-left: 51.38121546961326%; + *margin-left: 51.27483249088986%; + } + .row-fluid .offset5 { + margin-left: 45.58011049723757%; + *margin-left: 45.47372751851417%; + } + .row-fluid .offset5:first-child { + margin-left: 42.81767955801105%; + *margin-left: 42.71129657928765%; + } + .row-fluid .offset4 { + margin-left: 37.01657458563536%; + *margin-left: 36.91019160691196%; + } + .row-fluid .offset4:first-child { + margin-left: 34.25414364640884%; + *margin-left: 34.14776066768544%; + } + .row-fluid .offset3 { + margin-left: 28.45303867403315%; + *margin-left: 28.346655695309746%; + } + .row-fluid .offset3:first-child { + margin-left: 25.69060773480663%; + *margin-left: 25.584224756083227%; + } + .row-fluid .offset2 { + margin-left: 19.88950276243094%; + *margin-left: 19.783119783707537%; + } + .row-fluid .offset2:first-child { + margin-left: 17.12707182320442%; + *margin-left: 17.02068884448102%; + } + .row-fluid .offset1 { + margin-left: 11.32596685082873%; + *margin-left: 11.219583872105325%; + } + .row-fluid .offset1:first-child { + margin-left: 8.56353591160221%; + *margin-left: 8.457152932878806%; + } + input, + textarea, + .uneditable-input { + margin-left: 0; + } + .controls-row [class*="span"] + [class*="span"] { + margin-left: 20px; + } + input.span12, + textarea.span12, + .uneditable-input.span12 { + width: 710px; + } + input.span11, + textarea.span11, + .uneditable-input.span11 { + width: 648px; + } + input.span10, + textarea.span10, + .uneditable-input.span10 { + width: 586px; + } + input.span9, + textarea.span9, + .uneditable-input.span9 { + width: 524px; + } + input.span8, + textarea.span8, + .uneditable-input.span8 { + width: 462px; + } + input.span7, + textarea.span7, + .uneditable-input.span7 { + width: 400px; + } + input.span6, + textarea.span6, + .uneditable-input.span6 { + width: 338px; + } + input.span5, + textarea.span5, + .uneditable-input.span5 { + width: 276px; + } + input.span4, + textarea.span4, + .uneditable-input.span4 { + width: 214px; + } + input.span3, + textarea.span3, + .uneditable-input.span3 { + width: 152px; + } + input.span2, + textarea.span2, + .uneditable-input.span2 { + width: 90px; + } + input.span1, + textarea.span1, + .uneditable-input.span1 { + width: 28px; + } +} + +@media (max-width: 767px) { + body { + padding-right: 20px; + padding-left: 20px; + } + .navbar-fixed-top, + .navbar-fixed-bottom, + .navbar-static-top { + margin-right: -20px; + margin-left: -20px; + } + .container-fluid { + padding: 0; + } + .dl-horizontal dt { + float: none; + width: auto; + clear: none; + text-align: left; + } + .dl-horizontal dd { + margin-left: 0; + } + .container { + width: auto; + } + .row-fluid { + width: 100%; + } + .row, + .thumbnails { + margin-left: 0; + } + .thumbnails > li { + float: none; + margin-left: 0; + } + [class*="span"], + .uneditable-input[class*="span"], + .row-fluid [class*="span"] { + display: block; + float: none; + width: 100%; + margin-left: 0; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + } + .span12, + .row-fluid .span12 { + width: 100%; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + } + .row-fluid [class*="offset"]:first-child { + margin-left: 0; + } + .input-large, + .input-xlarge, + .input-xxlarge, + input[class*="span"], + select[class*="span"], + textarea[class*="span"], + .uneditable-input { + display: block; + width: 100%; + min-height: 30px; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + } + .input-prepend input, + .input-append input, + .input-prepend input[class*="span"], + .input-append input[class*="span"] { + display: inline-block; + width: auto; + } + .controls-row [class*="span"] + [class*="span"] { + margin-left: 0; + } + .modal { + position: fixed; + top: 20px; + right: 20px; + left: 20px; + width: auto; + margin: 0; + } + .modal.fade { + top: -100px; + } + .modal.fade.in { + top: 20px; + } +} + +@media (max-width: 480px) { + .nav-collapse { + -webkit-transform: translate3d(0, 0, 0); + } + .page-header h1 small { + display: block; + line-height: 20px; + } + input[type="checkbox"], + input[type="radio"] { + border: 1px solid #ccc; + } + .form-horizontal .control-label { + float: none; + width: auto; + padding-top: 0; + text-align: left; + } + .form-horizontal .controls { + margin-left: 0; + } + .form-horizontal .control-list { + padding-top: 0; + } + .form-horizontal .form-actions { + padding-right: 10px; + padding-left: 10px; + } + .media .pull-left, + .media .pull-right { + display: block; + float: none; + margin-bottom: 10px; + } + .media-object { + margin-right: 0; + margin-left: 0; + } + .modal { + top: 10px; + right: 10px; + left: 10px; + } + .modal-header .close { + padding: 10px; + margin: -10px; + } + .carousel-caption { + position: static; + } +} + +@media (max-width: 979px) { + body { + padding-top: 0; + } + .navbar-fixed-top, + .navbar-fixed-bottom { + position: static; + } + .navbar-fixed-top { + margin-bottom: 20px; + } + .navbar-fixed-bottom { + margin-top: 20px; + } + .navbar-fixed-top .navbar-inner, + .navbar-fixed-bottom .navbar-inner { + padding: 5px; + } + .navbar .container { + width: auto; + padding: 0; + } + .navbar .brand { + padding-right: 10px; + padding-left: 10px; + margin: 0 0 0 -5px; + } + .nav-collapse { + clear: both; + } + .nav-collapse .nav { + float: none; + margin: 0 0 10px; + } + .nav-collapse .nav > li { + float: none; + } + .nav-collapse .nav > li > a { + margin-bottom: 2px; + } + .nav-collapse .nav > .divider-vertical { + display: none; + } + .nav-collapse .nav .nav-header { + color: #777777; + text-shadow: none; + } + .nav-collapse .nav > li > a, + .nav-collapse .dropdown-menu a { + padding: 9px 15px; + font-weight: bold; + color: #777777; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; + } + .nav-collapse .btn { + padding: 4px 10px 4px; + font-weight: normal; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + } + .nav-collapse .dropdown-menu li + li a { + margin-bottom: 2px; + } + .nav-collapse .nav > li > a:hover, + .nav-collapse .nav > li > a:focus, + .nav-collapse .dropdown-menu a:hover, + .nav-collapse .dropdown-menu a:focus { + background-color: #f2f2f2; + } + .navbar-inverse .nav-collapse .nav > li > a, + .navbar-inverse .nav-collapse .dropdown-menu a { + color: #999999; + } + .navbar-inverse .nav-collapse .nav > li > a:hover, + .navbar-inverse .nav-collapse .nav > li > a:focus, + .navbar-inverse .nav-collapse .dropdown-menu a:hover, + .navbar-inverse .nav-collapse .dropdown-menu a:focus { + background-color: #111111; + } + .nav-collapse.in .btn-group { + padding: 0; + margin-top: 5px; + } + .nav-collapse .dropdown-menu { + position: static; + top: auto; + left: auto; + display: none; + float: none; + max-width: none; + padding: 0; + margin: 0 15px; + background-color: transparent; + border: none; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; + } + .nav-collapse .open > .dropdown-menu { + display: block; + } + .nav-collapse .dropdown-menu:before, + .nav-collapse .dropdown-menu:after { + display: none; + } + .nav-collapse .dropdown-menu .divider { + display: none; + } + .nav-collapse .nav > li > .dropdown-menu:before, + .nav-collapse .nav > li > .dropdown-menu:after { + display: none; + } + .nav-collapse .navbar-form, + .nav-collapse .navbar-search { + float: none; + padding: 10px 15px; + margin: 10px 0; + border-top: 1px solid #f2f2f2; + border-bottom: 1px solid #f2f2f2; + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1); + -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1); + } + .navbar-inverse .nav-collapse .navbar-form, + .navbar-inverse .nav-collapse .navbar-search { + border-top-color: #111111; + border-bottom-color: #111111; + } + .navbar .nav-collapse .nav.pull-right { + float: none; + margin-left: 0; + } + .nav-collapse, + .nav-collapse.collapse { + height: 0; + overflow: hidden; + } + .navbar .btn-navbar { + display: block; + } + .navbar-static .navbar-inner { + padding-right: 10px; + padding-left: 10px; + } +} + +@media (min-width: 980px) { + .nav-collapse.collapse { + height: auto !important; + overflow: visible !important; + } +} diff --git a/docs/_static/bootstrap-2.3.2/css/bootstrap-responsive.min.css b/docs/_static/bootstrap-2.3.2/css/bootstrap-responsive.min.css new file mode 100644 index 0000000..f4ede63 --- /dev/null +++ b/docs/_static/bootstrap-2.3.2/css/bootstrap-responsive.min.css @@ -0,0 +1,9 @@ +/*! + * Bootstrap Responsive v2.3.2 + * + * Copyright 2012 Twitter, Inc + * Licensed under the Apache License v2.0 + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Designed and built with all the love in the world @twitter by @mdo and @fat. + */.clearfix{*zoom:1}.clearfix:before,.clearfix:after{display:table;line-height:0;content:""}.clearfix:after{clear:both}.hide-text{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.input-block-level{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}@-ms-viewport{width:device-width}.hidden{display:none;visibility:hidden}.visible-phone{display:none!important}.visible-tablet{display:none!important}.hidden-desktop{display:none!important}.visible-desktop{display:inherit!important}@media(min-width:768px) and (max-width:979px){.hidden-desktop{display:inherit!important}.visible-desktop{display:none!important}.visible-tablet{display:inherit!important}.hidden-tablet{display:none!important}}@media(max-width:767px){.hidden-desktop{display:inherit!important}.visible-desktop{display:none!important}.visible-phone{display:inherit!important}.hidden-phone{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:inherit!important}.hidden-print{display:none!important}}@media(min-width:1200px){.row{margin-left:-30px;*zoom:1}.row:before,.row:after{display:table;line-height:0;content:""}.row:after{clear:both}[class*="span"]{float:left;min-height:1px;margin-left:30px}.container,.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:1170px}.span12{width:1170px}.span11{width:1070px}.span10{width:970px}.span9{width:870px}.span8{width:770px}.span7{width:670px}.span6{width:570px}.span5{width:470px}.span4{width:370px}.span3{width:270px}.span2{width:170px}.span1{width:70px}.offset12{margin-left:1230px}.offset11{margin-left:1130px}.offset10{margin-left:1030px}.offset9{margin-left:930px}.offset8{margin-left:830px}.offset7{margin-left:730px}.offset6{margin-left:630px}.offset5{margin-left:530px}.offset4{margin-left:430px}.offset3{margin-left:330px}.offset2{margin-left:230px}.offset1{margin-left:130px}.row-fluid{width:100%;*zoom:1}.row-fluid:before,.row-fluid:after{display:table;line-height:0;content:""}.row-fluid:after{clear:both}.row-fluid [class*="span"]{display:block;float:left;width:100%;min-height:30px;margin-left:2.564102564102564%;*margin-left:2.5109110747408616%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.row-fluid [class*="span"]:first-child{margin-left:0}.row-fluid .controls-row [class*="span"]+[class*="span"]{margin-left:2.564102564102564%}.row-fluid .span12{width:100%;*width:99.94680851063829%}.row-fluid .span11{width:91.45299145299145%;*width:91.39979996362975%}.row-fluid .span10{width:82.90598290598291%;*width:82.8527914166212%}.row-fluid .span9{width:74.35897435897436%;*width:74.30578286961266%}.row-fluid .span8{width:65.81196581196582%;*width:65.75877432260411%}.row-fluid .span7{width:57.26495726495726%;*width:57.21176577559556%}.row-fluid .span6{width:48.717948717948715%;*width:48.664757228587014%}.row-fluid .span5{width:40.17094017094017%;*width:40.11774868157847%}.row-fluid .span4{width:31.623931623931625%;*width:31.570740134569924%}.row-fluid .span3{width:23.076923076923077%;*width:23.023731587561375%}.row-fluid .span2{width:14.52991452991453%;*width:14.476723040552828%}.row-fluid .span1{width:5.982905982905983%;*width:5.929714493544281%}.row-fluid .offset12{margin-left:105.12820512820512%;*margin-left:105.02182214948171%}.row-fluid .offset12:first-child{margin-left:102.56410256410257%;*margin-left:102.45771958537915%}.row-fluid .offset11{margin-left:96.58119658119658%;*margin-left:96.47481360247316%}.row-fluid .offset11:first-child{margin-left:94.01709401709402%;*margin-left:93.91071103837061%}.row-fluid .offset10{margin-left:88.03418803418803%;*margin-left:87.92780505546462%}.row-fluid .offset10:first-child{margin-left:85.47008547008548%;*margin-left:85.36370249136206%}.row-fluid .offset9{margin-left:79.48717948717949%;*margin-left:79.38079650845607%}.row-fluid .offset9:first-child{margin-left:76.92307692307693%;*margin-left:76.81669394435352%}.row-fluid .offset8{margin-left:70.94017094017094%;*margin-left:70.83378796144753%}.row-fluid .offset8:first-child{margin-left:68.37606837606839%;*margin-left:68.26968539734497%}.row-fluid .offset7{margin-left:62.393162393162385%;*margin-left:62.28677941443899%}.row-fluid .offset7:first-child{margin-left:59.82905982905982%;*margin-left:59.72267685033642%}.row-fluid .offset6{margin-left:53.84615384615384%;*margin-left:53.739770867430444%}.row-fluid .offset6:first-child{margin-left:51.28205128205128%;*margin-left:51.175668303327875%}.row-fluid .offset5{margin-left:45.299145299145295%;*margin-left:45.1927623204219%}.row-fluid .offset5:first-child{margin-left:42.73504273504273%;*margin-left:42.62865975631933%}.row-fluid .offset4{margin-left:36.75213675213675%;*margin-left:36.645753773413354%}.row-fluid .offset4:first-child{margin-left:34.18803418803419%;*margin-left:34.081651209310785%}.row-fluid .offset3{margin-left:28.205128205128204%;*margin-left:28.0987452264048%}.row-fluid .offset3:first-child{margin-left:25.641025641025642%;*margin-left:25.53464266230224%}.row-fluid .offset2{margin-left:19.65811965811966%;*margin-left:19.551736679396257%}.row-fluid .offset2:first-child{margin-left:17.094017094017094%;*margin-left:16.98763411529369%}.row-fluid .offset1{margin-left:11.11111111111111%;*margin-left:11.004728132387708%}.row-fluid .offset1:first-child{margin-left:8.547008547008547%;*margin-left:8.440625568285142%}input,textarea,.uneditable-input{margin-left:0}.controls-row [class*="span"]+[class*="span"]{margin-left:30px}input.span12,textarea.span12,.uneditable-input.span12{width:1156px}input.span11,textarea.span11,.uneditable-input.span11{width:1056px}input.span10,textarea.span10,.uneditable-input.span10{width:956px}input.span9,textarea.span9,.uneditable-input.span9{width:856px}input.span8,textarea.span8,.uneditable-input.span8{width:756px}input.span7,textarea.span7,.uneditable-input.span7{width:656px}input.span6,textarea.span6,.uneditable-input.span6{width:556px}input.span5,textarea.span5,.uneditable-input.span5{width:456px}input.span4,textarea.span4,.uneditable-input.span4{width:356px}input.span3,textarea.span3,.uneditable-input.span3{width:256px}input.span2,textarea.span2,.uneditable-input.span2{width:156px}input.span1,textarea.span1,.uneditable-input.span1{width:56px}.thumbnails{margin-left:-30px}.thumbnails>li{margin-left:30px}.row-fluid .thumbnails{margin-left:0}}@media(min-width:768px) and (max-width:979px){.row{margin-left:-20px;*zoom:1}.row:before,.row:after{display:table;line-height:0;content:""}.row:after{clear:both}[class*="span"]{float:left;min-height:1px;margin-left:20px}.container,.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:724px}.span12{width:724px}.span11{width:662px}.span10{width:600px}.span9{width:538px}.span8{width:476px}.span7{width:414px}.span6{width:352px}.span5{width:290px}.span4{width:228px}.span3{width:166px}.span2{width:104px}.span1{width:42px}.offset12{margin-left:764px}.offset11{margin-left:702px}.offset10{margin-left:640px}.offset9{margin-left:578px}.offset8{margin-left:516px}.offset7{margin-left:454px}.offset6{margin-left:392px}.offset5{margin-left:330px}.offset4{margin-left:268px}.offset3{margin-left:206px}.offset2{margin-left:144px}.offset1{margin-left:82px}.row-fluid{width:100%;*zoom:1}.row-fluid:before,.row-fluid:after{display:table;line-height:0;content:""}.row-fluid:after{clear:both}.row-fluid [class*="span"]{display:block;float:left;width:100%;min-height:30px;margin-left:2.7624309392265194%;*margin-left:2.709239449864817%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.row-fluid [class*="span"]:first-child{margin-left:0}.row-fluid .controls-row [class*="span"]+[class*="span"]{margin-left:2.7624309392265194%}.row-fluid .span12{width:100%;*width:99.94680851063829%}.row-fluid .span11{width:91.43646408839778%;*width:91.38327259903608%}.row-fluid .span10{width:82.87292817679558%;*width:82.81973668743387%}.row-fluid .span9{width:74.30939226519337%;*width:74.25620077583166%}.row-fluid .span8{width:65.74585635359117%;*width:65.69266486422946%}.row-fluid .span7{width:57.18232044198895%;*width:57.12912895262725%}.row-fluid .span6{width:48.61878453038674%;*width:48.56559304102504%}.row-fluid .span5{width:40.05524861878453%;*width:40.00205712942283%}.row-fluid .span4{width:31.491712707182323%;*width:31.43852121782062%}.row-fluid .span3{width:22.92817679558011%;*width:22.87498530621841%}.row-fluid .span2{width:14.3646408839779%;*width:14.311449394616199%}.row-fluid .span1{width:5.801104972375691%;*width:5.747913483013988%}.row-fluid .offset12{margin-left:105.52486187845304%;*margin-left:105.41847889972962%}.row-fluid .offset12:first-child{margin-left:102.76243093922652%;*margin-left:102.6560479605031%}.row-fluid .offset11{margin-left:96.96132596685082%;*margin-left:96.8549429881274%}.row-fluid .offset11:first-child{margin-left:94.1988950276243%;*margin-left:94.09251204890089%}.row-fluid .offset10{margin-left:88.39779005524862%;*margin-left:88.2914070765252%}.row-fluid .offset10:first-child{margin-left:85.6353591160221%;*margin-left:85.52897613729868%}.row-fluid .offset9{margin-left:79.8342541436464%;*margin-left:79.72787116492299%}.row-fluid .offset9:first-child{margin-left:77.07182320441989%;*margin-left:76.96544022569647%}.row-fluid .offset8{margin-left:71.2707182320442%;*margin-left:71.16433525332079%}.row-fluid .offset8:first-child{margin-left:68.50828729281768%;*margin-left:68.40190431409427%}.row-fluid .offset7{margin-left:62.70718232044199%;*margin-left:62.600799341718584%}.row-fluid .offset7:first-child{margin-left:59.94475138121547%;*margin-left:59.838368402492065%}.row-fluid .offset6{margin-left:54.14364640883978%;*margin-left:54.037263430116376%}.row-fluid .offset6:first-child{margin-left:51.38121546961326%;*margin-left:51.27483249088986%}.row-fluid .offset5{margin-left:45.58011049723757%;*margin-left:45.47372751851417%}.row-fluid .offset5:first-child{margin-left:42.81767955801105%;*margin-left:42.71129657928765%}.row-fluid .offset4{margin-left:37.01657458563536%;*margin-left:36.91019160691196%}.row-fluid .offset4:first-child{margin-left:34.25414364640884%;*margin-left:34.14776066768544%}.row-fluid .offset3{margin-left:28.45303867403315%;*margin-left:28.346655695309746%}.row-fluid .offset3:first-child{margin-left:25.69060773480663%;*margin-left:25.584224756083227%}.row-fluid .offset2{margin-left:19.88950276243094%;*margin-left:19.783119783707537%}.row-fluid .offset2:first-child{margin-left:17.12707182320442%;*margin-left:17.02068884448102%}.row-fluid .offset1{margin-left:11.32596685082873%;*margin-left:11.219583872105325%}.row-fluid .offset1:first-child{margin-left:8.56353591160221%;*margin-left:8.457152932878806%}input,textarea,.uneditable-input{margin-left:0}.controls-row [class*="span"]+[class*="span"]{margin-left:20px}input.span12,textarea.span12,.uneditable-input.span12{width:710px}input.span11,textarea.span11,.uneditable-input.span11{width:648px}input.span10,textarea.span10,.uneditable-input.span10{width:586px}input.span9,textarea.span9,.uneditable-input.span9{width:524px}input.span8,textarea.span8,.uneditable-input.span8{width:462px}input.span7,textarea.span7,.uneditable-input.span7{width:400px}input.span6,textarea.span6,.uneditable-input.span6{width:338px}input.span5,textarea.span5,.uneditable-input.span5{width:276px}input.span4,textarea.span4,.uneditable-input.span4{width:214px}input.span3,textarea.span3,.uneditable-input.span3{width:152px}input.span2,textarea.span2,.uneditable-input.span2{width:90px}input.span1,textarea.span1,.uneditable-input.span1{width:28px}}@media(max-width:767px){body{padding-right:20px;padding-left:20px}.navbar-fixed-top,.navbar-fixed-bottom,.navbar-static-top{margin-right:-20px;margin-left:-20px}.container-fluid{padding:0}.dl-horizontal dt{float:none;width:auto;clear:none;text-align:left}.dl-horizontal dd{margin-left:0}.container{width:auto}.row-fluid{width:100%}.row,.thumbnails{margin-left:0}.thumbnails>li{float:none;margin-left:0}[class*="span"],.uneditable-input[class*="span"],.row-fluid [class*="span"]{display:block;float:none;width:100%;margin-left:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.span12,.row-fluid .span12{width:100%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.row-fluid [class*="offset"]:first-child{margin-left:0}.input-large,.input-xlarge,.input-xxlarge,input[class*="span"],select[class*="span"],textarea[class*="span"],.uneditable-input{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.input-prepend input,.input-append input,.input-prepend input[class*="span"],.input-append input[class*="span"]{display:inline-block;width:auto}.controls-row [class*="span"]+[class*="span"]{margin-left:0}.modal{position:fixed;top:20px;right:20px;left:20px;width:auto;margin:0}.modal.fade{top:-100px}.modal.fade.in{top:20px}}@media(max-width:480px){.nav-collapse{-webkit-transform:translate3d(0,0,0)}.page-header h1 small{display:block;line-height:20px}input[type="checkbox"],input[type="radio"]{border:1px solid #ccc}.form-horizontal .control-label{float:none;width:auto;padding-top:0;text-align:left}.form-horizontal .controls{margin-left:0}.form-horizontal .control-list{padding-top:0}.form-horizontal .form-actions{padding-right:10px;padding-left:10px}.media .pull-left,.media .pull-right{display:block;float:none;margin-bottom:10px}.media-object{margin-right:0;margin-left:0}.modal{top:10px;right:10px;left:10px}.modal-header .close{padding:10px;margin:-10px}.carousel-caption{position:static}}@media(max-width:979px){body{padding-top:0}.navbar-fixed-top,.navbar-fixed-bottom{position:static}.navbar-fixed-top{margin-bottom:20px}.navbar-fixed-bottom{margin-top:20px}.navbar-fixed-top .navbar-inner,.navbar-fixed-bottom .navbar-inner{padding:5px}.navbar .container{width:auto;padding:0}.navbar .brand{padding-right:10px;padding-left:10px;margin:0 0 0 -5px}.nav-collapse{clear:both}.nav-collapse .nav{float:none;margin:0 0 10px}.nav-collapse .nav>li{float:none}.nav-collapse .nav>li>a{margin-bottom:2px}.nav-collapse .nav>.divider-vertical{display:none}.nav-collapse .nav .nav-header{color:#777;text-shadow:none}.nav-collapse .nav>li>a,.nav-collapse .dropdown-menu a{padding:9px 15px;font-weight:bold;color:#777;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.nav-collapse .btn{padding:4px 10px 4px;font-weight:normal;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.nav-collapse .dropdown-menu li+li a{margin-bottom:2px}.nav-collapse .nav>li>a:hover,.nav-collapse .nav>li>a:focus,.nav-collapse .dropdown-menu a:hover,.nav-collapse .dropdown-menu a:focus{background-color:#f2f2f2}.navbar-inverse .nav-collapse .nav>li>a,.navbar-inverse .nav-collapse .dropdown-menu a{color:#999}.navbar-inverse .nav-collapse .nav>li>a:hover,.navbar-inverse .nav-collapse .nav>li>a:focus,.navbar-inverse .nav-collapse .dropdown-menu a:hover,.navbar-inverse .nav-collapse .dropdown-menu a:focus{background-color:#111}.nav-collapse.in .btn-group{padding:0;margin-top:5px}.nav-collapse .dropdown-menu{position:static;top:auto;left:auto;display:none;float:none;max-width:none;padding:0;margin:0 15px;background-color:transparent;border:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.nav-collapse .open>.dropdown-menu{display:block}.nav-collapse .dropdown-menu:before,.nav-collapse .dropdown-menu:after{display:none}.nav-collapse .dropdown-menu .divider{display:none}.nav-collapse .nav>li>.dropdown-menu:before,.nav-collapse .nav>li>.dropdown-menu:after{display:none}.nav-collapse .navbar-form,.nav-collapse .navbar-search{float:none;padding:10px 15px;margin:10px 0;border-top:1px solid #f2f2f2;border-bottom:1px solid #f2f2f2;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1)}.navbar-inverse .nav-collapse .navbar-form,.navbar-inverse .nav-collapse .navbar-search{border-top-color:#111;border-bottom-color:#111}.navbar .nav-collapse .nav.pull-right{float:none;margin-left:0}.nav-collapse,.nav-collapse.collapse{height:0;overflow:hidden}.navbar .btn-navbar{display:block}.navbar-static .navbar-inner{padding-right:10px;padding-left:10px}}@media(min-width:980px){.nav-collapse.collapse{height:auto!important;overflow:visible!important}} diff --git a/docs/_static/bootstrap-2.3.2/css/bootstrap.css b/docs/_static/bootstrap-2.3.2/css/bootstrap.css new file mode 100644 index 0000000..b725064 --- /dev/null +++ b/docs/_static/bootstrap-2.3.2/css/bootstrap.css @@ -0,0 +1,6167 @@ +/*! + * Bootstrap v2.3.2 + * + * Copyright 2012 Twitter, Inc + * Licensed under the Apache License v2.0 + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Designed and built with all the love in the world @twitter by @mdo and @fat. + */ + +.clearfix { + *zoom: 1; +} + +.clearfix:before, +.clearfix:after { + display: table; + line-height: 0; + content: ""; +} + +.clearfix:after { + clear: both; +} + +.hide-text { + font: 0/0 a; + color: transparent; + text-shadow: none; + background-color: transparent; + border: 0; +} + +.input-block-level { + display: block; + width: 100%; + min-height: 30px; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +article, +aside, +details, +figcaption, +figure, +footer, +header, +hgroup, +nav, +section { + display: block; +} + +audio, +canvas, +video { + display: inline-block; + *display: inline; + *zoom: 1; +} + +audio:not([controls]) { + display: none; +} + +html { + font-size: 100%; + -webkit-text-size-adjust: 100%; + -ms-text-size-adjust: 100%; +} + +a:focus { + outline: thin dotted #333; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} + +a:hover, +a:active { + outline: 0; +} + +sub, +sup { + position: relative; + font-size: 75%; + line-height: 0; + vertical-align: baseline; +} + +sup { + top: -0.5em; +} + +sub { + bottom: -0.25em; +} + +img { + width: auto\9; + height: auto; + max-width: 100%; + vertical-align: middle; + border: 0; + -ms-interpolation-mode: bicubic; +} + +#map_canvas img, +.google-maps img { + max-width: none; +} + +button, +input, +select, +textarea { + margin: 0; + font-size: 100%; + vertical-align: middle; +} + +button, +input { + *overflow: visible; + line-height: normal; +} + +button::-moz-focus-inner, +input::-moz-focus-inner { + padding: 0; + border: 0; +} + +button, +html input[type="button"], +input[type="reset"], +input[type="submit"] { + cursor: pointer; + -webkit-appearance: button; +} + +label, +select, +button, +input[type="button"], +input[type="reset"], +input[type="submit"], +input[type="radio"], +input[type="checkbox"] { + cursor: pointer; +} + +input[type="search"] { + -webkit-box-sizing: content-box; + -moz-box-sizing: content-box; + box-sizing: content-box; + -webkit-appearance: textfield; +} + +input[type="search"]::-webkit-search-decoration, +input[type="search"]::-webkit-search-cancel-button { + -webkit-appearance: none; +} + +textarea { + overflow: auto; + vertical-align: top; +} + +@media print { + * { + color: #000 !important; + text-shadow: none !important; + background: transparent !important; + box-shadow: none !important; + } + a, + a:visited { + text-decoration: underline; + } + a[href]:after { + content: " (" attr(href) ")"; + } + abbr[title]:after { + content: " (" attr(title) ")"; + } + .ir a:after, + a[href^="javascript:"]:after, + a[href^="#"]:after { + content: ""; + } + pre, + blockquote { + border: 1px solid #999; + page-break-inside: avoid; + } + thead { + display: table-header-group; + } + tr, + img { + page-break-inside: avoid; + } + img { + max-width: 100% !important; + } + @page { + margin: 0.5cm; + } + p, + h2, + h3 { + orphans: 3; + widows: 3; + } + h2, + h3 { + page-break-after: avoid; + } +} + +body { + margin: 0; + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 14px; + line-height: 20px; + color: #333333; + background-color: #ffffff; +} + +a { + color: #0088cc; + text-decoration: none; +} + +a:hover, +a:focus { + color: #005580; + text-decoration: underline; +} + +.img-rounded { + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; +} + +.img-polaroid { + padding: 4px; + background-color: #fff; + border: 1px solid #ccc; + border: 1px solid rgba(0, 0, 0, 0.2); + -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); + -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); +} + +.img-circle { + -webkit-border-radius: 500px; + -moz-border-radius: 500px; + border-radius: 500px; +} + +.row { + margin-left: -20px; + *zoom: 1; +} + +.row:before, +.row:after { + display: table; + line-height: 0; + content: ""; +} + +.row:after { + clear: both; +} + +[class*="span"] { + float: left; + min-height: 1px; + margin-left: 20px; +} + +.container, +.navbar-static-top .container, +.navbar-fixed-top .container, +.navbar-fixed-bottom .container { + width: 940px; +} + +.span12 { + width: 940px; +} + +.span11 { + width: 860px; +} + +.span10 { + width: 780px; +} + +.span9 { + width: 700px; +} + +.span8 { + width: 620px; +} + +.span7 { + width: 540px; +} + +.span6 { + width: 460px; +} + +.span5 { + width: 380px; +} + +.span4 { + width: 300px; +} + +.span3 { + width: 220px; +} + +.span2 { + width: 140px; +} + +.span1 { + width: 60px; +} + +.offset12 { + margin-left: 980px; +} + +.offset11 { + margin-left: 900px; +} + +.offset10 { + margin-left: 820px; +} + +.offset9 { + margin-left: 740px; +} + +.offset8 { + margin-left: 660px; +} + +.offset7 { + margin-left: 580px; +} + +.offset6 { + margin-left: 500px; +} + +.offset5 { + margin-left: 420px; +} + +.offset4 { + margin-left: 340px; +} + +.offset3 { + margin-left: 260px; +} + +.offset2 { + margin-left: 180px; +} + +.offset1 { + margin-left: 100px; +} + +.row-fluid { + width: 100%; + *zoom: 1; +} + +.row-fluid:before, +.row-fluid:after { + display: table; + line-height: 0; + content: ""; +} + +.row-fluid:after { + clear: both; +} + +.row-fluid [class*="span"] { + display: block; + float: left; + width: 100%; + min-height: 30px; + margin-left: 2.127659574468085%; + *margin-left: 2.074468085106383%; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +.row-fluid [class*="span"]:first-child { + margin-left: 0; +} + +.row-fluid .controls-row [class*="span"] + [class*="span"] { + margin-left: 2.127659574468085%; +} + +.row-fluid .span12 { + width: 100%; + *width: 99.94680851063829%; +} + +.row-fluid .span11 { + width: 91.48936170212765%; + *width: 91.43617021276594%; +} + +.row-fluid .span10 { + width: 82.97872340425532%; + *width: 82.92553191489361%; +} + +.row-fluid .span9 { + width: 74.46808510638297%; + *width: 74.41489361702126%; +} + +.row-fluid .span8 { + width: 65.95744680851064%; + *width: 65.90425531914893%; +} + +.row-fluid .span7 { + width: 57.44680851063829%; + *width: 57.39361702127659%; +} + +.row-fluid .span6 { + width: 48.93617021276595%; + *width: 48.88297872340425%; +} + +.row-fluid .span5 { + width: 40.42553191489362%; + *width: 40.37234042553192%; +} + +.row-fluid .span4 { + width: 31.914893617021278%; + *width: 31.861702127659576%; +} + +.row-fluid .span3 { + width: 23.404255319148934%; + *width: 23.351063829787233%; +} + +.row-fluid .span2 { + width: 14.893617021276595%; + *width: 14.840425531914894%; +} + +.row-fluid .span1 { + width: 6.382978723404255%; + *width: 6.329787234042553%; +} + +.row-fluid .offset12 { + margin-left: 104.25531914893617%; + *margin-left: 104.14893617021275%; +} + +.row-fluid .offset12:first-child { + margin-left: 102.12765957446808%; + *margin-left: 102.02127659574467%; +} + +.row-fluid .offset11 { + margin-left: 95.74468085106382%; + *margin-left: 95.6382978723404%; +} + +.row-fluid .offset11:first-child { + margin-left: 93.61702127659574%; + *margin-left: 93.51063829787232%; +} + +.row-fluid .offset10 { + margin-left: 87.23404255319149%; + *margin-left: 87.12765957446807%; +} + +.row-fluid .offset10:first-child { + margin-left: 85.1063829787234%; + *margin-left: 84.99999999999999%; +} + +.row-fluid .offset9 { + margin-left: 78.72340425531914%; + *margin-left: 78.61702127659572%; +} + +.row-fluid .offset9:first-child { + margin-left: 76.59574468085106%; + *margin-left: 76.48936170212764%; +} + +.row-fluid .offset8 { + margin-left: 70.2127659574468%; + *margin-left: 70.10638297872339%; +} + +.row-fluid .offset8:first-child { + margin-left: 68.08510638297872%; + *margin-left: 67.9787234042553%; +} + +.row-fluid .offset7 { + margin-left: 61.70212765957446%; + *margin-left: 61.59574468085106%; +} + +.row-fluid .offset7:first-child { + margin-left: 59.574468085106375%; + *margin-left: 59.46808510638297%; +} + +.row-fluid .offset6 { + margin-left: 53.191489361702125%; + *margin-left: 53.085106382978715%; +} + +.row-fluid .offset6:first-child { + margin-left: 51.063829787234035%; + *margin-left: 50.95744680851063%; +} + +.row-fluid .offset5 { + margin-left: 44.68085106382979%; + *margin-left: 44.57446808510638%; +} + +.row-fluid .offset5:first-child { + margin-left: 42.5531914893617%; + *margin-left: 42.4468085106383%; +} + +.row-fluid .offset4 { + margin-left: 36.170212765957444%; + *margin-left: 36.06382978723405%; +} + +.row-fluid .offset4:first-child { + margin-left: 34.04255319148936%; + *margin-left: 33.93617021276596%; +} + +.row-fluid .offset3 { + margin-left: 27.659574468085104%; + *margin-left: 27.5531914893617%; +} + +.row-fluid .offset3:first-child { + margin-left: 25.53191489361702%; + *margin-left: 25.425531914893618%; +} + +.row-fluid .offset2 { + margin-left: 19.148936170212764%; + *margin-left: 19.04255319148936%; +} + +.row-fluid .offset2:first-child { + margin-left: 17.02127659574468%; + *margin-left: 16.914893617021278%; +} + +.row-fluid .offset1 { + margin-left: 10.638297872340425%; + *margin-left: 10.53191489361702%; +} + +.row-fluid .offset1:first-child { + margin-left: 8.51063829787234%; + *margin-left: 8.404255319148938%; +} + +[class*="span"].hide, +.row-fluid [class*="span"].hide { + display: none; +} + +[class*="span"].pull-right, +.row-fluid [class*="span"].pull-right { + float: right; +} + +.container { + margin-right: auto; + margin-left: auto; + *zoom: 1; +} + +.container:before, +.container:after { + display: table; + line-height: 0; + content: ""; +} + +.container:after { + clear: both; +} + +.container-fluid { + padding-right: 20px; + padding-left: 20px; + *zoom: 1; +} + +.container-fluid:before, +.container-fluid:after { + display: table; + line-height: 0; + content: ""; +} + +.container-fluid:after { + clear: both; +} + +p { + margin: 0 0 10px; +} + +.lead { + margin-bottom: 20px; + font-size: 21px; + font-weight: 200; + line-height: 30px; +} + +small { + font-size: 85%; +} + +strong { + font-weight: bold; +} + +em { + font-style: italic; +} + +cite { + font-style: normal; +} + +.muted { + color: #999999; +} + +a.muted:hover, +a.muted:focus { + color: #808080; +} + +.text-warning { + color: #c09853; +} + +a.text-warning:hover, +a.text-warning:focus { + color: #a47e3c; +} + +.text-error { + color: #b94a48; +} + +a.text-error:hover, +a.text-error:focus { + color: #953b39; +} + +.text-info { + color: #3a87ad; +} + +a.text-info:hover, +a.text-info:focus { + color: #2d6987; +} + +.text-success { + color: #468847; +} + +a.text-success:hover, +a.text-success:focus { + color: #356635; +} + +.text-left { + text-align: left; +} + +.text-right { + text-align: right; +} + +.text-center { + text-align: center; +} + +h1, +h2, +h3, +h4, +h5, +h6 { + margin: 10px 0; + font-family: inherit; + font-weight: bold; + line-height: 20px; + color: inherit; + text-rendering: optimizelegibility; +} + +h1 small, +h2 small, +h3 small, +h4 small, +h5 small, +h6 small { + font-weight: normal; + line-height: 1; + color: #999999; +} + +h1, +h2, +h3 { + line-height: 40px; +} + +h1 { + font-size: 38.5px; +} + +h2 { + font-size: 31.5px; +} + +h3 { + font-size: 24.5px; +} + +h4 { + font-size: 17.5px; +} + +h5 { + font-size: 14px; +} + +h6 { + font-size: 11.9px; +} + +h1 small { + font-size: 24.5px; +} + +h2 small { + font-size: 17.5px; +} + +h3 small { + font-size: 14px; +} + +h4 small { + font-size: 14px; +} + +.page-header { + padding-bottom: 9px; + margin: 20px 0 30px; + border-bottom: 1px solid #eeeeee; +} + +ul, +ol { + padding: 0; + margin: 0 0 10px 25px; +} + +ul ul, +ul ol, +ol ol, +ol ul { + margin-bottom: 0; +} + +li { + line-height: 20px; +} + +ul.unstyled, +ol.unstyled { + margin-left: 0; + list-style: none; +} + +ul.inline, +ol.inline { + margin-left: 0; + list-style: none; +} + +ul.inline > li, +ol.inline > li { + display: inline-block; + *display: inline; + padding-right: 5px; + padding-left: 5px; + *zoom: 1; +} + +dl { + margin-bottom: 20px; +} + +dt, +dd { + line-height: 20px; +} + +dt { + font-weight: bold; +} + +dd { + margin-left: 10px; +} + +.dl-horizontal { + *zoom: 1; +} + +.dl-horizontal:before, +.dl-horizontal:after { + display: table; + line-height: 0; + content: ""; +} + +.dl-horizontal:after { + clear: both; +} + +.dl-horizontal dt { + float: left; + width: 160px; + overflow: hidden; + clear: left; + text-align: right; + text-overflow: ellipsis; + white-space: nowrap; +} + +.dl-horizontal dd { + margin-left: 180px; +} + +hr { + margin: 20px 0; + border: 0; + border-top: 1px solid #eeeeee; + border-bottom: 1px solid #ffffff; +} + +abbr[title], +abbr[data-original-title] { + cursor: help; + border-bottom: 1px dotted #999999; +} + +abbr.initialism { + font-size: 90%; + text-transform: uppercase; +} + +blockquote { + padding: 0 0 0 15px; + margin: 0 0 20px; + border-left: 5px solid #eeeeee; +} + +blockquote p { + margin-bottom: 0; + font-size: 17.5px; + font-weight: 300; + line-height: 1.25; +} + +blockquote small { + display: block; + line-height: 20px; + color: #999999; +} + +blockquote small:before { + content: '\2014 \00A0'; +} + +blockquote.pull-right { + float: right; + padding-right: 15px; + padding-left: 0; + border-right: 5px solid #eeeeee; + border-left: 0; +} + +blockquote.pull-right p, +blockquote.pull-right small { + text-align: right; +} + +blockquote.pull-right small:before { + content: ''; +} + +blockquote.pull-right small:after { + content: '\00A0 \2014'; +} + +q:before, +q:after, +blockquote:before, +blockquote:after { + content: ""; +} + +address { + display: block; + margin-bottom: 20px; + font-style: normal; + line-height: 20px; +} + +code, +pre { + padding: 0 3px 2px; + font-family: Monaco, Menlo, Consolas, "Courier New", monospace; + font-size: 12px; + color: #333333; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; +} + +code { + padding: 2px 4px; + color: #d14; + white-space: nowrap; + background-color: #f7f7f9; + border: 1px solid #e1e1e8; +} + +pre { + display: block; + padding: 9.5px; + margin: 0 0 10px; + font-size: 13px; + line-height: 20px; + word-break: break-all; + word-wrap: break-word; + white-space: pre; + white-space: pre-wrap; + background-color: #f5f5f5; + border: 1px solid #ccc; + border: 1px solid rgba(0, 0, 0, 0.15); + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +pre.prettyprint { + margin-bottom: 20px; +} + +pre code { + padding: 0; + color: inherit; + white-space: pre; + white-space: pre-wrap; + background-color: transparent; + border: 0; +} + +.pre-scrollable { + max-height: 340px; + overflow-y: scroll; +} + +form { + margin: 0 0 20px; +} + +fieldset { + padding: 0; + margin: 0; + border: 0; +} + +legend { + display: block; + width: 100%; + padding: 0; + margin-bottom: 20px; + font-size: 21px; + line-height: 40px; + color: #333333; + border: 0; + border-bottom: 1px solid #e5e5e5; +} + +legend small { + font-size: 15px; + color: #999999; +} + +label, +input, +button, +select, +textarea { + font-size: 14px; + font-weight: normal; + line-height: 20px; +} + +input, +button, +select, +textarea { + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; +} + +label { + display: block; + margin-bottom: 5px; +} + +select, +textarea, +input[type="text"], +input[type="password"], +input[type="datetime"], +input[type="datetime-local"], +input[type="date"], +input[type="month"], +input[type="time"], +input[type="week"], +input[type="number"], +input[type="email"], +input[type="url"], +input[type="search"], +input[type="tel"], +input[type="color"], +.uneditable-input { + display: inline-block; + height: 20px; + padding: 4px 6px; + margin-bottom: 10px; + font-size: 14px; + line-height: 20px; + color: #555555; + vertical-align: middle; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +input, +textarea, +.uneditable-input { + width: 206px; +} + +textarea { + height: auto; +} + +textarea, +input[type="text"], +input[type="password"], +input[type="datetime"], +input[type="datetime-local"], +input[type="date"], +input[type="month"], +input[type="time"], +input[type="week"], +input[type="number"], +input[type="email"], +input[type="url"], +input[type="search"], +input[type="tel"], +input[type="color"], +.uneditable-input { + background-color: #ffffff; + border: 1px solid #cccccc; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + -webkit-transition: border linear 0.2s, box-shadow linear 0.2s; + -moz-transition: border linear 0.2s, box-shadow linear 0.2s; + -o-transition: border linear 0.2s, box-shadow linear 0.2s; + transition: border linear 0.2s, box-shadow linear 0.2s; +} + +textarea:focus, +input[type="text"]:focus, +input[type="password"]:focus, +input[type="datetime"]:focus, +input[type="datetime-local"]:focus, +input[type="date"]:focus, +input[type="month"]:focus, +input[type="time"]:focus, +input[type="week"]:focus, +input[type="number"]:focus, +input[type="email"]:focus, +input[type="url"]:focus, +input[type="search"]:focus, +input[type="tel"]:focus, +input[type="color"]:focus, +.uneditable-input:focus { + border-color: rgba(82, 168, 236, 0.8); + outline: 0; + outline: thin dotted \9; + /* IE6-9 */ + + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6); + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6); +} + +input[type="radio"], +input[type="checkbox"] { + margin: 4px 0 0; + margin-top: 1px \9; + *margin-top: 0; + line-height: normal; +} + +input[type="file"], +input[type="image"], +input[type="submit"], +input[type="reset"], +input[type="button"], +input[type="radio"], +input[type="checkbox"] { + width: auto; +} + +select, +input[type="file"] { + height: 30px; + /* In IE7, the height of the select element cannot be changed by height, only font-size */ + + *margin-top: 4px; + /* For IE7, add top margin to align select with labels */ + + line-height: 30px; +} + +select { + width: 220px; + background-color: #ffffff; + border: 1px solid #cccccc; +} + +select[multiple], +select[size] { + height: auto; +} + +select:focus, +input[type="file"]:focus, +input[type="radio"]:focus, +input[type="checkbox"]:focus { + outline: thin dotted #333; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} + +.uneditable-input, +.uneditable-textarea { + color: #999999; + cursor: not-allowed; + background-color: #fcfcfc; + border-color: #cccccc; + -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025); + -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025); + box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025); +} + +.uneditable-input { + overflow: hidden; + white-space: nowrap; +} + +.uneditable-textarea { + width: auto; + height: auto; +} + +input:-moz-placeholder, +textarea:-moz-placeholder { + color: #999999; +} + +input:-ms-input-placeholder, +textarea:-ms-input-placeholder { + color: #999999; +} + +input::-webkit-input-placeholder, +textarea::-webkit-input-placeholder { + color: #999999; +} + +.radio, +.checkbox { + min-height: 20px; + padding-left: 20px; +} + +.radio input[type="radio"], +.checkbox input[type="checkbox"] { + float: left; + margin-left: -20px; +} + +.controls > .radio:first-child, +.controls > .checkbox:first-child { + padding-top: 5px; +} + +.radio.inline, +.checkbox.inline { + display: inline-block; + padding-top: 5px; + margin-bottom: 0; + vertical-align: middle; +} + +.radio.inline + .radio.inline, +.checkbox.inline + .checkbox.inline { + margin-left: 10px; +} + +.input-mini { + width: 60px; +} + +.input-small { + width: 90px; +} + +.input-medium { + width: 150px; +} + +.input-large { + width: 210px; +} + +.input-xlarge { + width: 270px; +} + +.input-xxlarge { + width: 530px; +} + +input[class*="span"], +select[class*="span"], +textarea[class*="span"], +.uneditable-input[class*="span"], +.row-fluid input[class*="span"], +.row-fluid select[class*="span"], +.row-fluid textarea[class*="span"], +.row-fluid .uneditable-input[class*="span"] { + float: none; + margin-left: 0; +} + +.input-append input[class*="span"], +.input-append .uneditable-input[class*="span"], +.input-prepend input[class*="span"], +.input-prepend .uneditable-input[class*="span"], +.row-fluid input[class*="span"], +.row-fluid select[class*="span"], +.row-fluid textarea[class*="span"], +.row-fluid .uneditable-input[class*="span"], +.row-fluid .input-prepend [class*="span"], +.row-fluid .input-append [class*="span"] { + display: inline-block; +} + +input, +textarea, +.uneditable-input { + margin-left: 0; +} + +.controls-row [class*="span"] + [class*="span"] { + margin-left: 20px; +} + +input.span12, +textarea.span12, +.uneditable-input.span12 { + width: 926px; +} + +input.span11, +textarea.span11, +.uneditable-input.span11 { + width: 846px; +} + +input.span10, +textarea.span10, +.uneditable-input.span10 { + width: 766px; +} + +input.span9, +textarea.span9, +.uneditable-input.span9 { + width: 686px; +} + +input.span8, +textarea.span8, +.uneditable-input.span8 { + width: 606px; +} + +input.span7, +textarea.span7, +.uneditable-input.span7 { + width: 526px; +} + +input.span6, +textarea.span6, +.uneditable-input.span6 { + width: 446px; +} + +input.span5, +textarea.span5, +.uneditable-input.span5 { + width: 366px; +} + +input.span4, +textarea.span4, +.uneditable-input.span4 { + width: 286px; +} + +input.span3, +textarea.span3, +.uneditable-input.span3 { + width: 206px; +} + +input.span2, +textarea.span2, +.uneditable-input.span2 { + width: 126px; +} + +input.span1, +textarea.span1, +.uneditable-input.span1 { + width: 46px; +} + +.controls-row { + *zoom: 1; +} + +.controls-row:before, +.controls-row:after { + display: table; + line-height: 0; + content: ""; +} + +.controls-row:after { + clear: both; +} + +.controls-row [class*="span"], +.row-fluid .controls-row [class*="span"] { + float: left; +} + +.controls-row .checkbox[class*="span"], +.controls-row .radio[class*="span"] { + padding-top: 5px; +} + +input[disabled], +select[disabled], +textarea[disabled], +input[readonly], +select[readonly], +textarea[readonly] { + cursor: not-allowed; + background-color: #eeeeee; +} + +input[type="radio"][disabled], +input[type="checkbox"][disabled], +input[type="radio"][readonly], +input[type="checkbox"][readonly] { + background-color: transparent; +} + +.control-group.warning .control-label, +.control-group.warning .help-block, +.control-group.warning .help-inline { + color: #c09853; +} + +.control-group.warning .checkbox, +.control-group.warning .radio, +.control-group.warning input, +.control-group.warning select, +.control-group.warning textarea { + color: #c09853; +} + +.control-group.warning input, +.control-group.warning select, +.control-group.warning textarea { + border-color: #c09853; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); +} + +.control-group.warning input:focus, +.control-group.warning select:focus, +.control-group.warning textarea:focus { + border-color: #a47e3c; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc59e; + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc59e; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc59e; +} + +.control-group.warning .input-prepend .add-on, +.control-group.warning .input-append .add-on { + color: #c09853; + background-color: #fcf8e3; + border-color: #c09853; +} + +.control-group.error .control-label, +.control-group.error .help-block, +.control-group.error .help-inline { + color: #b94a48; +} + +.control-group.error .checkbox, +.control-group.error .radio, +.control-group.error input, +.control-group.error select, +.control-group.error textarea { + color: #b94a48; +} + +.control-group.error input, +.control-group.error select, +.control-group.error textarea { + border-color: #b94a48; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); +} + +.control-group.error input:focus, +.control-group.error select:focus, +.control-group.error textarea:focus { + border-color: #953b39; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392; + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392; +} + +.control-group.error .input-prepend .add-on, +.control-group.error .input-append .add-on { + color: #b94a48; + background-color: #f2dede; + border-color: #b94a48; +} + +.control-group.success .control-label, +.control-group.success .help-block, +.control-group.success .help-inline { + color: #468847; +} + +.control-group.success .checkbox, +.control-group.success .radio, +.control-group.success input, +.control-group.success select, +.control-group.success textarea { + color: #468847; +} + +.control-group.success input, +.control-group.success select, +.control-group.success textarea { + border-color: #468847; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); +} + +.control-group.success input:focus, +.control-group.success select:focus, +.control-group.success textarea:focus { + border-color: #356635; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7b; + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7b; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7b; +} + +.control-group.success .input-prepend .add-on, +.control-group.success .input-append .add-on { + color: #468847; + background-color: #dff0d8; + border-color: #468847; +} + +.control-group.info .control-label, +.control-group.info .help-block, +.control-group.info .help-inline { + color: #3a87ad; +} + +.control-group.info .checkbox, +.control-group.info .radio, +.control-group.info input, +.control-group.info select, +.control-group.info textarea { + color: #3a87ad; +} + +.control-group.info input, +.control-group.info select, +.control-group.info textarea { + border-color: #3a87ad; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); +} + +.control-group.info input:focus, +.control-group.info select:focus, +.control-group.info textarea:focus { + border-color: #2d6987; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7ab5d3; + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7ab5d3; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7ab5d3; +} + +.control-group.info .input-prepend .add-on, +.control-group.info .input-append .add-on { + color: #3a87ad; + background-color: #d9edf7; + border-color: #3a87ad; +} + +input:focus:invalid, +textarea:focus:invalid, +select:focus:invalid { + color: #b94a48; + border-color: #ee5f5b; +} + +input:focus:invalid:focus, +textarea:focus:invalid:focus, +select:focus:invalid:focus { + border-color: #e9322d; + -webkit-box-shadow: 0 0 6px #f8b9b7; + -moz-box-shadow: 0 0 6px #f8b9b7; + box-shadow: 0 0 6px #f8b9b7; +} + +.form-actions { + padding: 19px 20px 20px; + margin-top: 20px; + margin-bottom: 20px; + background-color: #f5f5f5; + border-top: 1px solid #e5e5e5; + *zoom: 1; +} + +.form-actions:before, +.form-actions:after { + display: table; + line-height: 0; + content: ""; +} + +.form-actions:after { + clear: both; +} + +.help-block, +.help-inline { + color: #595959; +} + +.help-block { + display: block; + margin-bottom: 10px; +} + +.help-inline { + display: inline-block; + *display: inline; + padding-left: 5px; + vertical-align: middle; + *zoom: 1; +} + +.input-append, +.input-prepend { + display: inline-block; + margin-bottom: 10px; + font-size: 0; + white-space: nowrap; + vertical-align: middle; +} + +.input-append input, +.input-prepend input, +.input-append select, +.input-prepend select, +.input-append .uneditable-input, +.input-prepend .uneditable-input, +.input-append .dropdown-menu, +.input-prepend .dropdown-menu, +.input-append .popover, +.input-prepend .popover { + font-size: 14px; +} + +.input-append input, +.input-prepend input, +.input-append select, +.input-prepend select, +.input-append .uneditable-input, +.input-prepend .uneditable-input { + position: relative; + margin-bottom: 0; + *margin-left: 0; + vertical-align: top; + -webkit-border-radius: 0 4px 4px 0; + -moz-border-radius: 0 4px 4px 0; + border-radius: 0 4px 4px 0; +} + +.input-append input:focus, +.input-prepend input:focus, +.input-append select:focus, +.input-prepend select:focus, +.input-append .uneditable-input:focus, +.input-prepend .uneditable-input:focus { + z-index: 2; +} + +.input-append .add-on, +.input-prepend .add-on { + display: inline-block; + width: auto; + height: 20px; + min-width: 16px; + padding: 4px 5px; + font-size: 14px; + font-weight: normal; + line-height: 20px; + text-align: center; + text-shadow: 0 1px 0 #ffffff; + background-color: #eeeeee; + border: 1px solid #ccc; +} + +.input-append .add-on, +.input-prepend .add-on, +.input-append .btn, +.input-prepend .btn, +.input-append .btn-group > .dropdown-toggle, +.input-prepend .btn-group > .dropdown-toggle { + vertical-align: top; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} + +.input-append .active, +.input-prepend .active { + background-color: #a9dba9; + border-color: #46a546; +} + +.input-prepend .add-on, +.input-prepend .btn { + margin-right: -1px; +} + +.input-prepend .add-on:first-child, +.input-prepend .btn:first-child { + -webkit-border-radius: 4px 0 0 4px; + -moz-border-radius: 4px 0 0 4px; + border-radius: 4px 0 0 4px; +} + +.input-append input, +.input-append select, +.input-append .uneditable-input { + -webkit-border-radius: 4px 0 0 4px; + -moz-border-radius: 4px 0 0 4px; + border-radius: 4px 0 0 4px; +} + +.input-append input + .btn-group .btn:last-child, +.input-append select + .btn-group .btn:last-child, +.input-append .uneditable-input + .btn-group .btn:last-child { + -webkit-border-radius: 0 4px 4px 0; + -moz-border-radius: 0 4px 4px 0; + border-radius: 0 4px 4px 0; +} + +.input-append .add-on, +.input-append .btn, +.input-append .btn-group { + margin-left: -1px; +} + +.input-append .add-on:last-child, +.input-append .btn:last-child, +.input-append .btn-group:last-child > .dropdown-toggle { + -webkit-border-radius: 0 4px 4px 0; + -moz-border-radius: 0 4px 4px 0; + border-radius: 0 4px 4px 0; +} + +.input-prepend.input-append input, +.input-prepend.input-append select, +.input-prepend.input-append .uneditable-input { + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} + +.input-prepend.input-append input + .btn-group .btn, +.input-prepend.input-append select + .btn-group .btn, +.input-prepend.input-append .uneditable-input + .btn-group .btn { + -webkit-border-radius: 0 4px 4px 0; + -moz-border-radius: 0 4px 4px 0; + border-radius: 0 4px 4px 0; +} + +.input-prepend.input-append .add-on:first-child, +.input-prepend.input-append .btn:first-child { + margin-right: -1px; + -webkit-border-radius: 4px 0 0 4px; + -moz-border-radius: 4px 0 0 4px; + border-radius: 4px 0 0 4px; +} + +.input-prepend.input-append .add-on:last-child, +.input-prepend.input-append .btn:last-child { + margin-left: -1px; + -webkit-border-radius: 0 4px 4px 0; + -moz-border-radius: 0 4px 4px 0; + border-radius: 0 4px 4px 0; +} + +.input-prepend.input-append .btn-group:first-child { + margin-left: 0; +} + +input.search-query { + padding-right: 14px; + padding-right: 4px \9; + padding-left: 14px; + padding-left: 4px \9; + /* IE7-8 doesn't have border-radius, so don't indent the padding */ + + margin-bottom: 0; + -webkit-border-radius: 15px; + -moz-border-radius: 15px; + border-radius: 15px; +} + +/* Allow for input prepend/append in search forms */ + +.form-search .input-append .search-query, +.form-search .input-prepend .search-query { + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} + +.form-search .input-append .search-query { + -webkit-border-radius: 14px 0 0 14px; + -moz-border-radius: 14px 0 0 14px; + border-radius: 14px 0 0 14px; +} + +.form-search .input-append .btn { + -webkit-border-radius: 0 14px 14px 0; + -moz-border-radius: 0 14px 14px 0; + border-radius: 0 14px 14px 0; +} + +.form-search .input-prepend .search-query { + -webkit-border-radius: 0 14px 14px 0; + -moz-border-radius: 0 14px 14px 0; + border-radius: 0 14px 14px 0; +} + +.form-search .input-prepend .btn { + -webkit-border-radius: 14px 0 0 14px; + -moz-border-radius: 14px 0 0 14px; + border-radius: 14px 0 0 14px; +} + +.form-search input, +.form-inline input, +.form-horizontal input, +.form-search textarea, +.form-inline textarea, +.form-horizontal textarea, +.form-search select, +.form-inline select, +.form-horizontal select, +.form-search .help-inline, +.form-inline .help-inline, +.form-horizontal .help-inline, +.form-search .uneditable-input, +.form-inline .uneditable-input, +.form-horizontal .uneditable-input, +.form-search .input-prepend, +.form-inline .input-prepend, +.form-horizontal .input-prepend, +.form-search .input-append, +.form-inline .input-append, +.form-horizontal .input-append { + display: inline-block; + *display: inline; + margin-bottom: 0; + vertical-align: middle; + *zoom: 1; +} + +.form-search .hide, +.form-inline .hide, +.form-horizontal .hide { + display: none; +} + +.form-search label, +.form-inline label, +.form-search .btn-group, +.form-inline .btn-group { + display: inline-block; +} + +.form-search .input-append, +.form-inline .input-append, +.form-search .input-prepend, +.form-inline .input-prepend { + margin-bottom: 0; +} + +.form-search .radio, +.form-search .checkbox, +.form-inline .radio, +.form-inline .checkbox { + padding-left: 0; + margin-bottom: 0; + vertical-align: middle; +} + +.form-search .radio input[type="radio"], +.form-search .checkbox input[type="checkbox"], +.form-inline .radio input[type="radio"], +.form-inline .checkbox input[type="checkbox"] { + float: left; + margin-right: 3px; + margin-left: 0; +} + +.control-group { + margin-bottom: 10px; +} + +legend + .control-group { + margin-top: 20px; + -webkit-margin-top-collapse: separate; +} + +.form-horizontal .control-group { + margin-bottom: 20px; + *zoom: 1; +} + +.form-horizontal .control-group:before, +.form-horizontal .control-group:after { + display: table; + line-height: 0; + content: ""; +} + +.form-horizontal .control-group:after { + clear: both; +} + +.form-horizontal .control-label { + float: left; + width: 160px; + padding-top: 5px; + text-align: right; +} + +.form-horizontal .controls { + *display: inline-block; + *padding-left: 20px; + margin-left: 180px; + *margin-left: 0; +} + +.form-horizontal .controls:first-child { + *padding-left: 180px; +} + +.form-horizontal .help-block { + margin-bottom: 0; +} + +.form-horizontal input + .help-block, +.form-horizontal select + .help-block, +.form-horizontal textarea + .help-block, +.form-horizontal .uneditable-input + .help-block, +.form-horizontal .input-prepend + .help-block, +.form-horizontal .input-append + .help-block { + margin-top: 10px; +} + +.form-horizontal .form-actions { + padding-left: 180px; +} + +table { + max-width: 100%; + background-color: transparent; + border-collapse: collapse; + border-spacing: 0; +} + +.table { + width: 100%; + margin-bottom: 20px; +} + +.table th, +.table td { + padding: 8px; + line-height: 20px; + text-align: left; + vertical-align: top; + border-top: 1px solid #dddddd; +} + +.table th { + font-weight: bold; +} + +.table thead th { + vertical-align: bottom; +} + +.table caption + thead tr:first-child th, +.table caption + thead tr:first-child td, +.table colgroup + thead tr:first-child th, +.table colgroup + thead tr:first-child td, +.table thead:first-child tr:first-child th, +.table thead:first-child tr:first-child td { + border-top: 0; +} + +.table tbody + tbody { + border-top: 2px solid #dddddd; +} + +.table .table { + background-color: #ffffff; +} + +.table-condensed th, +.table-condensed td { + padding: 4px 5px; +} + +.table-bordered { + border: 1px solid #dddddd; + border-collapse: separate; + *border-collapse: collapse; + border-left: 0; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +.table-bordered th, +.table-bordered td { + border-left: 1px solid #dddddd; +} + +.table-bordered caption + thead tr:first-child th, +.table-bordered caption + tbody tr:first-child th, +.table-bordered caption + tbody tr:first-child td, +.table-bordered colgroup + thead tr:first-child th, +.table-bordered colgroup + tbody tr:first-child th, +.table-bordered colgroup + tbody tr:first-child td, +.table-bordered thead:first-child tr:first-child th, +.table-bordered tbody:first-child tr:first-child th, +.table-bordered tbody:first-child tr:first-child td { + border-top: 0; +} + +.table-bordered thead:first-child tr:first-child > th:first-child, +.table-bordered tbody:first-child tr:first-child > td:first-child, +.table-bordered tbody:first-child tr:first-child > th:first-child { + -webkit-border-top-left-radius: 4px; + border-top-left-radius: 4px; + -moz-border-radius-topleft: 4px; +} + +.table-bordered thead:first-child tr:first-child > th:last-child, +.table-bordered tbody:first-child tr:first-child > td:last-child, +.table-bordered tbody:first-child tr:first-child > th:last-child { + -webkit-border-top-right-radius: 4px; + border-top-right-radius: 4px; + -moz-border-radius-topright: 4px; +} + +.table-bordered thead:last-child tr:last-child > th:first-child, +.table-bordered tbody:last-child tr:last-child > td:first-child, +.table-bordered tbody:last-child tr:last-child > th:first-child, +.table-bordered tfoot:last-child tr:last-child > td:first-child, +.table-bordered tfoot:last-child tr:last-child > th:first-child { + -webkit-border-bottom-left-radius: 4px; + border-bottom-left-radius: 4px; + -moz-border-radius-bottomleft: 4px; +} + +.table-bordered thead:last-child tr:last-child > th:last-child, +.table-bordered tbody:last-child tr:last-child > td:last-child, +.table-bordered tbody:last-child tr:last-child > th:last-child, +.table-bordered tfoot:last-child tr:last-child > td:last-child, +.table-bordered tfoot:last-child tr:last-child > th:last-child { + -webkit-border-bottom-right-radius: 4px; + border-bottom-right-radius: 4px; + -moz-border-radius-bottomright: 4px; +} + +.table-bordered tfoot + tbody:last-child tr:last-child td:first-child { + -webkit-border-bottom-left-radius: 0; + border-bottom-left-radius: 0; + -moz-border-radius-bottomleft: 0; +} + +.table-bordered tfoot + tbody:last-child tr:last-child td:last-child { + -webkit-border-bottom-right-radius: 0; + border-bottom-right-radius: 0; + -moz-border-radius-bottomright: 0; +} + +.table-bordered caption + thead tr:first-child th:first-child, +.table-bordered caption + tbody tr:first-child td:first-child, +.table-bordered colgroup + thead tr:first-child th:first-child, +.table-bordered colgroup + tbody tr:first-child td:first-child { + -webkit-border-top-left-radius: 4px; + border-top-left-radius: 4px; + -moz-border-radius-topleft: 4px; +} + +.table-bordered caption + thead tr:first-child th:last-child, +.table-bordered caption + tbody tr:first-child td:last-child, +.table-bordered colgroup + thead tr:first-child th:last-child, +.table-bordered colgroup + tbody tr:first-child td:last-child { + -webkit-border-top-right-radius: 4px; + border-top-right-radius: 4px; + -moz-border-radius-topright: 4px; +} + +.table-striped tbody > tr:nth-child(odd) > td, +.table-striped tbody > tr:nth-child(odd) > th { + background-color: #f9f9f9; +} + +.table-hover tbody tr:hover > td, +.table-hover tbody tr:hover > th { + background-color: #f5f5f5; +} + +table td[class*="span"], +table th[class*="span"], +.row-fluid table td[class*="span"], +.row-fluid table th[class*="span"] { + display: table-cell; + float: none; + margin-left: 0; +} + +.table td.span1, +.table th.span1 { + float: none; + width: 44px; + margin-left: 0; +} + +.table td.span2, +.table th.span2 { + float: none; + width: 124px; + margin-left: 0; +} + +.table td.span3, +.table th.span3 { + float: none; + width: 204px; + margin-left: 0; +} + +.table td.span4, +.table th.span4 { + float: none; + width: 284px; + margin-left: 0; +} + +.table td.span5, +.table th.span5 { + float: none; + width: 364px; + margin-left: 0; +} + +.table td.span6, +.table th.span6 { + float: none; + width: 444px; + margin-left: 0; +} + +.table td.span7, +.table th.span7 { + float: none; + width: 524px; + margin-left: 0; +} + +.table td.span8, +.table th.span8 { + float: none; + width: 604px; + margin-left: 0; +} + +.table td.span9, +.table th.span9 { + float: none; + width: 684px; + margin-left: 0; +} + +.table td.span10, +.table th.span10 { + float: none; + width: 764px; + margin-left: 0; +} + +.table td.span11, +.table th.span11 { + float: none; + width: 844px; + margin-left: 0; +} + +.table td.span12, +.table th.span12 { + float: none; + width: 924px; + margin-left: 0; +} + +.table tbody tr.success > td { + background-color: #dff0d8; +} + +.table tbody tr.error > td { + background-color: #f2dede; +} + +.table tbody tr.warning > td { + background-color: #fcf8e3; +} + +.table tbody tr.info > td { + background-color: #d9edf7; +} + +.table-hover tbody tr.success:hover > td { + background-color: #d0e9c6; +} + +.table-hover tbody tr.error:hover > td { + background-color: #ebcccc; +} + +.table-hover tbody tr.warning:hover > td { + background-color: #faf2cc; +} + +.table-hover tbody tr.info:hover > td { + background-color: #c4e3f3; +} + +[class^="icon-"], +[class*=" icon-"] { + display: inline-block; + width: 14px; + height: 14px; + margin-top: 1px; + *margin-right: .3em; + line-height: 14px; + vertical-align: text-top; + background-image: url("../img/glyphicons-halflings.png"); + background-position: 14px 14px; + background-repeat: no-repeat; +} + +/* White icons with optional class, or on hover/focus/active states of certain elements */ + +.icon-white, +.nav-pills > .active > a > [class^="icon-"], +.nav-pills > .active > a > [class*=" icon-"], +.nav-list > .active > a > [class^="icon-"], +.nav-list > .active > a > [class*=" icon-"], +.navbar-inverse .nav > .active > a > [class^="icon-"], +.navbar-inverse .nav > .active > a > [class*=" icon-"], +.dropdown-menu > li > a:hover > [class^="icon-"], +.dropdown-menu > li > a:focus > [class^="icon-"], +.dropdown-menu > li > a:hover > [class*=" icon-"], +.dropdown-menu > li > a:focus > [class*=" icon-"], +.dropdown-menu > .active > a > [class^="icon-"], +.dropdown-menu > .active > a > [class*=" icon-"], +.dropdown-submenu:hover > a > [class^="icon-"], +.dropdown-submenu:focus > a > [class^="icon-"], +.dropdown-submenu:hover > a > [class*=" icon-"], +.dropdown-submenu:focus > a > [class*=" icon-"] { + background-image: url("../img/glyphicons-halflings-white.png"); +} + +.icon-glass { + background-position: 0 0; +} + +.icon-music { + background-position: -24px 0; +} + +.icon-search { + background-position: -48px 0; +} + +.icon-envelope { + background-position: -72px 0; +} + +.icon-heart { + background-position: -96px 0; +} + +.icon-star { + background-position: -120px 0; +} + +.icon-star-empty { + background-position: -144px 0; +} + +.icon-user { + background-position: -168px 0; +} + +.icon-film { + background-position: -192px 0; +} + +.icon-th-large { + background-position: -216px 0; +} + +.icon-th { + background-position: -240px 0; +} + +.icon-th-list { + background-position: -264px 0; +} + +.icon-ok { + background-position: -288px 0; +} + +.icon-remove { + background-position: -312px 0; +} + +.icon-zoom-in { + background-position: -336px 0; +} + +.icon-zoom-out { + background-position: -360px 0; +} + +.icon-off { + background-position: -384px 0; +} + +.icon-signal { + background-position: -408px 0; +} + +.icon-cog { + background-position: -432px 0; +} + +.icon-trash { + background-position: -456px 0; +} + +.icon-home { + background-position: 0 -24px; +} + +.icon-file { + background-position: -24px -24px; +} + +.icon-time { + background-position: -48px -24px; +} + +.icon-road { + background-position: -72px -24px; +} + +.icon-download-alt { + background-position: -96px -24px; +} + +.icon-download { + background-position: -120px -24px; +} + +.icon-upload { + background-position: -144px -24px; +} + +.icon-inbox { + background-position: -168px -24px; +} + +.icon-play-circle { + background-position: -192px -24px; +} + +.icon-repeat { + background-position: -216px -24px; +} + +.icon-refresh { + background-position: -240px -24px; +} + +.icon-list-alt { + background-position: -264px -24px; +} + +.icon-lock { + background-position: -287px -24px; +} + +.icon-flag { + background-position: -312px -24px; +} + +.icon-headphones { + background-position: -336px -24px; +} + +.icon-volume-off { + background-position: -360px -24px; +} + +.icon-volume-down { + background-position: -384px -24px; +} + +.icon-volume-up { + background-position: -408px -24px; +} + +.icon-qrcode { + background-position: -432px -24px; +} + +.icon-barcode { + background-position: -456px -24px; +} + +.icon-tag { + background-position: 0 -48px; +} + +.icon-tags { + background-position: -25px -48px; +} + +.icon-book { + background-position: -48px -48px; +} + +.icon-bookmark { + background-position: -72px -48px; +} + +.icon-print { + background-position: -96px -48px; +} + +.icon-camera { + background-position: -120px -48px; +} + +.icon-font { + background-position: -144px -48px; +} + +.icon-bold { + background-position: -167px -48px; +} + +.icon-italic { + background-position: -192px -48px; +} + +.icon-text-height { + background-position: -216px -48px; +} + +.icon-text-width { + background-position: -240px -48px; +} + +.icon-align-left { + background-position: -264px -48px; +} + +.icon-align-center { + background-position: -288px -48px; +} + +.icon-align-right { + background-position: -312px -48px; +} + +.icon-align-justify { + background-position: -336px -48px; +} + +.icon-list { + background-position: -360px -48px; +} + +.icon-indent-left { + background-position: -384px -48px; +} + +.icon-indent-right { + background-position: -408px -48px; +} + +.icon-facetime-video { + background-position: -432px -48px; +} + +.icon-picture { + background-position: -456px -48px; +} + +.icon-pencil { + background-position: 0 -72px; +} + +.icon-map-marker { + background-position: -24px -72px; +} + +.icon-adjust { + background-position: -48px -72px; +} + +.icon-tint { + background-position: -72px -72px; +} + +.icon-edit { + background-position: -96px -72px; +} + +.icon-share { + background-position: -120px -72px; +} + +.icon-check { + background-position: -144px -72px; +} + +.icon-move { + background-position: -168px -72px; +} + +.icon-step-backward { + background-position: -192px -72px; +} + +.icon-fast-backward { + background-position: -216px -72px; +} + +.icon-backward { + background-position: -240px -72px; +} + +.icon-play { + background-position: -264px -72px; +} + +.icon-pause { + background-position: -288px -72px; +} + +.icon-stop { + background-position: -312px -72px; +} + +.icon-forward { + background-position: -336px -72px; +} + +.icon-fast-forward { + background-position: -360px -72px; +} + +.icon-step-forward { + background-position: -384px -72px; +} + +.icon-eject { + background-position: -408px -72px; +} + +.icon-chevron-left { + background-position: -432px -72px; +} + +.icon-chevron-right { + background-position: -456px -72px; +} + +.icon-plus-sign { + background-position: 0 -96px; +} + +.icon-minus-sign { + background-position: -24px -96px; +} + +.icon-remove-sign { + background-position: -48px -96px; +} + +.icon-ok-sign { + background-position: -72px -96px; +} + +.icon-question-sign { + background-position: -96px -96px; +} + +.icon-info-sign { + background-position: -120px -96px; +} + +.icon-screenshot { + background-position: -144px -96px; +} + +.icon-remove-circle { + background-position: -168px -96px; +} + +.icon-ok-circle { + background-position: -192px -96px; +} + +.icon-ban-circle { + background-position: -216px -96px; +} + +.icon-arrow-left { + background-position: -240px -96px; +} + +.icon-arrow-right { + background-position: -264px -96px; +} + +.icon-arrow-up { + background-position: -289px -96px; +} + +.icon-arrow-down { + background-position: -312px -96px; +} + +.icon-share-alt { + background-position: -336px -96px; +} + +.icon-resize-full { + background-position: -360px -96px; +} + +.icon-resize-small { + background-position: -384px -96px; +} + +.icon-plus { + background-position: -408px -96px; +} + +.icon-minus { + background-position: -433px -96px; +} + +.icon-asterisk { + background-position: -456px -96px; +} + +.icon-exclamation-sign { + background-position: 0 -120px; +} + +.icon-gift { + background-position: -24px -120px; +} + +.icon-leaf { + background-position: -48px -120px; +} + +.icon-fire { + background-position: -72px -120px; +} + +.icon-eye-open { + background-position: -96px -120px; +} + +.icon-eye-close { + background-position: -120px -120px; +} + +.icon-warning-sign { + background-position: -144px -120px; +} + +.icon-plane { + background-position: -168px -120px; +} + +.icon-calendar { + background-position: -192px -120px; +} + +.icon-random { + width: 16px; + background-position: -216px -120px; +} + +.icon-comment { + background-position: -240px -120px; +} + +.icon-magnet { + background-position: -264px -120px; +} + +.icon-chevron-up { + background-position: -288px -120px; +} + +.icon-chevron-down { + background-position: -313px -119px; +} + +.icon-retweet { + background-position: -336px -120px; +} + +.icon-shopping-cart { + background-position: -360px -120px; +} + +.icon-folder-close { + width: 16px; + background-position: -384px -120px; +} + +.icon-folder-open { + width: 16px; + background-position: -408px -120px; +} + +.icon-resize-vertical { + background-position: -432px -119px; +} + +.icon-resize-horizontal { + background-position: -456px -118px; +} + +.icon-hdd { + background-position: 0 -144px; +} + +.icon-bullhorn { + background-position: -24px -144px; +} + +.icon-bell { + background-position: -48px -144px; +} + +.icon-certificate { + background-position: -72px -144px; +} + +.icon-thumbs-up { + background-position: -96px -144px; +} + +.icon-thumbs-down { + background-position: -120px -144px; +} + +.icon-hand-right { + background-position: -144px -144px; +} + +.icon-hand-left { + background-position: -168px -144px; +} + +.icon-hand-up { + background-position: -192px -144px; +} + +.icon-hand-down { + background-position: -216px -144px; +} + +.icon-circle-arrow-right { + background-position: -240px -144px; +} + +.icon-circle-arrow-left { + background-position: -264px -144px; +} + +.icon-circle-arrow-up { + background-position: -288px -144px; +} + +.icon-circle-arrow-down { + background-position: -312px -144px; +} + +.icon-globe { + background-position: -336px -144px; +} + +.icon-wrench { + background-position: -360px -144px; +} + +.icon-tasks { + background-position: -384px -144px; +} + +.icon-filter { + background-position: -408px -144px; +} + +.icon-briefcase { + background-position: -432px -144px; +} + +.icon-fullscreen { + background-position: -456px -144px; +} + +.dropup, +.dropdown { + position: relative; +} + +.dropdown-toggle { + *margin-bottom: -3px; +} + +.dropdown-toggle:active, +.open .dropdown-toggle { + outline: 0; +} + +.caret { + display: inline-block; + width: 0; + height: 0; + vertical-align: top; + border-top: 4px solid #000000; + border-right: 4px solid transparent; + border-left: 4px solid transparent; + content: ""; +} + +.dropdown .caret { + margin-top: 8px; + margin-left: 2px; +} + +.dropdown-menu { + position: absolute; + top: 100%; + left: 0; + z-index: 1000; + display: none; + float: left; + min-width: 160px; + padding: 5px 0; + margin: 2px 0 0; + list-style: none; + background-color: #ffffff; + border: 1px solid #ccc; + border: 1px solid rgba(0, 0, 0, 0.2); + *border-right-width: 2px; + *border-bottom-width: 2px; + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; + -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + -moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + -webkit-background-clip: padding-box; + -moz-background-clip: padding; + background-clip: padding-box; +} + +.dropdown-menu.pull-right { + right: 0; + left: auto; +} + +.dropdown-menu .divider { + *width: 100%; + height: 1px; + margin: 9px 1px; + *margin: -5px 0 5px; + overflow: hidden; + background-color: #e5e5e5; + border-bottom: 1px solid #ffffff; +} + +.dropdown-menu > li > a { + display: block; + padding: 3px 20px; + clear: both; + font-weight: normal; + line-height: 20px; + color: #333333; + white-space: nowrap; +} + +.dropdown-menu > li > a:hover, +.dropdown-menu > li > a:focus, +.dropdown-submenu:hover > a, +.dropdown-submenu:focus > a { + color: #ffffff; + text-decoration: none; + background-color: #0081c2; + background-image: -moz-linear-gradient(top, #0088cc, #0077b3); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0077b3)); + background-image: -webkit-linear-gradient(top, #0088cc, #0077b3); + background-image: -o-linear-gradient(top, #0088cc, #0077b3); + background-image: linear-gradient(to bottom, #0088cc, #0077b3); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0077b3', GradientType=0); +} + +.dropdown-menu > .active > a, +.dropdown-menu > .active > a:hover, +.dropdown-menu > .active > a:focus { + color: #ffffff; + text-decoration: none; + background-color: #0081c2; + background-image: -moz-linear-gradient(top, #0088cc, #0077b3); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0077b3)); + background-image: -webkit-linear-gradient(top, #0088cc, #0077b3); + background-image: -o-linear-gradient(top, #0088cc, #0077b3); + background-image: linear-gradient(to bottom, #0088cc, #0077b3); + background-repeat: repeat-x; + outline: 0; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0077b3', GradientType=0); +} + +.dropdown-menu > .disabled > a, +.dropdown-menu > .disabled > a:hover, +.dropdown-menu > .disabled > a:focus { + color: #999999; +} + +.dropdown-menu > .disabled > a:hover, +.dropdown-menu > .disabled > a:focus { + text-decoration: none; + cursor: default; + background-color: transparent; + background-image: none; + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); +} + +.open { + *z-index: 1000; +} + +.open > .dropdown-menu { + display: block; +} + +.dropdown-backdrop { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 990; +} + +.pull-right > .dropdown-menu { + right: 0; + left: auto; +} + +.dropup .caret, +.navbar-fixed-bottom .dropdown .caret { + border-top: 0; + border-bottom: 4px solid #000000; + content: ""; +} + +.dropup .dropdown-menu, +.navbar-fixed-bottom .dropdown .dropdown-menu { + top: auto; + bottom: 100%; + margin-bottom: 1px; +} + +.dropdown-submenu { + position: relative; +} + +.dropdown-submenu > .dropdown-menu { + top: 0; + left: 100%; + margin-top: -6px; + margin-left: -1px; + -webkit-border-radius: 0 6px 6px 6px; + -moz-border-radius: 0 6px 6px 6px; + border-radius: 0 6px 6px 6px; +} + +.dropdown-submenu:hover > .dropdown-menu { + display: block; +} + +.dropup .dropdown-submenu > .dropdown-menu { + top: auto; + bottom: 0; + margin-top: 0; + margin-bottom: -2px; + -webkit-border-radius: 5px 5px 5px 0; + -moz-border-radius: 5px 5px 5px 0; + border-radius: 5px 5px 5px 0; +} + +.dropdown-submenu > a:after { + display: block; + float: right; + width: 0; + height: 0; + margin-top: 5px; + margin-right: -10px; + border-color: transparent; + border-left-color: #cccccc; + border-style: solid; + border-width: 5px 0 5px 5px; + content: " "; +} + +.dropdown-submenu:hover > a:after { + border-left-color: #ffffff; +} + +.dropdown-submenu.pull-left { + float: none; +} + +.dropdown-submenu.pull-left > .dropdown-menu { + left: -100%; + margin-left: 10px; + -webkit-border-radius: 6px 0 6px 6px; + -moz-border-radius: 6px 0 6px 6px; + border-radius: 6px 0 6px 6px; +} + +.dropdown .dropdown-menu .nav-header { + padding-right: 20px; + padding-left: 20px; +} + +.typeahead { + z-index: 1051; + margin-top: 2px; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +.well { + min-height: 20px; + padding: 19px; + margin-bottom: 20px; + background-color: #f5f5f5; + border: 1px solid #e3e3e3; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); +} + +.well blockquote { + border-color: #ddd; + border-color: rgba(0, 0, 0, 0.15); +} + +.well-large { + padding: 24px; + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; +} + +.well-small { + padding: 9px; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; +} + +.fade { + opacity: 0; + -webkit-transition: opacity 0.15s linear; + -moz-transition: opacity 0.15s linear; + -o-transition: opacity 0.15s linear; + transition: opacity 0.15s linear; +} + +.fade.in { + opacity: 1; +} + +.collapse { + position: relative; + height: 0; + overflow: hidden; + -webkit-transition: height 0.35s ease; + -moz-transition: height 0.35s ease; + -o-transition: height 0.35s ease; + transition: height 0.35s ease; +} + +.collapse.in { + height: auto; +} + +.close { + float: right; + font-size: 20px; + font-weight: bold; + line-height: 20px; + color: #000000; + text-shadow: 0 1px 0 #ffffff; + opacity: 0.2; + filter: alpha(opacity=20); +} + +.close:hover, +.close:focus { + color: #000000; + text-decoration: none; + cursor: pointer; + opacity: 0.4; + filter: alpha(opacity=40); +} + +button.close { + padding: 0; + cursor: pointer; + background: transparent; + border: 0; + -webkit-appearance: none; +} + +.btn { + display: inline-block; + *display: inline; + padding: 4px 12px; + margin-bottom: 0; + *margin-left: .3em; + font-size: 14px; + line-height: 20px; + color: #333333; + text-align: center; + text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75); + vertical-align: middle; + cursor: pointer; + background-color: #f5f5f5; + *background-color: #e6e6e6; + background-image: -moz-linear-gradient(top, #ffffff, #e6e6e6); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#e6e6e6)); + background-image: -webkit-linear-gradient(top, #ffffff, #e6e6e6); + background-image: -o-linear-gradient(top, #ffffff, #e6e6e6); + background-image: linear-gradient(to bottom, #ffffff, #e6e6e6); + background-repeat: repeat-x; + border: 1px solid #cccccc; + *border: 0; + border-color: #e6e6e6 #e6e6e6 #bfbfbf; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + border-bottom-color: #b3b3b3; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe6e6e6', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); + *zoom: 1; + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); + -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); +} + +.btn:hover, +.btn:focus, +.btn:active, +.btn.active, +.btn.disabled, +.btn[disabled] { + color: #333333; + background-color: #e6e6e6; + *background-color: #d9d9d9; +} + +.btn:active, +.btn.active { + background-color: #cccccc \9; +} + +.btn:first-child { + *margin-left: 0; +} + +.btn:hover, +.btn:focus { + color: #333333; + text-decoration: none; + background-position: 0 -15px; + -webkit-transition: background-position 0.1s linear; + -moz-transition: background-position 0.1s linear; + -o-transition: background-position 0.1s linear; + transition: background-position 0.1s linear; +} + +.btn:focus { + outline: thin dotted #333; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} + +.btn.active, +.btn:active { + background-image: none; + outline: 0; + -webkit-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); + -moz-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); +} + +.btn.disabled, +.btn[disabled] { + cursor: default; + background-image: none; + opacity: 0.65; + filter: alpha(opacity=65); + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; +} + +.btn-large { + padding: 11px 19px; + font-size: 17.5px; + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; +} + +.btn-large [class^="icon-"], +.btn-large [class*=" icon-"] { + margin-top: 4px; +} + +.btn-small { + padding: 2px 10px; + font-size: 11.9px; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; +} + +.btn-small [class^="icon-"], +.btn-small [class*=" icon-"] { + margin-top: 0; +} + +.btn-mini [class^="icon-"], +.btn-mini [class*=" icon-"] { + margin-top: -1px; +} + +.btn-mini { + padding: 0 6px; + font-size: 10.5px; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; +} + +.btn-block { + display: block; + width: 100%; + padding-right: 0; + padding-left: 0; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +.btn-block + .btn-block { + margin-top: 5px; +} + +input[type="submit"].btn-block, +input[type="reset"].btn-block, +input[type="button"].btn-block { + width: 100%; +} + +.btn-primary.active, +.btn-warning.active, +.btn-danger.active, +.btn-success.active, +.btn-info.active, +.btn-inverse.active { + color: rgba(255, 255, 255, 0.75); +} + +.btn-primary { + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + background-color: #006dcc; + *background-color: #0044cc; + background-image: -moz-linear-gradient(top, #0088cc, #0044cc); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0044cc)); + background-image: -webkit-linear-gradient(top, #0088cc, #0044cc); + background-image: -o-linear-gradient(top, #0088cc, #0044cc); + background-image: linear-gradient(to bottom, #0088cc, #0044cc); + background-repeat: repeat-x; + border-color: #0044cc #0044cc #002a80; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0044cc', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); +} + +.btn-primary:hover, +.btn-primary:focus, +.btn-primary:active, +.btn-primary.active, +.btn-primary.disabled, +.btn-primary[disabled] { + color: #ffffff; + background-color: #0044cc; + *background-color: #003bb3; +} + +.btn-primary:active, +.btn-primary.active { + background-color: #003399 \9; +} + +.btn-warning { + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + background-color: #faa732; + *background-color: #f89406; + background-image: -moz-linear-gradient(top, #fbb450, #f89406); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406)); + background-image: -webkit-linear-gradient(top, #fbb450, #f89406); + background-image: -o-linear-gradient(top, #fbb450, #f89406); + background-image: linear-gradient(to bottom, #fbb450, #f89406); + background-repeat: repeat-x; + border-color: #f89406 #f89406 #ad6704; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbb450', endColorstr='#fff89406', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); +} + +.btn-warning:hover, +.btn-warning:focus, +.btn-warning:active, +.btn-warning.active, +.btn-warning.disabled, +.btn-warning[disabled] { + color: #ffffff; + background-color: #f89406; + *background-color: #df8505; +} + +.btn-warning:active, +.btn-warning.active { + background-color: #c67605 \9; +} + +.btn-danger { + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + background-color: #da4f49; + *background-color: #bd362f; + background-image: -moz-linear-gradient(top, #ee5f5b, #bd362f); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#bd362f)); + background-image: -webkit-linear-gradient(top, #ee5f5b, #bd362f); + background-image: -o-linear-gradient(top, #ee5f5b, #bd362f); + background-image: linear-gradient(to bottom, #ee5f5b, #bd362f); + background-repeat: repeat-x; + border-color: #bd362f #bd362f #802420; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b', endColorstr='#ffbd362f', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); +} + +.btn-danger:hover, +.btn-danger:focus, +.btn-danger:active, +.btn-danger.active, +.btn-danger.disabled, +.btn-danger[disabled] { + color: #ffffff; + background-color: #bd362f; + *background-color: #a9302a; +} + +.btn-danger:active, +.btn-danger.active { + background-color: #942a25 \9; +} + +.btn-success { + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + background-color: #5bb75b; + *background-color: #51a351; + background-image: -moz-linear-gradient(top, #62c462, #51a351); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#51a351)); + background-image: -webkit-linear-gradient(top, #62c462, #51a351); + background-image: -o-linear-gradient(top, #62c462, #51a351); + background-image: linear-gradient(to bottom, #62c462, #51a351); + background-repeat: repeat-x; + border-color: #51a351 #51a351 #387038; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462', endColorstr='#ff51a351', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); +} + +.btn-success:hover, +.btn-success:focus, +.btn-success:active, +.btn-success.active, +.btn-success.disabled, +.btn-success[disabled] { + color: #ffffff; + background-color: #51a351; + *background-color: #499249; +} + +.btn-success:active, +.btn-success.active { + background-color: #408140 \9; +} + +.btn-info { + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + background-color: #49afcd; + *background-color: #2f96b4; + background-image: -moz-linear-gradient(top, #5bc0de, #2f96b4); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#2f96b4)); + background-image: -webkit-linear-gradient(top, #5bc0de, #2f96b4); + background-image: -o-linear-gradient(top, #5bc0de, #2f96b4); + background-image: linear-gradient(to bottom, #5bc0de, #2f96b4); + background-repeat: repeat-x; + border-color: #2f96b4 #2f96b4 #1f6377; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2f96b4', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); +} + +.btn-info:hover, +.btn-info:focus, +.btn-info:active, +.btn-info.active, +.btn-info.disabled, +.btn-info[disabled] { + color: #ffffff; + background-color: #2f96b4; + *background-color: #2a85a0; +} + +.btn-info:active, +.btn-info.active { + background-color: #24748c \9; +} + +.btn-inverse { + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + background-color: #363636; + *background-color: #222222; + background-image: -moz-linear-gradient(top, #444444, #222222); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#444444), to(#222222)); + background-image: -webkit-linear-gradient(top, #444444, #222222); + background-image: -o-linear-gradient(top, #444444, #222222); + background-image: linear-gradient(to bottom, #444444, #222222); + background-repeat: repeat-x; + border-color: #222222 #222222 #000000; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff444444', endColorstr='#ff222222', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); +} + +.btn-inverse:hover, +.btn-inverse:focus, +.btn-inverse:active, +.btn-inverse.active, +.btn-inverse.disabled, +.btn-inverse[disabled] { + color: #ffffff; + background-color: #222222; + *background-color: #151515; +} + +.btn-inverse:active, +.btn-inverse.active { + background-color: #080808 \9; +} + +button.btn, +input[type="submit"].btn { + *padding-top: 3px; + *padding-bottom: 3px; +} + +button.btn::-moz-focus-inner, +input[type="submit"].btn::-moz-focus-inner { + padding: 0; + border: 0; +} + +button.btn.btn-large, +input[type="submit"].btn.btn-large { + *padding-top: 7px; + *padding-bottom: 7px; +} + +button.btn.btn-small, +input[type="submit"].btn.btn-small { + *padding-top: 3px; + *padding-bottom: 3px; +} + +button.btn.btn-mini, +input[type="submit"].btn.btn-mini { + *padding-top: 1px; + *padding-bottom: 1px; +} + +.btn-link, +.btn-link:active, +.btn-link[disabled] { + background-color: transparent; + background-image: none; + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; +} + +.btn-link { + color: #0088cc; + cursor: pointer; + border-color: transparent; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} + +.btn-link:hover, +.btn-link:focus { + color: #005580; + text-decoration: underline; + background-color: transparent; +} + +.btn-link[disabled]:hover, +.btn-link[disabled]:focus { + color: #333333; + text-decoration: none; +} + +.btn-group { + position: relative; + display: inline-block; + *display: inline; + *margin-left: .3em; + font-size: 0; + white-space: nowrap; + vertical-align: middle; + *zoom: 1; +} + +.btn-group:first-child { + *margin-left: 0; +} + +.btn-group + .btn-group { + margin-left: 5px; +} + +.btn-toolbar { + margin-top: 10px; + margin-bottom: 10px; + font-size: 0; +} + +.btn-toolbar > .btn + .btn, +.btn-toolbar > .btn-group + .btn, +.btn-toolbar > .btn + .btn-group { + margin-left: 5px; +} + +.btn-group > .btn { + position: relative; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} + +.btn-group > .btn + .btn { + margin-left: -1px; +} + +.btn-group > .btn, +.btn-group > .dropdown-menu, +.btn-group > .popover { + font-size: 14px; +} + +.btn-group > .btn-mini { + font-size: 10.5px; +} + +.btn-group > .btn-small { + font-size: 11.9px; +} + +.btn-group > .btn-large { + font-size: 17.5px; +} + +.btn-group > .btn:first-child { + margin-left: 0; + -webkit-border-bottom-left-radius: 4px; + border-bottom-left-radius: 4px; + -webkit-border-top-left-radius: 4px; + border-top-left-radius: 4px; + -moz-border-radius-bottomleft: 4px; + -moz-border-radius-topleft: 4px; +} + +.btn-group > .btn:last-child, +.btn-group > .dropdown-toggle { + -webkit-border-top-right-radius: 4px; + border-top-right-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + border-bottom-right-radius: 4px; + -moz-border-radius-topright: 4px; + -moz-border-radius-bottomright: 4px; +} + +.btn-group > .btn.large:first-child { + margin-left: 0; + -webkit-border-bottom-left-radius: 6px; + border-bottom-left-radius: 6px; + -webkit-border-top-left-radius: 6px; + border-top-left-radius: 6px; + -moz-border-radius-bottomleft: 6px; + -moz-border-radius-topleft: 6px; +} + +.btn-group > .btn.large:last-child, +.btn-group > .large.dropdown-toggle { + -webkit-border-top-right-radius: 6px; + border-top-right-radius: 6px; + -webkit-border-bottom-right-radius: 6px; + border-bottom-right-radius: 6px; + -moz-border-radius-topright: 6px; + -moz-border-radius-bottomright: 6px; +} + +.btn-group > .btn:hover, +.btn-group > .btn:focus, +.btn-group > .btn:active, +.btn-group > .btn.active { + z-index: 2; +} + +.btn-group .dropdown-toggle:active, +.btn-group.open .dropdown-toggle { + outline: 0; +} + +.btn-group > .btn + .dropdown-toggle { + *padding-top: 5px; + padding-right: 8px; + *padding-bottom: 5px; + padding-left: 8px; + -webkit-box-shadow: inset 1px 0 0 rgba(255, 255, 255, 0.125), inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); + -moz-box-shadow: inset 1px 0 0 rgba(255, 255, 255, 0.125), inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); + box-shadow: inset 1px 0 0 rgba(255, 255, 255, 0.125), inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); +} + +.btn-group > .btn-mini + .dropdown-toggle { + *padding-top: 2px; + padding-right: 5px; + *padding-bottom: 2px; + padding-left: 5px; +} + +.btn-group > .btn-small + .dropdown-toggle { + *padding-top: 5px; + *padding-bottom: 4px; +} + +.btn-group > .btn-large + .dropdown-toggle { + *padding-top: 7px; + padding-right: 12px; + *padding-bottom: 7px; + padding-left: 12px; +} + +.btn-group.open .dropdown-toggle { + background-image: none; + -webkit-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); + -moz-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); +} + +.btn-group.open .btn.dropdown-toggle { + background-color: #e6e6e6; +} + +.btn-group.open .btn-primary.dropdown-toggle { + background-color: #0044cc; +} + +.btn-group.open .btn-warning.dropdown-toggle { + background-color: #f89406; +} + +.btn-group.open .btn-danger.dropdown-toggle { + background-color: #bd362f; +} + +.btn-group.open .btn-success.dropdown-toggle { + background-color: #51a351; +} + +.btn-group.open .btn-info.dropdown-toggle { + background-color: #2f96b4; +} + +.btn-group.open .btn-inverse.dropdown-toggle { + background-color: #222222; +} + +.btn .caret { + margin-top: 8px; + margin-left: 0; +} + +.btn-large .caret { + margin-top: 6px; +} + +.btn-large .caret { + border-top-width: 5px; + border-right-width: 5px; + border-left-width: 5px; +} + +.btn-mini .caret, +.btn-small .caret { + margin-top: 8px; +} + +.dropup .btn-large .caret { + border-bottom-width: 5px; +} + +.btn-primary .caret, +.btn-warning .caret, +.btn-danger .caret, +.btn-info .caret, +.btn-success .caret, +.btn-inverse .caret { + border-top-color: #ffffff; + border-bottom-color: #ffffff; +} + +.btn-group-vertical { + display: inline-block; + *display: inline; + /* IE7 inline-block hack */ + + *zoom: 1; +} + +.btn-group-vertical > .btn { + display: block; + float: none; + max-width: 100%; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} + +.btn-group-vertical > .btn + .btn { + margin-top: -1px; + margin-left: 0; +} + +.btn-group-vertical > .btn:first-child { + -webkit-border-radius: 4px 4px 0 0; + -moz-border-radius: 4px 4px 0 0; + border-radius: 4px 4px 0 0; +} + +.btn-group-vertical > .btn:last-child { + -webkit-border-radius: 0 0 4px 4px; + -moz-border-radius: 0 0 4px 4px; + border-radius: 0 0 4px 4px; +} + +.btn-group-vertical > .btn-large:first-child { + -webkit-border-radius: 6px 6px 0 0; + -moz-border-radius: 6px 6px 0 0; + border-radius: 6px 6px 0 0; +} + +.btn-group-vertical > .btn-large:last-child { + -webkit-border-radius: 0 0 6px 6px; + -moz-border-radius: 0 0 6px 6px; + border-radius: 0 0 6px 6px; +} + +.alert { + padding: 8px 35px 8px 14px; + margin-bottom: 20px; + text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); + background-color: #fcf8e3; + border: 1px solid #fbeed5; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +.alert, +.alert h4 { + color: #c09853; +} + +.alert h4 { + margin: 0; +} + +.alert .close { + position: relative; + top: -2px; + right: -21px; + line-height: 20px; +} + +.alert-success { + color: #468847; + background-color: #dff0d8; + border-color: #d6e9c6; +} + +.alert-success h4 { + color: #468847; +} + +.alert-danger, +.alert-error { + color: #b94a48; + background-color: #f2dede; + border-color: #eed3d7; +} + +.alert-danger h4, +.alert-error h4 { + color: #b94a48; +} + +.alert-info { + color: #3a87ad; + background-color: #d9edf7; + border-color: #bce8f1; +} + +.alert-info h4 { + color: #3a87ad; +} + +.alert-block { + padding-top: 14px; + padding-bottom: 14px; +} + +.alert-block > p, +.alert-block > ul { + margin-bottom: 0; +} + +.alert-block p + p { + margin-top: 5px; +} + +.nav { + margin-bottom: 20px; + margin-left: 0; + list-style: none; +} + +.nav > li > a { + display: block; +} + +.nav > li > a:hover, +.nav > li > a:focus { + text-decoration: none; + background-color: #eeeeee; +} + +.nav > li > a > img { + max-width: none; +} + +.nav > .pull-right { + float: right; +} + +.nav-header { + display: block; + padding: 3px 15px; + font-size: 11px; + font-weight: bold; + line-height: 20px; + color: #999999; + text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); + text-transform: uppercase; +} + +.nav li + .nav-header { + margin-top: 9px; +} + +.nav-list { + padding-right: 15px; + padding-left: 15px; + margin-bottom: 0; +} + +.nav-list > li > a, +.nav-list .nav-header { + margin-right: -15px; + margin-left: -15px; + text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); +} + +.nav-list > li > a { + padding: 3px 15px; +} + +.nav-list > .active > a, +.nav-list > .active > a:hover, +.nav-list > .active > a:focus { + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2); + background-color: #0088cc; +} + +.nav-list [class^="icon-"], +.nav-list [class*=" icon-"] { + margin-right: 2px; +} + +.nav-list .divider { + *width: 100%; + height: 1px; + margin: 9px 1px; + *margin: -5px 0 5px; + overflow: hidden; + background-color: #e5e5e5; + border-bottom: 1px solid #ffffff; +} + +.nav-tabs, +.nav-pills { + *zoom: 1; +} + +.nav-tabs:before, +.nav-pills:before, +.nav-tabs:after, +.nav-pills:after { + display: table; + line-height: 0; + content: ""; +} + +.nav-tabs:after, +.nav-pills:after { + clear: both; +} + +.nav-tabs > li, +.nav-pills > li { + float: left; +} + +.nav-tabs > li > a, +.nav-pills > li > a { + padding-right: 12px; + padding-left: 12px; + margin-right: 2px; + line-height: 14px; +} + +.nav-tabs { + border-bottom: 1px solid #ddd; +} + +.nav-tabs > li { + margin-bottom: -1px; +} + +.nav-tabs > li > a { + padding-top: 8px; + padding-bottom: 8px; + line-height: 20px; + border: 1px solid transparent; + -webkit-border-radius: 4px 4px 0 0; + -moz-border-radius: 4px 4px 0 0; + border-radius: 4px 4px 0 0; +} + +.nav-tabs > li > a:hover, +.nav-tabs > li > a:focus { + border-color: #eeeeee #eeeeee #dddddd; +} + +.nav-tabs > .active > a, +.nav-tabs > .active > a:hover, +.nav-tabs > .active > a:focus { + color: #555555; + cursor: default; + background-color: #ffffff; + border: 1px solid #ddd; + border-bottom-color: transparent; +} + +.nav-pills > li > a { + padding-top: 8px; + padding-bottom: 8px; + margin-top: 2px; + margin-bottom: 2px; + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + border-radius: 5px; +} + +.nav-pills > .active > a, +.nav-pills > .active > a:hover, +.nav-pills > .active > a:focus { + color: #ffffff; + background-color: #0088cc; +} + +.nav-stacked > li { + float: none; +} + +.nav-stacked > li > a { + margin-right: 0; +} + +.nav-tabs.nav-stacked { + border-bottom: 0; +} + +.nav-tabs.nav-stacked > li > a { + border: 1px solid #ddd; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} + +.nav-tabs.nav-stacked > li:first-child > a { + -webkit-border-top-right-radius: 4px; + border-top-right-radius: 4px; + -webkit-border-top-left-radius: 4px; + border-top-left-radius: 4px; + -moz-border-radius-topright: 4px; + -moz-border-radius-topleft: 4px; +} + +.nav-tabs.nav-stacked > li:last-child > a { + -webkit-border-bottom-right-radius: 4px; + border-bottom-right-radius: 4px; + -webkit-border-bottom-left-radius: 4px; + border-bottom-left-radius: 4px; + -moz-border-radius-bottomright: 4px; + -moz-border-radius-bottomleft: 4px; +} + +.nav-tabs.nav-stacked > li > a:hover, +.nav-tabs.nav-stacked > li > a:focus { + z-index: 2; + border-color: #ddd; +} + +.nav-pills.nav-stacked > li > a { + margin-bottom: 3px; +} + +.nav-pills.nav-stacked > li:last-child > a { + margin-bottom: 1px; +} + +.nav-tabs .dropdown-menu { + -webkit-border-radius: 0 0 6px 6px; + -moz-border-radius: 0 0 6px 6px; + border-radius: 0 0 6px 6px; +} + +.nav-pills .dropdown-menu { + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; +} + +.nav .dropdown-toggle .caret { + margin-top: 6px; + border-top-color: #0088cc; + border-bottom-color: #0088cc; +} + +.nav .dropdown-toggle:hover .caret, +.nav .dropdown-toggle:focus .caret { + border-top-color: #005580; + border-bottom-color: #005580; +} + +/* move down carets for tabs */ + +.nav-tabs .dropdown-toggle .caret { + margin-top: 8px; +} + +.nav .active .dropdown-toggle .caret { + border-top-color: #fff; + border-bottom-color: #fff; +} + +.nav-tabs .active .dropdown-toggle .caret { + border-top-color: #555555; + border-bottom-color: #555555; +} + +.nav > .dropdown.active > a:hover, +.nav > .dropdown.active > a:focus { + cursor: pointer; +} + +.nav-tabs .open .dropdown-toggle, +.nav-pills .open .dropdown-toggle, +.nav > li.dropdown.open.active > a:hover, +.nav > li.dropdown.open.active > a:focus { + color: #ffffff; + background-color: #999999; + border-color: #999999; +} + +.nav li.dropdown.open .caret, +.nav li.dropdown.open.active .caret, +.nav li.dropdown.open a:hover .caret, +.nav li.dropdown.open a:focus .caret { + border-top-color: #ffffff; + border-bottom-color: #ffffff; + opacity: 1; + filter: alpha(opacity=100); +} + +.tabs-stacked .open > a:hover, +.tabs-stacked .open > a:focus { + border-color: #999999; +} + +.tabbable { + *zoom: 1; +} + +.tabbable:before, +.tabbable:after { + display: table; + line-height: 0; + content: ""; +} + +.tabbable:after { + clear: both; +} + +.tab-content { + overflow: auto; +} + +.tabs-below > .nav-tabs, +.tabs-right > .nav-tabs, +.tabs-left > .nav-tabs { + border-bottom: 0; +} + +.tab-content > .tab-pane, +.pill-content > .pill-pane { + display: none; +} + +.tab-content > .active, +.pill-content > .active { + display: block; +} + +.tabs-below > .nav-tabs { + border-top: 1px solid #ddd; +} + +.tabs-below > .nav-tabs > li { + margin-top: -1px; + margin-bottom: 0; +} + +.tabs-below > .nav-tabs > li > a { + -webkit-border-radius: 0 0 4px 4px; + -moz-border-radius: 0 0 4px 4px; + border-radius: 0 0 4px 4px; +} + +.tabs-below > .nav-tabs > li > a:hover, +.tabs-below > .nav-tabs > li > a:focus { + border-top-color: #ddd; + border-bottom-color: transparent; +} + +.tabs-below > .nav-tabs > .active > a, +.tabs-below > .nav-tabs > .active > a:hover, +.tabs-below > .nav-tabs > .active > a:focus { + border-color: transparent #ddd #ddd #ddd; +} + +.tabs-left > .nav-tabs > li, +.tabs-right > .nav-tabs > li { + float: none; +} + +.tabs-left > .nav-tabs > li > a, +.tabs-right > .nav-tabs > li > a { + min-width: 74px; + margin-right: 0; + margin-bottom: 3px; +} + +.tabs-left > .nav-tabs { + float: left; + margin-right: 19px; + border-right: 1px solid #ddd; +} + +.tabs-left > .nav-tabs > li > a { + margin-right: -1px; + -webkit-border-radius: 4px 0 0 4px; + -moz-border-radius: 4px 0 0 4px; + border-radius: 4px 0 0 4px; +} + +.tabs-left > .nav-tabs > li > a:hover, +.tabs-left > .nav-tabs > li > a:focus { + border-color: #eeeeee #dddddd #eeeeee #eeeeee; +} + +.tabs-left > .nav-tabs .active > a, +.tabs-left > .nav-tabs .active > a:hover, +.tabs-left > .nav-tabs .active > a:focus { + border-color: #ddd transparent #ddd #ddd; + *border-right-color: #ffffff; +} + +.tabs-right > .nav-tabs { + float: right; + margin-left: 19px; + border-left: 1px solid #ddd; +} + +.tabs-right > .nav-tabs > li > a { + margin-left: -1px; + -webkit-border-radius: 0 4px 4px 0; + -moz-border-radius: 0 4px 4px 0; + border-radius: 0 4px 4px 0; +} + +.tabs-right > .nav-tabs > li > a:hover, +.tabs-right > .nav-tabs > li > a:focus { + border-color: #eeeeee #eeeeee #eeeeee #dddddd; +} + +.tabs-right > .nav-tabs .active > a, +.tabs-right > .nav-tabs .active > a:hover, +.tabs-right > .nav-tabs .active > a:focus { + border-color: #ddd #ddd #ddd transparent; + *border-left-color: #ffffff; +} + +.nav > .disabled > a { + color: #999999; +} + +.nav > .disabled > a:hover, +.nav > .disabled > a:focus { + text-decoration: none; + cursor: default; + background-color: transparent; +} + +.navbar { + *position: relative; + *z-index: 2; + margin-bottom: 20px; + overflow: visible; +} + +.navbar-inner { + min-height: 40px; + padding-right: 20px; + padding-left: 20px; + background-color: #fafafa; + background-image: -moz-linear-gradient(top, #ffffff, #f2f2f2); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#f2f2f2)); + background-image: -webkit-linear-gradient(top, #ffffff, #f2f2f2); + background-image: -o-linear-gradient(top, #ffffff, #f2f2f2); + background-image: linear-gradient(to bottom, #ffffff, #f2f2f2); + background-repeat: repeat-x; + border: 1px solid #d4d4d4; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff2f2f2', GradientType=0); + *zoom: 1; + -webkit-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.065); + -moz-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.065); + box-shadow: 0 1px 4px rgba(0, 0, 0, 0.065); +} + +.navbar-inner:before, +.navbar-inner:after { + display: table; + line-height: 0; + content: ""; +} + +.navbar-inner:after { + clear: both; +} + +.navbar .container { + width: auto; +} + +.nav-collapse.collapse { + height: auto; + overflow: visible; +} + +.navbar .brand { + display: block; + float: left; + padding: 10px 20px 10px; + margin-left: -20px; + font-size: 20px; + font-weight: 200; + color: #777777; + text-shadow: 0 1px 0 #ffffff; +} + +.navbar .brand:hover, +.navbar .brand:focus { + text-decoration: none; +} + +.navbar-text { + margin-bottom: 0; + line-height: 40px; + color: #777777; +} + +.navbar-link { + color: #777777; +} + +.navbar-link:hover, +.navbar-link:focus { + color: #333333; +} + +.navbar .divider-vertical { + height: 40px; + margin: 0 9px; + border-right: 1px solid #ffffff; + border-left: 1px solid #f2f2f2; +} + +.navbar .btn, +.navbar .btn-group { + margin-top: 5px; +} + +.navbar .btn-group .btn, +.navbar .input-prepend .btn, +.navbar .input-append .btn, +.navbar .input-prepend .btn-group, +.navbar .input-append .btn-group { + margin-top: 0; +} + +.navbar-form { + margin-bottom: 0; + *zoom: 1; +} + +.navbar-form:before, +.navbar-form:after { + display: table; + line-height: 0; + content: ""; +} + +.navbar-form:after { + clear: both; +} + +.navbar-form input, +.navbar-form select, +.navbar-form .radio, +.navbar-form .checkbox { + margin-top: 5px; +} + +.navbar-form input, +.navbar-form select, +.navbar-form .btn { + display: inline-block; + margin-bottom: 0; +} + +.navbar-form input[type="image"], +.navbar-form input[type="checkbox"], +.navbar-form input[type="radio"] { + margin-top: 3px; +} + +.navbar-form .input-append, +.navbar-form .input-prepend { + margin-top: 5px; + white-space: nowrap; +} + +.navbar-form .input-append input, +.navbar-form .input-prepend input { + margin-top: 0; +} + +.navbar-search { + position: relative; + float: left; + margin-top: 5px; + margin-bottom: 0; +} + +.navbar-search .search-query { + padding: 4px 14px; + margin-bottom: 0; + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 13px; + font-weight: normal; + line-height: 1; + -webkit-border-radius: 15px; + -moz-border-radius: 15px; + border-radius: 15px; +} + +.navbar-static-top { + position: static; + margin-bottom: 0; +} + +.navbar-static-top .navbar-inner { + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} + +.navbar-fixed-top, +.navbar-fixed-bottom { + position: fixed; + right: 0; + left: 0; + z-index: 1030; + margin-bottom: 0; +} + +.navbar-fixed-top .navbar-inner, +.navbar-static-top .navbar-inner { + border-width: 0 0 1px; +} + +.navbar-fixed-bottom .navbar-inner { + border-width: 1px 0 0; +} + +.navbar-fixed-top .navbar-inner, +.navbar-fixed-bottom .navbar-inner { + padding-right: 0; + padding-left: 0; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} + +.navbar-static-top .container, +.navbar-fixed-top .container, +.navbar-fixed-bottom .container { + width: 940px; +} + +.navbar-fixed-top { + top: 0; +} + +.navbar-fixed-top .navbar-inner, +.navbar-static-top .navbar-inner { + -webkit-box-shadow: 0 1px 10px rgba(0, 0, 0, 0.1); + -moz-box-shadow: 0 1px 10px rgba(0, 0, 0, 0.1); + box-shadow: 0 1px 10px rgba(0, 0, 0, 0.1); +} + +.navbar-fixed-bottom { + bottom: 0; +} + +.navbar-fixed-bottom .navbar-inner { + -webkit-box-shadow: 0 -1px 10px rgba(0, 0, 0, 0.1); + -moz-box-shadow: 0 -1px 10px rgba(0, 0, 0, 0.1); + box-shadow: 0 -1px 10px rgba(0, 0, 0, 0.1); +} + +.navbar .nav { + position: relative; + left: 0; + display: block; + float: left; + margin: 0 10px 0 0; +} + +.navbar .nav.pull-right { + float: right; + margin-right: 0; +} + +.navbar .nav > li { + float: left; +} + +.navbar .nav > li > a { + float: none; + padding: 10px 15px 10px; + color: #777777; + text-decoration: none; + text-shadow: 0 1px 0 #ffffff; +} + +.navbar .nav .dropdown-toggle .caret { + margin-top: 8px; +} + +.navbar .nav > li > a:focus, +.navbar .nav > li > a:hover { + color: #333333; + text-decoration: none; + background-color: transparent; +} + +.navbar .nav > .active > a, +.navbar .nav > .active > a:hover, +.navbar .nav > .active > a:focus { + color: #555555; + text-decoration: none; + background-color: #e5e5e5; + -webkit-box-shadow: inset 0 3px 8px rgba(0, 0, 0, 0.125); + -moz-box-shadow: inset 0 3px 8px rgba(0, 0, 0, 0.125); + box-shadow: inset 0 3px 8px rgba(0, 0, 0, 0.125); +} + +.navbar .btn-navbar { + display: none; + float: right; + padding: 7px 10px; + margin-right: 5px; + margin-left: 5px; + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + background-color: #ededed; + *background-color: #e5e5e5; + background-image: -moz-linear-gradient(top, #f2f2f2, #e5e5e5); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#f2f2f2), to(#e5e5e5)); + background-image: -webkit-linear-gradient(top, #f2f2f2, #e5e5e5); + background-image: -o-linear-gradient(top, #f2f2f2, #e5e5e5); + background-image: linear-gradient(to bottom, #f2f2f2, #e5e5e5); + background-repeat: repeat-x; + border-color: #e5e5e5 #e5e5e5 #bfbfbf; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2f2f2', endColorstr='#ffe5e5e5', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.075); + -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.075); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.075); +} + +.navbar .btn-navbar:hover, +.navbar .btn-navbar:focus, +.navbar .btn-navbar:active, +.navbar .btn-navbar.active, +.navbar .btn-navbar.disabled, +.navbar .btn-navbar[disabled] { + color: #ffffff; + background-color: #e5e5e5; + *background-color: #d9d9d9; +} + +.navbar .btn-navbar:active, +.navbar .btn-navbar.active { + background-color: #cccccc \9; +} + +.navbar .btn-navbar .icon-bar { + display: block; + width: 18px; + height: 2px; + background-color: #f5f5f5; + -webkit-border-radius: 1px; + -moz-border-radius: 1px; + border-radius: 1px; + -webkit-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25); + -moz-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25); + box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25); +} + +.btn-navbar .icon-bar + .icon-bar { + margin-top: 3px; +} + +.navbar .nav > li > .dropdown-menu:before { + position: absolute; + top: -7px; + left: 9px; + display: inline-block; + border-right: 7px solid transparent; + border-bottom: 7px solid #ccc; + border-left: 7px solid transparent; + border-bottom-color: rgba(0, 0, 0, 0.2); + content: ''; +} + +.navbar .nav > li > .dropdown-menu:after { + position: absolute; + top: -6px; + left: 10px; + display: inline-block; + border-right: 6px solid transparent; + border-bottom: 6px solid #ffffff; + border-left: 6px solid transparent; + content: ''; +} + +.navbar-fixed-bottom .nav > li > .dropdown-menu:before { + top: auto; + bottom: -7px; + border-top: 7px solid #ccc; + border-bottom: 0; + border-top-color: rgba(0, 0, 0, 0.2); +} + +.navbar-fixed-bottom .nav > li > .dropdown-menu:after { + top: auto; + bottom: -6px; + border-top: 6px solid #ffffff; + border-bottom: 0; +} + +.navbar .nav li.dropdown > a:hover .caret, +.navbar .nav li.dropdown > a:focus .caret { + border-top-color: #333333; + border-bottom-color: #333333; +} + +.navbar .nav li.dropdown.open > .dropdown-toggle, +.navbar .nav li.dropdown.active > .dropdown-toggle, +.navbar .nav li.dropdown.open.active > .dropdown-toggle { + color: #555555; + background-color: #e5e5e5; +} + +.navbar .nav li.dropdown > .dropdown-toggle .caret { + border-top-color: #777777; + border-bottom-color: #777777; +} + +.navbar .nav li.dropdown.open > .dropdown-toggle .caret, +.navbar .nav li.dropdown.active > .dropdown-toggle .caret, +.navbar .nav li.dropdown.open.active > .dropdown-toggle .caret { + border-top-color: #555555; + border-bottom-color: #555555; +} + +.navbar .pull-right > li > .dropdown-menu, +.navbar .nav > li > .dropdown-menu.pull-right { + right: 0; + left: auto; +} + +.navbar .pull-right > li > .dropdown-menu:before, +.navbar .nav > li > .dropdown-menu.pull-right:before { + right: 12px; + left: auto; +} + +.navbar .pull-right > li > .dropdown-menu:after, +.navbar .nav > li > .dropdown-menu.pull-right:after { + right: 13px; + left: auto; +} + +.navbar .pull-right > li > .dropdown-menu .dropdown-menu, +.navbar .nav > li > .dropdown-menu.pull-right .dropdown-menu { + right: 100%; + left: auto; + margin-right: -1px; + margin-left: 0; + -webkit-border-radius: 6px 0 6px 6px; + -moz-border-radius: 6px 0 6px 6px; + border-radius: 6px 0 6px 6px; +} + +.navbar-inverse .navbar-inner { + background-color: #1b1b1b; + background-image: -moz-linear-gradient(top, #222222, #111111); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#222222), to(#111111)); + background-image: -webkit-linear-gradient(top, #222222, #111111); + background-image: -o-linear-gradient(top, #222222, #111111); + background-image: linear-gradient(to bottom, #222222, #111111); + background-repeat: repeat-x; + border-color: #252525; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff222222', endColorstr='#ff111111', GradientType=0); +} + +.navbar-inverse .brand, +.navbar-inverse .nav > li > a { + color: #999999; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); +} + +.navbar-inverse .brand:hover, +.navbar-inverse .nav > li > a:hover, +.navbar-inverse .brand:focus, +.navbar-inverse .nav > li > a:focus { + color: #ffffff; +} + +.navbar-inverse .brand { + color: #999999; +} + +.navbar-inverse .navbar-text { + color: #999999; +} + +.navbar-inverse .nav > li > a:focus, +.navbar-inverse .nav > li > a:hover { + color: #ffffff; + background-color: transparent; +} + +.navbar-inverse .nav .active > a, +.navbar-inverse .nav .active > a:hover, +.navbar-inverse .nav .active > a:focus { + color: #ffffff; + background-color: #111111; +} + +.navbar-inverse .navbar-link { + color: #999999; +} + +.navbar-inverse .navbar-link:hover, +.navbar-inverse .navbar-link:focus { + color: #ffffff; +} + +.navbar-inverse .divider-vertical { + border-right-color: #222222; + border-left-color: #111111; +} + +.navbar-inverse .nav li.dropdown.open > .dropdown-toggle, +.navbar-inverse .nav li.dropdown.active > .dropdown-toggle, +.navbar-inverse .nav li.dropdown.open.active > .dropdown-toggle { + color: #ffffff; + background-color: #111111; +} + +.navbar-inverse .nav li.dropdown > a:hover .caret, +.navbar-inverse .nav li.dropdown > a:focus .caret { + border-top-color: #ffffff; + border-bottom-color: #ffffff; +} + +.navbar-inverse .nav li.dropdown > .dropdown-toggle .caret { + border-top-color: #999999; + border-bottom-color: #999999; +} + +.navbar-inverse .nav li.dropdown.open > .dropdown-toggle .caret, +.navbar-inverse .nav li.dropdown.active > .dropdown-toggle .caret, +.navbar-inverse .nav li.dropdown.open.active > .dropdown-toggle .caret { + border-top-color: #ffffff; + border-bottom-color: #ffffff; +} + +.navbar-inverse .navbar-search .search-query { + color: #ffffff; + background-color: #515151; + border-color: #111111; + -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0 rgba(255, 255, 255, 0.15); + -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0 rgba(255, 255, 255, 0.15); + box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0 rgba(255, 255, 255, 0.15); + -webkit-transition: none; + -moz-transition: none; + -o-transition: none; + transition: none; +} + +.navbar-inverse .navbar-search .search-query:-moz-placeholder { + color: #cccccc; +} + +.navbar-inverse .navbar-search .search-query:-ms-input-placeholder { + color: #cccccc; +} + +.navbar-inverse .navbar-search .search-query::-webkit-input-placeholder { + color: #cccccc; +} + +.navbar-inverse .navbar-search .search-query:focus, +.navbar-inverse .navbar-search .search-query.focused { + padding: 5px 15px; + color: #333333; + text-shadow: 0 1px 0 #ffffff; + background-color: #ffffff; + border: 0; + outline: 0; + -webkit-box-shadow: 0 0 3px rgba(0, 0, 0, 0.15); + -moz-box-shadow: 0 0 3px rgba(0, 0, 0, 0.15); + box-shadow: 0 0 3px rgba(0, 0, 0, 0.15); +} + +.navbar-inverse .btn-navbar { + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + background-color: #0e0e0e; + *background-color: #040404; + background-image: -moz-linear-gradient(top, #151515, #040404); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#151515), to(#040404)); + background-image: -webkit-linear-gradient(top, #151515, #040404); + background-image: -o-linear-gradient(top, #151515, #040404); + background-image: linear-gradient(to bottom, #151515, #040404); + background-repeat: repeat-x; + border-color: #040404 #040404 #000000; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff151515', endColorstr='#ff040404', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); +} + +.navbar-inverse .btn-navbar:hover, +.navbar-inverse .btn-navbar:focus, +.navbar-inverse .btn-navbar:active, +.navbar-inverse .btn-navbar.active, +.navbar-inverse .btn-navbar.disabled, +.navbar-inverse .btn-navbar[disabled] { + color: #ffffff; + background-color: #040404; + *background-color: #000000; +} + +.navbar-inverse .btn-navbar:active, +.navbar-inverse .btn-navbar.active { + background-color: #000000 \9; +} + +.breadcrumb { + padding: 8px 15px; + margin: 0 0 20px; + list-style: none; + background-color: #f5f5f5; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +.breadcrumb > li { + display: inline-block; + *display: inline; + text-shadow: 0 1px 0 #ffffff; + *zoom: 1; +} + +.breadcrumb > li > .divider { + padding: 0 5px; + color: #ccc; +} + +.breadcrumb > .active { + color: #999999; +} + +.pagination { + margin: 20px 0; +} + +.pagination ul { + display: inline-block; + *display: inline; + margin-bottom: 0; + margin-left: 0; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + *zoom: 1; + -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); + -moz-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); + box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); +} + +.pagination ul > li { + display: inline; +} + +.pagination ul > li > a, +.pagination ul > li > span { + float: left; + padding: 4px 12px; + line-height: 20px; + text-decoration: none; + background-color: #ffffff; + border: 1px solid #dddddd; + border-left-width: 0; +} + +.pagination ul > li > a:hover, +.pagination ul > li > a:focus, +.pagination ul > .active > a, +.pagination ul > .active > span { + background-color: #f5f5f5; +} + +.pagination ul > .active > a, +.pagination ul > .active > span { + color: #999999; + cursor: default; +} + +.pagination ul > .disabled > span, +.pagination ul > .disabled > a, +.pagination ul > .disabled > a:hover, +.pagination ul > .disabled > a:focus { + color: #999999; + cursor: default; + background-color: transparent; +} + +.pagination ul > li:first-child > a, +.pagination ul > li:first-child > span { + border-left-width: 1px; + -webkit-border-bottom-left-radius: 4px; + border-bottom-left-radius: 4px; + -webkit-border-top-left-radius: 4px; + border-top-left-radius: 4px; + -moz-border-radius-bottomleft: 4px; + -moz-border-radius-topleft: 4px; +} + +.pagination ul > li:last-child > a, +.pagination ul > li:last-child > span { + -webkit-border-top-right-radius: 4px; + border-top-right-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + border-bottom-right-radius: 4px; + -moz-border-radius-topright: 4px; + -moz-border-radius-bottomright: 4px; +} + +.pagination-centered { + text-align: center; +} + +.pagination-right { + text-align: right; +} + +.pagination-large ul > li > a, +.pagination-large ul > li > span { + padding: 11px 19px; + font-size: 17.5px; +} + +.pagination-large ul > li:first-child > a, +.pagination-large ul > li:first-child > span { + -webkit-border-bottom-left-radius: 6px; + border-bottom-left-radius: 6px; + -webkit-border-top-left-radius: 6px; + border-top-left-radius: 6px; + -moz-border-radius-bottomleft: 6px; + -moz-border-radius-topleft: 6px; +} + +.pagination-large ul > li:last-child > a, +.pagination-large ul > li:last-child > span { + -webkit-border-top-right-radius: 6px; + border-top-right-radius: 6px; + -webkit-border-bottom-right-radius: 6px; + border-bottom-right-radius: 6px; + -moz-border-radius-topright: 6px; + -moz-border-radius-bottomright: 6px; +} + +.pagination-mini ul > li:first-child > a, +.pagination-small ul > li:first-child > a, +.pagination-mini ul > li:first-child > span, +.pagination-small ul > li:first-child > span { + -webkit-border-bottom-left-radius: 3px; + border-bottom-left-radius: 3px; + -webkit-border-top-left-radius: 3px; + border-top-left-radius: 3px; + -moz-border-radius-bottomleft: 3px; + -moz-border-radius-topleft: 3px; +} + +.pagination-mini ul > li:last-child > a, +.pagination-small ul > li:last-child > a, +.pagination-mini ul > li:last-child > span, +.pagination-small ul > li:last-child > span { + -webkit-border-top-right-radius: 3px; + border-top-right-radius: 3px; + -webkit-border-bottom-right-radius: 3px; + border-bottom-right-radius: 3px; + -moz-border-radius-topright: 3px; + -moz-border-radius-bottomright: 3px; +} + +.pagination-small ul > li > a, +.pagination-small ul > li > span { + padding: 2px 10px; + font-size: 11.9px; +} + +.pagination-mini ul > li > a, +.pagination-mini ul > li > span { + padding: 0 6px; + font-size: 10.5px; +} + +.pager { + margin: 20px 0; + text-align: center; + list-style: none; + *zoom: 1; +} + +.pager:before, +.pager:after { + display: table; + line-height: 0; + content: ""; +} + +.pager:after { + clear: both; +} + +.pager li { + display: inline; +} + +.pager li > a, +.pager li > span { + display: inline-block; + padding: 5px 14px; + background-color: #fff; + border: 1px solid #ddd; + -webkit-border-radius: 15px; + -moz-border-radius: 15px; + border-radius: 15px; +} + +.pager li > a:hover, +.pager li > a:focus { + text-decoration: none; + background-color: #f5f5f5; +} + +.pager .next > a, +.pager .next > span { + float: right; +} + +.pager .previous > a, +.pager .previous > span { + float: left; +} + +.pager .disabled > a, +.pager .disabled > a:hover, +.pager .disabled > a:focus, +.pager .disabled > span { + color: #999999; + cursor: default; + background-color: #fff; +} + +.modal-backdrop { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1040; + background-color: #000000; +} + +.modal-backdrop.fade { + opacity: 0; +} + +.modal-backdrop, +.modal-backdrop.fade.in { + opacity: 0.8; + filter: alpha(opacity=80); +} + +.modal { + position: fixed; + top: 10%; + left: 50%; + z-index: 1050; + width: 560px; + margin-left: -280px; + background-color: #ffffff; + border: 1px solid #999; + border: 1px solid rgba(0, 0, 0, 0.3); + *border: 1px solid #999; + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; + outline: none; + -webkit-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); + -moz-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); + box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); + -webkit-background-clip: padding-box; + -moz-background-clip: padding-box; + background-clip: padding-box; +} + +.modal.fade { + top: -25%; + -webkit-transition: opacity 0.3s linear, top 0.3s ease-out; + -moz-transition: opacity 0.3s linear, top 0.3s ease-out; + -o-transition: opacity 0.3s linear, top 0.3s ease-out; + transition: opacity 0.3s linear, top 0.3s ease-out; +} + +.modal.fade.in { + top: 10%; +} + +.modal-header { + padding: 9px 15px; + border-bottom: 1px solid #eee; +} + +.modal-header .close { + margin-top: 2px; +} + +.modal-header h3 { + margin: 0; + line-height: 30px; +} + +.modal-body { + position: relative; + max-height: 400px; + padding: 15px; + overflow-y: auto; +} + +.modal-form { + margin-bottom: 0; +} + +.modal-footer { + padding: 14px 15px 15px; + margin-bottom: 0; + text-align: right; + background-color: #f5f5f5; + border-top: 1px solid #ddd; + -webkit-border-radius: 0 0 6px 6px; + -moz-border-radius: 0 0 6px 6px; + border-radius: 0 0 6px 6px; + *zoom: 1; + -webkit-box-shadow: inset 0 1px 0 #ffffff; + -moz-box-shadow: inset 0 1px 0 #ffffff; + box-shadow: inset 0 1px 0 #ffffff; +} + +.modal-footer:before, +.modal-footer:after { + display: table; + line-height: 0; + content: ""; +} + +.modal-footer:after { + clear: both; +} + +.modal-footer .btn + .btn { + margin-bottom: 0; + margin-left: 5px; +} + +.modal-footer .btn-group .btn + .btn { + margin-left: -1px; +} + +.modal-footer .btn-block + .btn-block { + margin-left: 0; +} + +.tooltip { + position: absolute; + z-index: 1030; + display: block; + font-size: 11px; + line-height: 1.4; + opacity: 0; + filter: alpha(opacity=0); + visibility: visible; +} + +.tooltip.in { + opacity: 0.8; + filter: alpha(opacity=80); +} + +.tooltip.top { + padding: 5px 0; + margin-top: -3px; +} + +.tooltip.right { + padding: 0 5px; + margin-left: 3px; +} + +.tooltip.bottom { + padding: 5px 0; + margin-top: 3px; +} + +.tooltip.left { + padding: 0 5px; + margin-left: -3px; +} + +.tooltip-inner { + max-width: 200px; + padding: 8px; + color: #ffffff; + text-align: center; + text-decoration: none; + background-color: #000000; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +.tooltip-arrow { + position: absolute; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; +} + +.tooltip.top .tooltip-arrow { + bottom: 0; + left: 50%; + margin-left: -5px; + border-top-color: #000000; + border-width: 5px 5px 0; +} + +.tooltip.right .tooltip-arrow { + top: 50%; + left: 0; + margin-top: -5px; + border-right-color: #000000; + border-width: 5px 5px 5px 0; +} + +.tooltip.left .tooltip-arrow { + top: 50%; + right: 0; + margin-top: -5px; + border-left-color: #000000; + border-width: 5px 0 5px 5px; +} + +.tooltip.bottom .tooltip-arrow { + top: 0; + left: 50%; + margin-left: -5px; + border-bottom-color: #000000; + border-width: 0 5px 5px; +} + +.popover { + position: absolute; + top: 0; + left: 0; + z-index: 1010; + display: none; + max-width: 276px; + padding: 1px; + text-align: left; + white-space: normal; + background-color: #ffffff; + border: 1px solid #ccc; + border: 1px solid rgba(0, 0, 0, 0.2); + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; + -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + -moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + -webkit-background-clip: padding-box; + -moz-background-clip: padding; + background-clip: padding-box; +} + +.popover.top { + margin-top: -10px; +} + +.popover.right { + margin-left: 10px; +} + +.popover.bottom { + margin-top: 10px; +} + +.popover.left { + margin-left: -10px; +} + +.popover-title { + padding: 8px 14px; + margin: 0; + font-size: 14px; + font-weight: normal; + line-height: 18px; + background-color: #f7f7f7; + border-bottom: 1px solid #ebebeb; + -webkit-border-radius: 5px 5px 0 0; + -moz-border-radius: 5px 5px 0 0; + border-radius: 5px 5px 0 0; +} + +.popover-title:empty { + display: none; +} + +.popover-content { + padding: 9px 14px; +} + +.popover .arrow, +.popover .arrow:after { + position: absolute; + display: block; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; +} + +.popover .arrow { + border-width: 11px; +} + +.popover .arrow:after { + border-width: 10px; + content: ""; +} + +.popover.top .arrow { + bottom: -11px; + left: 50%; + margin-left: -11px; + border-top-color: #999; + border-top-color: rgba(0, 0, 0, 0.25); + border-bottom-width: 0; +} + +.popover.top .arrow:after { + bottom: 1px; + margin-left: -10px; + border-top-color: #ffffff; + border-bottom-width: 0; +} + +.popover.right .arrow { + top: 50%; + left: -11px; + margin-top: -11px; + border-right-color: #999; + border-right-color: rgba(0, 0, 0, 0.25); + border-left-width: 0; +} + +.popover.right .arrow:after { + bottom: -10px; + left: 1px; + border-right-color: #ffffff; + border-left-width: 0; +} + +.popover.bottom .arrow { + top: -11px; + left: 50%; + margin-left: -11px; + border-bottom-color: #999; + border-bottom-color: rgba(0, 0, 0, 0.25); + border-top-width: 0; +} + +.popover.bottom .arrow:after { + top: 1px; + margin-left: -10px; + border-bottom-color: #ffffff; + border-top-width: 0; +} + +.popover.left .arrow { + top: 50%; + right: -11px; + margin-top: -11px; + border-left-color: #999; + border-left-color: rgba(0, 0, 0, 0.25); + border-right-width: 0; +} + +.popover.left .arrow:after { + right: 1px; + bottom: -10px; + border-left-color: #ffffff; + border-right-width: 0; +} + +.thumbnails { + margin-left: -20px; + list-style: none; + *zoom: 1; +} + +.thumbnails:before, +.thumbnails:after { + display: table; + line-height: 0; + content: ""; +} + +.thumbnails:after { + clear: both; +} + +.row-fluid .thumbnails { + margin-left: 0; +} + +.thumbnails > li { + float: left; + margin-bottom: 20px; + margin-left: 20px; +} + +.thumbnail { + display: block; + padding: 4px; + line-height: 20px; + border: 1px solid #ddd; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.055); + -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.055); + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.055); + -webkit-transition: all 0.2s ease-in-out; + -moz-transition: all 0.2s ease-in-out; + -o-transition: all 0.2s ease-in-out; + transition: all 0.2s ease-in-out; +} + +a.thumbnail:hover, +a.thumbnail:focus { + border-color: #0088cc; + -webkit-box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25); + -moz-box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25); + box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25); +} + +.thumbnail > img { + display: block; + max-width: 100%; + margin-right: auto; + margin-left: auto; +} + +.thumbnail .caption { + padding: 9px; + color: #555555; +} + +.media, +.media-body { + overflow: hidden; + *overflow: visible; + zoom: 1; +} + +.media, +.media .media { + margin-top: 15px; +} + +.media:first-child { + margin-top: 0; +} + +.media-object { + display: block; +} + +.media-heading { + margin: 0 0 5px; +} + +.media > .pull-left { + margin-right: 10px; +} + +.media > .pull-right { + margin-left: 10px; +} + +.media-list { + margin-left: 0; + list-style: none; +} + +.label, +.badge { + display: inline-block; + padding: 2px 4px; + font-size: 11.844px; + font-weight: bold; + line-height: 14px; + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + white-space: nowrap; + vertical-align: baseline; + background-color: #999999; +} + +.label { + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; +} + +.badge { + padding-right: 9px; + padding-left: 9px; + -webkit-border-radius: 9px; + -moz-border-radius: 9px; + border-radius: 9px; +} + +.label:empty, +.badge:empty { + display: none; +} + +a.label:hover, +a.label:focus, +a.badge:hover, +a.badge:focus { + color: #ffffff; + text-decoration: none; + cursor: pointer; +} + +.label-important, +.badge-important { + background-color: #b94a48; +} + +.label-important[href], +.badge-important[href] { + background-color: #953b39; +} + +.label-warning, +.badge-warning { + background-color: #f89406; +} + +.label-warning[href], +.badge-warning[href] { + background-color: #c67605; +} + +.label-success, +.badge-success { + background-color: #468847; +} + +.label-success[href], +.badge-success[href] { + background-color: #356635; +} + +.label-info, +.badge-info { + background-color: #3a87ad; +} + +.label-info[href], +.badge-info[href] { + background-color: #2d6987; +} + +.label-inverse, +.badge-inverse { + background-color: #333333; +} + +.label-inverse[href], +.badge-inverse[href] { + background-color: #1a1a1a; +} + +.btn .label, +.btn .badge { + position: relative; + top: -1px; +} + +.btn-mini .label, +.btn-mini .badge { + top: 0; +} + +@-webkit-keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} + +@-moz-keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} + +@-ms-keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} + +@-o-keyframes progress-bar-stripes { + from { + background-position: 0 0; + } + to { + background-position: 40px 0; + } +} + +@keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} + +.progress { + height: 20px; + margin-bottom: 20px; + overflow: hidden; + background-color: #f7f7f7; + background-image: -moz-linear-gradient(top, #f5f5f5, #f9f9f9); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#f5f5f5), to(#f9f9f9)); + background-image: -webkit-linear-gradient(top, #f5f5f5, #f9f9f9); + background-image: -o-linear-gradient(top, #f5f5f5, #f9f9f9); + background-image: linear-gradient(to bottom, #f5f5f5, #f9f9f9); + background-repeat: repeat-x; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#fff9f9f9', GradientType=0); + -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); + -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); + box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); +} + +.progress .bar { + float: left; + width: 0; + height: 100%; + font-size: 12px; + color: #ffffff; + text-align: center; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + background-color: #0e90d2; + background-image: -moz-linear-gradient(top, #149bdf, #0480be); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#149bdf), to(#0480be)); + background-image: -webkit-linear-gradient(top, #149bdf, #0480be); + background-image: -o-linear-gradient(top, #149bdf, #0480be); + background-image: linear-gradient(to bottom, #149bdf, #0480be); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff149bdf', endColorstr='#ff0480be', GradientType=0); + -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); + -moz-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); + box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + -webkit-transition: width 0.6s ease; + -moz-transition: width 0.6s ease; + -o-transition: width 0.6s ease; + transition: width 0.6s ease; +} + +.progress .bar + .bar { + -webkit-box-shadow: inset 1px 0 0 rgba(0, 0, 0, 0.15), inset 0 -1px 0 rgba(0, 0, 0, 0.15); + -moz-box-shadow: inset 1px 0 0 rgba(0, 0, 0, 0.15), inset 0 -1px 0 rgba(0, 0, 0, 0.15); + box-shadow: inset 1px 0 0 rgba(0, 0, 0, 0.15), inset 0 -1px 0 rgba(0, 0, 0, 0.15); +} + +.progress-striped .bar { + background-color: #149bdf; + background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + -webkit-background-size: 40px 40px; + -moz-background-size: 40px 40px; + -o-background-size: 40px 40px; + background-size: 40px 40px; +} + +.progress.active .bar { + -webkit-animation: progress-bar-stripes 2s linear infinite; + -moz-animation: progress-bar-stripes 2s linear infinite; + -ms-animation: progress-bar-stripes 2s linear infinite; + -o-animation: progress-bar-stripes 2s linear infinite; + animation: progress-bar-stripes 2s linear infinite; +} + +.progress-danger .bar, +.progress .bar-danger { + background-color: #dd514c; + background-image: -moz-linear-gradient(top, #ee5f5b, #c43c35); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#c43c35)); + background-image: -webkit-linear-gradient(top, #ee5f5b, #c43c35); + background-image: -o-linear-gradient(top, #ee5f5b, #c43c35); + background-image: linear-gradient(to bottom, #ee5f5b, #c43c35); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b', endColorstr='#ffc43c35', GradientType=0); +} + +.progress-danger.progress-striped .bar, +.progress-striped .bar-danger { + background-color: #ee5f5b; + background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); +} + +.progress-success .bar, +.progress .bar-success { + background-color: #5eb95e; + background-image: -moz-linear-gradient(top, #62c462, #57a957); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#57a957)); + background-image: -webkit-linear-gradient(top, #62c462, #57a957); + background-image: -o-linear-gradient(top, #62c462, #57a957); + background-image: linear-gradient(to bottom, #62c462, #57a957); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462', endColorstr='#ff57a957', GradientType=0); +} + +.progress-success.progress-striped .bar, +.progress-striped .bar-success { + background-color: #62c462; + background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); +} + +.progress-info .bar, +.progress .bar-info { + background-color: #4bb1cf; + background-image: -moz-linear-gradient(top, #5bc0de, #339bb9); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#339bb9)); + background-image: -webkit-linear-gradient(top, #5bc0de, #339bb9); + background-image: -o-linear-gradient(top, #5bc0de, #339bb9); + background-image: linear-gradient(to bottom, #5bc0de, #339bb9); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff339bb9', GradientType=0); +} + +.progress-info.progress-striped .bar, +.progress-striped .bar-info { + background-color: #5bc0de; + background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); +} + +.progress-warning .bar, +.progress .bar-warning { + background-color: #faa732; + background-image: -moz-linear-gradient(top, #fbb450, #f89406); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406)); + background-image: -webkit-linear-gradient(top, #fbb450, #f89406); + background-image: -o-linear-gradient(top, #fbb450, #f89406); + background-image: linear-gradient(to bottom, #fbb450, #f89406); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbb450', endColorstr='#fff89406', GradientType=0); +} + +.progress-warning.progress-striped .bar, +.progress-striped .bar-warning { + background-color: #fbb450; + background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); +} + +.accordion { + margin-bottom: 20px; +} + +.accordion-group { + margin-bottom: 2px; + border: 1px solid #e5e5e5; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +.accordion-heading { + border-bottom: 0; +} + +.accordion-heading .accordion-toggle { + display: block; + padding: 8px 15px; +} + +.accordion-toggle { + cursor: pointer; +} + +.accordion-inner { + padding: 9px 15px; + border-top: 1px solid #e5e5e5; +} + +.carousel { + position: relative; + margin-bottom: 20px; + line-height: 1; +} + +.carousel-inner { + position: relative; + width: 100%; + overflow: hidden; +} + +.carousel-inner > .item { + position: relative; + display: none; + -webkit-transition: 0.6s ease-in-out left; + -moz-transition: 0.6s ease-in-out left; + -o-transition: 0.6s ease-in-out left; + transition: 0.6s ease-in-out left; +} + +.carousel-inner > .item > img, +.carousel-inner > .item > a > img { + display: block; + line-height: 1; +} + +.carousel-inner > .active, +.carousel-inner > .next, +.carousel-inner > .prev { + display: block; +} + +.carousel-inner > .active { + left: 0; +} + +.carousel-inner > .next, +.carousel-inner > .prev { + position: absolute; + top: 0; + width: 100%; +} + +.carousel-inner > .next { + left: 100%; +} + +.carousel-inner > .prev { + left: -100%; +} + +.carousel-inner > .next.left, +.carousel-inner > .prev.right { + left: 0; +} + +.carousel-inner > .active.left { + left: -100%; +} + +.carousel-inner > .active.right { + left: 100%; +} + +.carousel-control { + position: absolute; + top: 40%; + left: 15px; + width: 40px; + height: 40px; + margin-top: -20px; + font-size: 60px; + font-weight: 100; + line-height: 30px; + color: #ffffff; + text-align: center; + background: #222222; + border: 3px solid #ffffff; + -webkit-border-radius: 23px; + -moz-border-radius: 23px; + border-radius: 23px; + opacity: 0.5; + filter: alpha(opacity=50); +} + +.carousel-control.right { + right: 15px; + left: auto; +} + +.carousel-control:hover, +.carousel-control:focus { + color: #ffffff; + text-decoration: none; + opacity: 0.9; + filter: alpha(opacity=90); +} + +.carousel-indicators { + position: absolute; + top: 15px; + right: 15px; + z-index: 5; + margin: 0; + list-style: none; +} + +.carousel-indicators li { + display: block; + float: left; + width: 10px; + height: 10px; + margin-left: 5px; + text-indent: -999px; + background-color: #ccc; + background-color: rgba(255, 255, 255, 0.25); + border-radius: 5px; +} + +.carousel-indicators .active { + background-color: #fff; +} + +.carousel-caption { + position: absolute; + right: 0; + bottom: 0; + left: 0; + padding: 15px; + background: #333333; + background: rgba(0, 0, 0, 0.75); +} + +.carousel-caption h4, +.carousel-caption p { + line-height: 20px; + color: #ffffff; +} + +.carousel-caption h4 { + margin: 0 0 5px; +} + +.carousel-caption p { + margin-bottom: 0; +} + +.hero-unit { + padding: 60px; + margin-bottom: 30px; + font-size: 18px; + font-weight: 200; + line-height: 30px; + color: inherit; + background-color: #eeeeee; + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; +} + +.hero-unit h1 { + margin-bottom: 0; + font-size: 60px; + line-height: 1; + letter-spacing: -1px; + color: inherit; +} + +.hero-unit li { + line-height: 30px; +} + +.pull-right { + float: right; +} + +.pull-left { + float: left; +} + +.hide { + display: none; +} + +.show { + display: block; +} + +.invisible { + visibility: hidden; +} + +.affix { + position: fixed; +} diff --git a/docs/_static/bootstrap-2.3.2/css/bootstrap.min.css b/docs/_static/bootstrap-2.3.2/css/bootstrap.min.css new file mode 100644 index 0000000..b6428e6 --- /dev/null +++ b/docs/_static/bootstrap-2.3.2/css/bootstrap.min.css @@ -0,0 +1,9 @@ +/*! + * Bootstrap v2.3.2 + * + * Copyright 2012 Twitter, Inc + * Licensed under the Apache License v2.0 + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Designed and built with all the love in the world @twitter by @mdo and @fat. + */.clearfix{*zoom:1}.clearfix:before,.clearfix:after{display:table;line-height:0;content:""}.clearfix:after{clear:both}.hide-text{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.input-block-level{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block}audio,canvas,video{display:inline-block;*display:inline;*zoom:1}audio:not([controls]){display:none}html{font-size:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}a:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}a:hover,a:active{outline:0}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}img{width:auto\9;height:auto;max-width:100%;vertical-align:middle;border:0;-ms-interpolation-mode:bicubic}#map_canvas img,.google-maps img{max-width:none}button,input,select,textarea{margin:0;font-size:100%;vertical-align:middle}button,input{*overflow:visible;line-height:normal}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}button,html input[type="button"],input[type="reset"],input[type="submit"]{cursor:pointer;-webkit-appearance:button}label,select,button,input[type="button"],input[type="reset"],input[type="submit"],input[type="radio"],input[type="checkbox"]{cursor:pointer}input[type="search"]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type="search"]::-webkit-search-decoration,input[type="search"]::-webkit-search-cancel-button{-webkit-appearance:none}textarea{overflow:auto;vertical-align:top}@media print{*{color:#000!important;text-shadow:none!important;background:transparent!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}.ir a:after,a[href^="javascript:"]:after,a[href^="#"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100%!important}@page{margin:.5cm}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}}body{margin:0;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:20px;color:#333;background-color:#fff}a{color:#08c;text-decoration:none}a:hover,a:focus{color:#005580;text-decoration:underline}.img-rounded{-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.img-polaroid{padding:4px;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);-webkit-box-shadow:0 1px 3px rgba(0,0,0,0.1);-moz-box-shadow:0 1px 3px rgba(0,0,0,0.1);box-shadow:0 1px 3px rgba(0,0,0,0.1)}.img-circle{-webkit-border-radius:500px;-moz-border-radius:500px;border-radius:500px}.row{margin-left:-20px;*zoom:1}.row:before,.row:after{display:table;line-height:0;content:""}.row:after{clear:both}[class*="span"]{float:left;min-height:1px;margin-left:20px}.container,.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:940px}.span12{width:940px}.span11{width:860px}.span10{width:780px}.span9{width:700px}.span8{width:620px}.span7{width:540px}.span6{width:460px}.span5{width:380px}.span4{width:300px}.span3{width:220px}.span2{width:140px}.span1{width:60px}.offset12{margin-left:980px}.offset11{margin-left:900px}.offset10{margin-left:820px}.offset9{margin-left:740px}.offset8{margin-left:660px}.offset7{margin-left:580px}.offset6{margin-left:500px}.offset5{margin-left:420px}.offset4{margin-left:340px}.offset3{margin-left:260px}.offset2{margin-left:180px}.offset1{margin-left:100px}.row-fluid{width:100%;*zoom:1}.row-fluid:before,.row-fluid:after{display:table;line-height:0;content:""}.row-fluid:after{clear:both}.row-fluid [class*="span"]{display:block;float:left;width:100%;min-height:30px;margin-left:2.127659574468085%;*margin-left:2.074468085106383%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.row-fluid [class*="span"]:first-child{margin-left:0}.row-fluid .controls-row [class*="span"]+[class*="span"]{margin-left:2.127659574468085%}.row-fluid .span12{width:100%;*width:99.94680851063829%}.row-fluid .span11{width:91.48936170212765%;*width:91.43617021276594%}.row-fluid .span10{width:82.97872340425532%;*width:82.92553191489361%}.row-fluid .span9{width:74.46808510638297%;*width:74.41489361702126%}.row-fluid .span8{width:65.95744680851064%;*width:65.90425531914893%}.row-fluid .span7{width:57.44680851063829%;*width:57.39361702127659%}.row-fluid .span6{width:48.93617021276595%;*width:48.88297872340425%}.row-fluid .span5{width:40.42553191489362%;*width:40.37234042553192%}.row-fluid .span4{width:31.914893617021278%;*width:31.861702127659576%}.row-fluid .span3{width:23.404255319148934%;*width:23.351063829787233%}.row-fluid .span2{width:14.893617021276595%;*width:14.840425531914894%}.row-fluid .span1{width:6.382978723404255%;*width:6.329787234042553%}.row-fluid .offset12{margin-left:104.25531914893617%;*margin-left:104.14893617021275%}.row-fluid .offset12:first-child{margin-left:102.12765957446808%;*margin-left:102.02127659574467%}.row-fluid .offset11{margin-left:95.74468085106382%;*margin-left:95.6382978723404%}.row-fluid .offset11:first-child{margin-left:93.61702127659574%;*margin-left:93.51063829787232%}.row-fluid .offset10{margin-left:87.23404255319149%;*margin-left:87.12765957446807%}.row-fluid .offset10:first-child{margin-left:85.1063829787234%;*margin-left:84.99999999999999%}.row-fluid .offset9{margin-left:78.72340425531914%;*margin-left:78.61702127659572%}.row-fluid .offset9:first-child{margin-left:76.59574468085106%;*margin-left:76.48936170212764%}.row-fluid .offset8{margin-left:70.2127659574468%;*margin-left:70.10638297872339%}.row-fluid .offset8:first-child{margin-left:68.08510638297872%;*margin-left:67.9787234042553%}.row-fluid .offset7{margin-left:61.70212765957446%;*margin-left:61.59574468085106%}.row-fluid .offset7:first-child{margin-left:59.574468085106375%;*margin-left:59.46808510638297%}.row-fluid .offset6{margin-left:53.191489361702125%;*margin-left:53.085106382978715%}.row-fluid .offset6:first-child{margin-left:51.063829787234035%;*margin-left:50.95744680851063%}.row-fluid .offset5{margin-left:44.68085106382979%;*margin-left:44.57446808510638%}.row-fluid .offset5:first-child{margin-left:42.5531914893617%;*margin-left:42.4468085106383%}.row-fluid .offset4{margin-left:36.170212765957444%;*margin-left:36.06382978723405%}.row-fluid .offset4:first-child{margin-left:34.04255319148936%;*margin-left:33.93617021276596%}.row-fluid .offset3{margin-left:27.659574468085104%;*margin-left:27.5531914893617%}.row-fluid .offset3:first-child{margin-left:25.53191489361702%;*margin-left:25.425531914893618%}.row-fluid .offset2{margin-left:19.148936170212764%;*margin-left:19.04255319148936%}.row-fluid .offset2:first-child{margin-left:17.02127659574468%;*margin-left:16.914893617021278%}.row-fluid .offset1{margin-left:10.638297872340425%;*margin-left:10.53191489361702%}.row-fluid .offset1:first-child{margin-left:8.51063829787234%;*margin-left:8.404255319148938%}[class*="span"].hide,.row-fluid [class*="span"].hide{display:none}[class*="span"].pull-right,.row-fluid [class*="span"].pull-right{float:right}.container{margin-right:auto;margin-left:auto;*zoom:1}.container:before,.container:after{display:table;line-height:0;content:""}.container:after{clear:both}.container-fluid{padding-right:20px;padding-left:20px;*zoom:1}.container-fluid:before,.container-fluid:after{display:table;line-height:0;content:""}.container-fluid:after{clear:both}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:21px;font-weight:200;line-height:30px}small{font-size:85%}strong{font-weight:bold}em{font-style:italic}cite{font-style:normal}.muted{color:#999}a.muted:hover,a.muted:focus{color:#808080}.text-warning{color:#c09853}a.text-warning:hover,a.text-warning:focus{color:#a47e3c}.text-error{color:#b94a48}a.text-error:hover,a.text-error:focus{color:#953b39}.text-info{color:#3a87ad}a.text-info:hover,a.text-info:focus{color:#2d6987}.text-success{color:#468847}a.text-success:hover,a.text-success:focus{color:#356635}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}h1,h2,h3,h4,h5,h6{margin:10px 0;font-family:inherit;font-weight:bold;line-height:20px;color:inherit;text-rendering:optimizelegibility}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small{font-weight:normal;line-height:1;color:#999}h1,h2,h3{line-height:40px}h1{font-size:38.5px}h2{font-size:31.5px}h3{font-size:24.5px}h4{font-size:17.5px}h5{font-size:14px}h6{font-size:11.9px}h1 small{font-size:24.5px}h2 small{font-size:17.5px}h3 small{font-size:14px}h4 small{font-size:14px}.page-header{padding-bottom:9px;margin:20px 0 30px;border-bottom:1px solid #eee}ul,ol{padding:0;margin:0 0 10px 25px}ul ul,ul ol,ol ol,ol ul{margin-bottom:0}li{line-height:20px}ul.unstyled,ol.unstyled{margin-left:0;list-style:none}ul.inline,ol.inline{margin-left:0;list-style:none}ul.inline>li,ol.inline>li{display:inline-block;*display:inline;padding-right:5px;padding-left:5px;*zoom:1}dl{margin-bottom:20px}dt,dd{line-height:20px}dt{font-weight:bold}dd{margin-left:10px}.dl-horizontal{*zoom:1}.dl-horizontal:before,.dl-horizontal:after{display:table;line-height:0;content:""}.dl-horizontal:after{clear:both}.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}hr{margin:20px 0;border:0;border-top:1px solid #eee;border-bottom:1px solid #fff}abbr[title],abbr[data-original-title]{cursor:help;border-bottom:1px dotted #999}abbr.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:0 0 0 15px;margin:0 0 20px;border-left:5px solid #eee}blockquote p{margin-bottom:0;font-size:17.5px;font-weight:300;line-height:1.25}blockquote small{display:block;line-height:20px;color:#999}blockquote small:before{content:'\2014 \00A0'}blockquote.pull-right{float:right;padding-right:15px;padding-left:0;border-right:5px solid #eee;border-left:0}blockquote.pull-right p,blockquote.pull-right small{text-align:right}blockquote.pull-right small:before{content:''}blockquote.pull-right small:after{content:'\00A0 \2014'}q:before,q:after,blockquote:before,blockquote:after{content:""}address{display:block;margin-bottom:20px;font-style:normal;line-height:20px}code,pre{padding:0 3px 2px;font-family:Monaco,Menlo,Consolas,"Courier New",monospace;font-size:12px;color:#333;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}code{padding:2px 4px;color:#d14;white-space:nowrap;background-color:#f7f7f9;border:1px solid #e1e1e8}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:20px;word-break:break-all;word-wrap:break-word;white-space:pre;white-space:pre-wrap;background-color:#f5f5f5;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.15);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}pre.prettyprint{margin-bottom:20px}pre code{padding:0;color:inherit;white-space:pre;white-space:pre-wrap;background-color:transparent;border:0}.pre-scrollable{max-height:340px;overflow-y:scroll}form{margin:0 0 20px}fieldset{padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:40px;color:#333;border:0;border-bottom:1px solid #e5e5e5}legend small{font-size:15px;color:#999}label,input,button,select,textarea{font-size:14px;font-weight:normal;line-height:20px}input,button,select,textarea{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif}label{display:block;margin-bottom:5px}select,textarea,input[type="text"],input[type="password"],input[type="datetime"],input[type="datetime-local"],input[type="date"],input[type="month"],input[type="time"],input[type="week"],input[type="number"],input[type="email"],input[type="url"],input[type="search"],input[type="tel"],input[type="color"],.uneditable-input{display:inline-block;height:20px;padding:4px 6px;margin-bottom:10px;font-size:14px;line-height:20px;color:#555;vertical-align:middle;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}input,textarea,.uneditable-input{width:206px}textarea{height:auto}textarea,input[type="text"],input[type="password"],input[type="datetime"],input[type="datetime-local"],input[type="date"],input[type="month"],input[type="time"],input[type="week"],input[type="number"],input[type="email"],input[type="url"],input[type="search"],input[type="tel"],input[type="color"],.uneditable-input{background-color:#fff;border:1px solid #ccc;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-webkit-transition:border linear .2s,box-shadow linear .2s;-moz-transition:border linear .2s,box-shadow linear .2s;-o-transition:border linear .2s,box-shadow linear .2s;transition:border linear .2s,box-shadow linear .2s}textarea:focus,input[type="text"]:focus,input[type="password"]:focus,input[type="datetime"]:focus,input[type="datetime-local"]:focus,input[type="date"]:focus,input[type="month"]:focus,input[type="time"]:focus,input[type="week"]:focus,input[type="number"]:focus,input[type="email"]:focus,input[type="url"]:focus,input[type="search"]:focus,input[type="tel"]:focus,input[type="color"]:focus,.uneditable-input:focus{border-color:rgba(82,168,236,0.8);outline:0;outline:thin dotted \9;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6)}input[type="radio"],input[type="checkbox"]{margin:4px 0 0;margin-top:1px \9;*margin-top:0;line-height:normal}input[type="file"],input[type="image"],input[type="submit"],input[type="reset"],input[type="button"],input[type="radio"],input[type="checkbox"]{width:auto}select,input[type="file"]{height:30px;*margin-top:4px;line-height:30px}select{width:220px;background-color:#fff;border:1px solid #ccc}select[multiple],select[size]{height:auto}select:focus,input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.uneditable-input,.uneditable-textarea{color:#999;cursor:not-allowed;background-color:#fcfcfc;border-color:#ccc;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.025);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,0.025);box-shadow:inset 0 1px 2px rgba(0,0,0,0.025)}.uneditable-input{overflow:hidden;white-space:nowrap}.uneditable-textarea{width:auto;height:auto}input:-moz-placeholder,textarea:-moz-placeholder{color:#999}input:-ms-input-placeholder,textarea:-ms-input-placeholder{color:#999}input::-webkit-input-placeholder,textarea::-webkit-input-placeholder{color:#999}.radio,.checkbox{min-height:20px;padding-left:20px}.radio input[type="radio"],.checkbox input[type="checkbox"]{float:left;margin-left:-20px}.controls>.radio:first-child,.controls>.checkbox:first-child{padding-top:5px}.radio.inline,.checkbox.inline{display:inline-block;padding-top:5px;margin-bottom:0;vertical-align:middle}.radio.inline+.radio.inline,.checkbox.inline+.checkbox.inline{margin-left:10px}.input-mini{width:60px}.input-small{width:90px}.input-medium{width:150px}.input-large{width:210px}.input-xlarge{width:270px}.input-xxlarge{width:530px}input[class*="span"],select[class*="span"],textarea[class*="span"],.uneditable-input[class*="span"],.row-fluid input[class*="span"],.row-fluid select[class*="span"],.row-fluid textarea[class*="span"],.row-fluid .uneditable-input[class*="span"]{float:none;margin-left:0}.input-append input[class*="span"],.input-append .uneditable-input[class*="span"],.input-prepend input[class*="span"],.input-prepend .uneditable-input[class*="span"],.row-fluid input[class*="span"],.row-fluid select[class*="span"],.row-fluid textarea[class*="span"],.row-fluid .uneditable-input[class*="span"],.row-fluid .input-prepend [class*="span"],.row-fluid .input-append [class*="span"]{display:inline-block}input,textarea,.uneditable-input{margin-left:0}.controls-row [class*="span"]+[class*="span"]{margin-left:20px}input.span12,textarea.span12,.uneditable-input.span12{width:926px}input.span11,textarea.span11,.uneditable-input.span11{width:846px}input.span10,textarea.span10,.uneditable-input.span10{width:766px}input.span9,textarea.span9,.uneditable-input.span9{width:686px}input.span8,textarea.span8,.uneditable-input.span8{width:606px}input.span7,textarea.span7,.uneditable-input.span7{width:526px}input.span6,textarea.span6,.uneditable-input.span6{width:446px}input.span5,textarea.span5,.uneditable-input.span5{width:366px}input.span4,textarea.span4,.uneditable-input.span4{width:286px}input.span3,textarea.span3,.uneditable-input.span3{width:206px}input.span2,textarea.span2,.uneditable-input.span2{width:126px}input.span1,textarea.span1,.uneditable-input.span1{width:46px}.controls-row{*zoom:1}.controls-row:before,.controls-row:after{display:table;line-height:0;content:""}.controls-row:after{clear:both}.controls-row [class*="span"],.row-fluid .controls-row [class*="span"]{float:left}.controls-row .checkbox[class*="span"],.controls-row .radio[class*="span"]{padding-top:5px}input[disabled],select[disabled],textarea[disabled],input[readonly],select[readonly],textarea[readonly]{cursor:not-allowed;background-color:#eee}input[type="radio"][disabled],input[type="checkbox"][disabled],input[type="radio"][readonly],input[type="checkbox"][readonly]{background-color:transparent}.control-group.warning .control-label,.control-group.warning .help-block,.control-group.warning .help-inline{color:#c09853}.control-group.warning .checkbox,.control-group.warning .radio,.control-group.warning input,.control-group.warning select,.control-group.warning textarea{color:#c09853}.control-group.warning input,.control-group.warning select,.control-group.warning textarea{border-color:#c09853;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.warning input:focus,.control-group.warning select:focus,.control-group.warning textarea:focus{border-color:#a47e3c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #dbc59e;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #dbc59e;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #dbc59e}.control-group.warning .input-prepend .add-on,.control-group.warning .input-append .add-on{color:#c09853;background-color:#fcf8e3;border-color:#c09853}.control-group.error .control-label,.control-group.error .help-block,.control-group.error .help-inline{color:#b94a48}.control-group.error .checkbox,.control-group.error .radio,.control-group.error input,.control-group.error select,.control-group.error textarea{color:#b94a48}.control-group.error input,.control-group.error select,.control-group.error textarea{border-color:#b94a48;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.error input:focus,.control-group.error select:focus,.control-group.error textarea:focus{border-color:#953b39;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #d59392;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #d59392;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #d59392}.control-group.error .input-prepend .add-on,.control-group.error .input-append .add-on{color:#b94a48;background-color:#f2dede;border-color:#b94a48}.control-group.success .control-label,.control-group.success .help-block,.control-group.success .help-inline{color:#468847}.control-group.success .checkbox,.control-group.success .radio,.control-group.success input,.control-group.success select,.control-group.success textarea{color:#468847}.control-group.success input,.control-group.success select,.control-group.success textarea{border-color:#468847;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.success input:focus,.control-group.success select:focus,.control-group.success textarea:focus{border-color:#356635;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7aba7b;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7aba7b;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7aba7b}.control-group.success .input-prepend .add-on,.control-group.success .input-append .add-on{color:#468847;background-color:#dff0d8;border-color:#468847}.control-group.info .control-label,.control-group.info .help-block,.control-group.info .help-inline{color:#3a87ad}.control-group.info .checkbox,.control-group.info .radio,.control-group.info input,.control-group.info select,.control-group.info textarea{color:#3a87ad}.control-group.info input,.control-group.info select,.control-group.info textarea{border-color:#3a87ad;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.info input:focus,.control-group.info select:focus,.control-group.info textarea:focus{border-color:#2d6987;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7ab5d3;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7ab5d3;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7ab5d3}.control-group.info .input-prepend .add-on,.control-group.info .input-append .add-on{color:#3a87ad;background-color:#d9edf7;border-color:#3a87ad}input:focus:invalid,textarea:focus:invalid,select:focus:invalid{color:#b94a48;border-color:#ee5f5b}input:focus:invalid:focus,textarea:focus:invalid:focus,select:focus:invalid:focus{border-color:#e9322d;-webkit-box-shadow:0 0 6px #f8b9b7;-moz-box-shadow:0 0 6px #f8b9b7;box-shadow:0 0 6px #f8b9b7}.form-actions{padding:19px 20px 20px;margin-top:20px;margin-bottom:20px;background-color:#f5f5f5;border-top:1px solid #e5e5e5;*zoom:1}.form-actions:before,.form-actions:after{display:table;line-height:0;content:""}.form-actions:after{clear:both}.help-block,.help-inline{color:#595959}.help-block{display:block;margin-bottom:10px}.help-inline{display:inline-block;*display:inline;padding-left:5px;vertical-align:middle;*zoom:1}.input-append,.input-prepend{display:inline-block;margin-bottom:10px;font-size:0;white-space:nowrap;vertical-align:middle}.input-append input,.input-prepend input,.input-append select,.input-prepend select,.input-append .uneditable-input,.input-prepend .uneditable-input,.input-append .dropdown-menu,.input-prepend .dropdown-menu,.input-append .popover,.input-prepend .popover{font-size:14px}.input-append input,.input-prepend input,.input-append select,.input-prepend select,.input-append .uneditable-input,.input-prepend .uneditable-input{position:relative;margin-bottom:0;*margin-left:0;vertical-align:top;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-append input:focus,.input-prepend input:focus,.input-append select:focus,.input-prepend select:focus,.input-append .uneditable-input:focus,.input-prepend .uneditable-input:focus{z-index:2}.input-append .add-on,.input-prepend .add-on{display:inline-block;width:auto;height:20px;min-width:16px;padding:4px 5px;font-size:14px;font-weight:normal;line-height:20px;text-align:center;text-shadow:0 1px 0 #fff;background-color:#eee;border:1px solid #ccc}.input-append .add-on,.input-prepend .add-on,.input-append .btn,.input-prepend .btn,.input-append .btn-group>.dropdown-toggle,.input-prepend .btn-group>.dropdown-toggle{vertical-align:top;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.input-append .active,.input-prepend .active{background-color:#a9dba9;border-color:#46a546}.input-prepend .add-on,.input-prepend .btn{margin-right:-1px}.input-prepend .add-on:first-child,.input-prepend .btn:first-child{-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.input-append input,.input-append select,.input-append .uneditable-input{-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.input-append input+.btn-group .btn:last-child,.input-append select+.btn-group .btn:last-child,.input-append .uneditable-input+.btn-group .btn:last-child{-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-append .add-on,.input-append .btn,.input-append .btn-group{margin-left:-1px}.input-append .add-on:last-child,.input-append .btn:last-child,.input-append .btn-group:last-child>.dropdown-toggle{-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-prepend.input-append input,.input-prepend.input-append select,.input-prepend.input-append .uneditable-input{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.input-prepend.input-append input+.btn-group .btn,.input-prepend.input-append select+.btn-group .btn,.input-prepend.input-append .uneditable-input+.btn-group .btn{-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-prepend.input-append .add-on:first-child,.input-prepend.input-append .btn:first-child{margin-right:-1px;-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.input-prepend.input-append .add-on:last-child,.input-prepend.input-append .btn:last-child{margin-left:-1px;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-prepend.input-append .btn-group:first-child{margin-left:0}input.search-query{padding-right:14px;padding-right:4px \9;padding-left:14px;padding-left:4px \9;margin-bottom:0;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px}.form-search .input-append .search-query,.form-search .input-prepend .search-query{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.form-search .input-append .search-query{-webkit-border-radius:14px 0 0 14px;-moz-border-radius:14px 0 0 14px;border-radius:14px 0 0 14px}.form-search .input-append .btn{-webkit-border-radius:0 14px 14px 0;-moz-border-radius:0 14px 14px 0;border-radius:0 14px 14px 0}.form-search .input-prepend .search-query{-webkit-border-radius:0 14px 14px 0;-moz-border-radius:0 14px 14px 0;border-radius:0 14px 14px 0}.form-search .input-prepend .btn{-webkit-border-radius:14px 0 0 14px;-moz-border-radius:14px 0 0 14px;border-radius:14px 0 0 14px}.form-search input,.form-inline input,.form-horizontal input,.form-search textarea,.form-inline textarea,.form-horizontal textarea,.form-search select,.form-inline select,.form-horizontal select,.form-search .help-inline,.form-inline .help-inline,.form-horizontal .help-inline,.form-search .uneditable-input,.form-inline .uneditable-input,.form-horizontal .uneditable-input,.form-search .input-prepend,.form-inline .input-prepend,.form-horizontal .input-prepend,.form-search .input-append,.form-inline .input-append,.form-horizontal .input-append{display:inline-block;*display:inline;margin-bottom:0;vertical-align:middle;*zoom:1}.form-search .hide,.form-inline .hide,.form-horizontal .hide{display:none}.form-search label,.form-inline label,.form-search .btn-group,.form-inline .btn-group{display:inline-block}.form-search .input-append,.form-inline .input-append,.form-search .input-prepend,.form-inline .input-prepend{margin-bottom:0}.form-search .radio,.form-search .checkbox,.form-inline .radio,.form-inline .checkbox{padding-left:0;margin-bottom:0;vertical-align:middle}.form-search .radio input[type="radio"],.form-search .checkbox input[type="checkbox"],.form-inline .radio input[type="radio"],.form-inline .checkbox input[type="checkbox"]{float:left;margin-right:3px;margin-left:0}.control-group{margin-bottom:10px}legend+.control-group{margin-top:20px;-webkit-margin-top-collapse:separate}.form-horizontal .control-group{margin-bottom:20px;*zoom:1}.form-horizontal .control-group:before,.form-horizontal .control-group:after{display:table;line-height:0;content:""}.form-horizontal .control-group:after{clear:both}.form-horizontal .control-label{float:left;width:160px;padding-top:5px;text-align:right}.form-horizontal .controls{*display:inline-block;*padding-left:20px;margin-left:180px;*margin-left:0}.form-horizontal .controls:first-child{*padding-left:180px}.form-horizontal .help-block{margin-bottom:0}.form-horizontal input+.help-block,.form-horizontal select+.help-block,.form-horizontal textarea+.help-block,.form-horizontal .uneditable-input+.help-block,.form-horizontal .input-prepend+.help-block,.form-horizontal .input-append+.help-block{margin-top:10px}.form-horizontal .form-actions{padding-left:180px}table{max-width:100%;background-color:transparent;border-collapse:collapse;border-spacing:0}.table{width:100%;margin-bottom:20px}.table th,.table td{padding:8px;line-height:20px;text-align:left;vertical-align:top;border-top:1px solid #ddd}.table th{font-weight:bold}.table thead th{vertical-align:bottom}.table caption+thead tr:first-child th,.table caption+thead tr:first-child td,.table colgroup+thead tr:first-child th,.table colgroup+thead tr:first-child td,.table thead:first-child tr:first-child th,.table thead:first-child tr:first-child td{border-top:0}.table tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed th,.table-condensed td{padding:4px 5px}.table-bordered{border:1px solid #ddd;border-collapse:separate;*border-collapse:collapse;border-left:0;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.table-bordered th,.table-bordered td{border-left:1px solid #ddd}.table-bordered caption+thead tr:first-child th,.table-bordered caption+tbody tr:first-child th,.table-bordered caption+tbody tr:first-child td,.table-bordered colgroup+thead tr:first-child th,.table-bordered colgroup+tbody tr:first-child th,.table-bordered colgroup+tbody tr:first-child td,.table-bordered thead:first-child tr:first-child th,.table-bordered tbody:first-child tr:first-child th,.table-bordered tbody:first-child tr:first-child td{border-top:0}.table-bordered thead:first-child tr:first-child>th:first-child,.table-bordered tbody:first-child tr:first-child>td:first-child,.table-bordered tbody:first-child tr:first-child>th:first-child{-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topleft:4px}.table-bordered thead:first-child tr:first-child>th:last-child,.table-bordered tbody:first-child tr:first-child>td:last-child,.table-bordered tbody:first-child tr:first-child>th:last-child{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-moz-border-radius-topright:4px}.table-bordered thead:last-child tr:last-child>th:first-child,.table-bordered tbody:last-child tr:last-child>td:first-child,.table-bordered tbody:last-child tr:last-child>th:first-child,.table-bordered tfoot:last-child tr:last-child>td:first-child,.table-bordered tfoot:last-child tr:last-child>th:first-child{-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-moz-border-radius-bottomleft:4px}.table-bordered thead:last-child tr:last-child>th:last-child,.table-bordered tbody:last-child tr:last-child>td:last-child,.table-bordered tbody:last-child tr:last-child>th:last-child,.table-bordered tfoot:last-child tr:last-child>td:last-child,.table-bordered tfoot:last-child tr:last-child>th:last-child{-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-bottomright:4px}.table-bordered tfoot+tbody:last-child tr:last-child td:first-child{-webkit-border-bottom-left-radius:0;border-bottom-left-radius:0;-moz-border-radius-bottomleft:0}.table-bordered tfoot+tbody:last-child tr:last-child td:last-child{-webkit-border-bottom-right-radius:0;border-bottom-right-radius:0;-moz-border-radius-bottomright:0}.table-bordered caption+thead tr:first-child th:first-child,.table-bordered caption+tbody tr:first-child td:first-child,.table-bordered colgroup+thead tr:first-child th:first-child,.table-bordered colgroup+tbody tr:first-child td:first-child{-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topleft:4px}.table-bordered caption+thead tr:first-child th:last-child,.table-bordered caption+tbody tr:first-child td:last-child,.table-bordered colgroup+thead tr:first-child th:last-child,.table-bordered colgroup+tbody tr:first-child td:last-child{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-moz-border-radius-topright:4px}.table-striped tbody>tr:nth-child(odd)>td,.table-striped tbody>tr:nth-child(odd)>th{background-color:#f9f9f9}.table-hover tbody tr:hover>td,.table-hover tbody tr:hover>th{background-color:#f5f5f5}table td[class*="span"],table th[class*="span"],.row-fluid table td[class*="span"],.row-fluid table th[class*="span"]{display:table-cell;float:none;margin-left:0}.table td.span1,.table th.span1{float:none;width:44px;margin-left:0}.table td.span2,.table th.span2{float:none;width:124px;margin-left:0}.table td.span3,.table th.span3{float:none;width:204px;margin-left:0}.table td.span4,.table th.span4{float:none;width:284px;margin-left:0}.table td.span5,.table th.span5{float:none;width:364px;margin-left:0}.table td.span6,.table th.span6{float:none;width:444px;margin-left:0}.table td.span7,.table th.span7{float:none;width:524px;margin-left:0}.table td.span8,.table th.span8{float:none;width:604px;margin-left:0}.table td.span9,.table th.span9{float:none;width:684px;margin-left:0}.table td.span10,.table th.span10{float:none;width:764px;margin-left:0}.table td.span11,.table th.span11{float:none;width:844px;margin-left:0}.table td.span12,.table th.span12{float:none;width:924px;margin-left:0}.table tbody tr.success>td{background-color:#dff0d8}.table tbody tr.error>td{background-color:#f2dede}.table tbody tr.warning>td{background-color:#fcf8e3}.table tbody tr.info>td{background-color:#d9edf7}.table-hover tbody tr.success:hover>td{background-color:#d0e9c6}.table-hover tbody tr.error:hover>td{background-color:#ebcccc}.table-hover tbody tr.warning:hover>td{background-color:#faf2cc}.table-hover tbody tr.info:hover>td{background-color:#c4e3f3}[class^="icon-"],[class*=" icon-"]{display:inline-block;width:14px;height:14px;margin-top:1px;*margin-right:.3em;line-height:14px;vertical-align:text-top;background-image:url("../img/glyphicons-halflings.png");background-position:14px 14px;background-repeat:no-repeat}.icon-white,.nav-pills>.active>a>[class^="icon-"],.nav-pills>.active>a>[class*=" icon-"],.nav-list>.active>a>[class^="icon-"],.nav-list>.active>a>[class*=" icon-"],.navbar-inverse .nav>.active>a>[class^="icon-"],.navbar-inverse .nav>.active>a>[class*=" icon-"],.dropdown-menu>li>a:hover>[class^="icon-"],.dropdown-menu>li>a:focus>[class^="icon-"],.dropdown-menu>li>a:hover>[class*=" icon-"],.dropdown-menu>li>a:focus>[class*=" icon-"],.dropdown-menu>.active>a>[class^="icon-"],.dropdown-menu>.active>a>[class*=" icon-"],.dropdown-submenu:hover>a>[class^="icon-"],.dropdown-submenu:focus>a>[class^="icon-"],.dropdown-submenu:hover>a>[class*=" icon-"],.dropdown-submenu:focus>a>[class*=" icon-"]{background-image:url("../img/glyphicons-halflings-white.png")}.icon-glass{background-position:0 0}.icon-music{background-position:-24px 0}.icon-search{background-position:-48px 0}.icon-envelope{background-position:-72px 0}.icon-heart{background-position:-96px 0}.icon-star{background-position:-120px 0}.icon-star-empty{background-position:-144px 0}.icon-user{background-position:-168px 0}.icon-film{background-position:-192px 0}.icon-th-large{background-position:-216px 0}.icon-th{background-position:-240px 0}.icon-th-list{background-position:-264px 0}.icon-ok{background-position:-288px 0}.icon-remove{background-position:-312px 0}.icon-zoom-in{background-position:-336px 0}.icon-zoom-out{background-position:-360px 0}.icon-off{background-position:-384px 0}.icon-signal{background-position:-408px 0}.icon-cog{background-position:-432px 0}.icon-trash{background-position:-456px 0}.icon-home{background-position:0 -24px}.icon-file{background-position:-24px -24px}.icon-time{background-position:-48px -24px}.icon-road{background-position:-72px -24px}.icon-download-alt{background-position:-96px -24px}.icon-download{background-position:-120px -24px}.icon-upload{background-position:-144px -24px}.icon-inbox{background-position:-168px -24px}.icon-play-circle{background-position:-192px -24px}.icon-repeat{background-position:-216px -24px}.icon-refresh{background-position:-240px -24px}.icon-list-alt{background-position:-264px -24px}.icon-lock{background-position:-287px -24px}.icon-flag{background-position:-312px -24px}.icon-headphones{background-position:-336px -24px}.icon-volume-off{background-position:-360px -24px}.icon-volume-down{background-position:-384px -24px}.icon-volume-up{background-position:-408px -24px}.icon-qrcode{background-position:-432px -24px}.icon-barcode{background-position:-456px -24px}.icon-tag{background-position:0 -48px}.icon-tags{background-position:-25px -48px}.icon-book{background-position:-48px -48px}.icon-bookmark{background-position:-72px -48px}.icon-print{background-position:-96px -48px}.icon-camera{background-position:-120px -48px}.icon-font{background-position:-144px -48px}.icon-bold{background-position:-167px -48px}.icon-italic{background-position:-192px -48px}.icon-text-height{background-position:-216px -48px}.icon-text-width{background-position:-240px -48px}.icon-align-left{background-position:-264px -48px}.icon-align-center{background-position:-288px -48px}.icon-align-right{background-position:-312px -48px}.icon-align-justify{background-position:-336px -48px}.icon-list{background-position:-360px -48px}.icon-indent-left{background-position:-384px -48px}.icon-indent-right{background-position:-408px -48px}.icon-facetime-video{background-position:-432px -48px}.icon-picture{background-position:-456px -48px}.icon-pencil{background-position:0 -72px}.icon-map-marker{background-position:-24px -72px}.icon-adjust{background-position:-48px -72px}.icon-tint{background-position:-72px -72px}.icon-edit{background-position:-96px -72px}.icon-share{background-position:-120px -72px}.icon-check{background-position:-144px -72px}.icon-move{background-position:-168px -72px}.icon-step-backward{background-position:-192px -72px}.icon-fast-backward{background-position:-216px -72px}.icon-backward{background-position:-240px -72px}.icon-play{background-position:-264px -72px}.icon-pause{background-position:-288px -72px}.icon-stop{background-position:-312px -72px}.icon-forward{background-position:-336px -72px}.icon-fast-forward{background-position:-360px -72px}.icon-step-forward{background-position:-384px -72px}.icon-eject{background-position:-408px -72px}.icon-chevron-left{background-position:-432px -72px}.icon-chevron-right{background-position:-456px -72px}.icon-plus-sign{background-position:0 -96px}.icon-minus-sign{background-position:-24px -96px}.icon-remove-sign{background-position:-48px -96px}.icon-ok-sign{background-position:-72px -96px}.icon-question-sign{background-position:-96px -96px}.icon-info-sign{background-position:-120px -96px}.icon-screenshot{background-position:-144px -96px}.icon-remove-circle{background-position:-168px -96px}.icon-ok-circle{background-position:-192px -96px}.icon-ban-circle{background-position:-216px -96px}.icon-arrow-left{background-position:-240px -96px}.icon-arrow-right{background-position:-264px -96px}.icon-arrow-up{background-position:-289px -96px}.icon-arrow-down{background-position:-312px -96px}.icon-share-alt{background-position:-336px -96px}.icon-resize-full{background-position:-360px -96px}.icon-resize-small{background-position:-384px -96px}.icon-plus{background-position:-408px -96px}.icon-minus{background-position:-433px -96px}.icon-asterisk{background-position:-456px -96px}.icon-exclamation-sign{background-position:0 -120px}.icon-gift{background-position:-24px -120px}.icon-leaf{background-position:-48px -120px}.icon-fire{background-position:-72px -120px}.icon-eye-open{background-position:-96px -120px}.icon-eye-close{background-position:-120px -120px}.icon-warning-sign{background-position:-144px -120px}.icon-plane{background-position:-168px -120px}.icon-calendar{background-position:-192px -120px}.icon-random{width:16px;background-position:-216px -120px}.icon-comment{background-position:-240px -120px}.icon-magnet{background-position:-264px -120px}.icon-chevron-up{background-position:-288px -120px}.icon-chevron-down{background-position:-313px -119px}.icon-retweet{background-position:-336px -120px}.icon-shopping-cart{background-position:-360px -120px}.icon-folder-close{width:16px;background-position:-384px -120px}.icon-folder-open{width:16px;background-position:-408px -120px}.icon-resize-vertical{background-position:-432px -119px}.icon-resize-horizontal{background-position:-456px -118px}.icon-hdd{background-position:0 -144px}.icon-bullhorn{background-position:-24px -144px}.icon-bell{background-position:-48px -144px}.icon-certificate{background-position:-72px -144px}.icon-thumbs-up{background-position:-96px -144px}.icon-thumbs-down{background-position:-120px -144px}.icon-hand-right{background-position:-144px -144px}.icon-hand-left{background-position:-168px -144px}.icon-hand-up{background-position:-192px -144px}.icon-hand-down{background-position:-216px -144px}.icon-circle-arrow-right{background-position:-240px -144px}.icon-circle-arrow-left{background-position:-264px -144px}.icon-circle-arrow-up{background-position:-288px -144px}.icon-circle-arrow-down{background-position:-312px -144px}.icon-globe{background-position:-336px -144px}.icon-wrench{background-position:-360px -144px}.icon-tasks{background-position:-384px -144px}.icon-filter{background-position:-408px -144px}.icon-briefcase{background-position:-432px -144px}.icon-fullscreen{background-position:-456px -144px}.dropup,.dropdown{position:relative}.dropdown-toggle{*margin-bottom:-3px}.dropdown-toggle:active,.open .dropdown-toggle{outline:0}.caret{display:inline-block;width:0;height:0;vertical-align:top;border-top:4px solid #000;border-right:4px solid transparent;border-left:4px solid transparent;content:""}.dropdown .caret{margin-top:8px;margin-left:2px}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);*border-right-width:2px;*border-bottom-width:2px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);-moz-box-shadow:0 5px 10px rgba(0,0,0,0.2);box-shadow:0 5px 10px rgba(0,0,0,0.2);-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{*width:100%;height:1px;margin:9px 1px;*margin:-5px 0 5px;overflow:hidden;background-color:#e5e5e5;border-bottom:1px solid #fff}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:normal;line-height:20px;color:#333;white-space:nowrap}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus,.dropdown-submenu:hover>a,.dropdown-submenu:focus>a{color:#fff;text-decoration:none;background-color:#0081c2;background-image:-moz-linear-gradient(top,#08c,#0077b3);background-image:-webkit-gradient(linear,0 0,0 100%,from(#08c),to(#0077b3));background-image:-webkit-linear-gradient(top,#08c,#0077b3);background-image:-o-linear-gradient(top,#08c,#0077b3);background-image:linear-gradient(to bottom,#08c,#0077b3);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc',endColorstr='#ff0077b3',GradientType=0)}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{color:#fff;text-decoration:none;background-color:#0081c2;background-image:-moz-linear-gradient(top,#08c,#0077b3);background-image:-webkit-gradient(linear,0 0,0 100%,from(#08c),to(#0077b3));background-image:-webkit-linear-gradient(top,#08c,#0077b3);background-image:-o-linear-gradient(top,#08c,#0077b3);background-image:linear-gradient(to bottom,#08c,#0077b3);background-repeat:repeat-x;outline:0;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc',endColorstr='#ff0077b3',GradientType=0)}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{color:#999}.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{text-decoration:none;cursor:default;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open{*z-index:1000}.open>.dropdown-menu{display:block}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px solid #000;content:""}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:1px}.dropdown-submenu{position:relative}.dropdown-submenu>.dropdown-menu{top:0;left:100%;margin-top:-6px;margin-left:-1px;-webkit-border-radius:0 6px 6px 6px;-moz-border-radius:0 6px 6px 6px;border-radius:0 6px 6px 6px}.dropdown-submenu:hover>.dropdown-menu{display:block}.dropup .dropdown-submenu>.dropdown-menu{top:auto;bottom:0;margin-top:0;margin-bottom:-2px;-webkit-border-radius:5px 5px 5px 0;-moz-border-radius:5px 5px 5px 0;border-radius:5px 5px 5px 0}.dropdown-submenu>a:after{display:block;float:right;width:0;height:0;margin-top:5px;margin-right:-10px;border-color:transparent;border-left-color:#ccc;border-style:solid;border-width:5px 0 5px 5px;content:" "}.dropdown-submenu:hover>a:after{border-left-color:#fff}.dropdown-submenu.pull-left{float:none}.dropdown-submenu.pull-left>.dropdown-menu{left:-100%;margin-left:10px;-webkit-border-radius:6px 0 6px 6px;-moz-border-radius:6px 0 6px 6px;border-radius:6px 0 6px 6px}.dropdown .dropdown-menu .nav-header{padding-right:20px;padding-left:20px}.typeahead{z-index:1051;margin-top:2px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.05);box-shadow:inset 0 1px 1px rgba(0,0,0,0.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,0.15)}.well-large{padding:24px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.well-small{padding:9px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.fade{opacity:0;-webkit-transition:opacity .15s linear;-moz-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{position:relative;height:0;overflow:hidden;-webkit-transition:height .35s ease;-moz-transition:height .35s ease;-o-transition:height .35s ease;transition:height .35s ease}.collapse.in{height:auto}.close{float:right;font-size:20px;font-weight:bold;line-height:20px;color:#000;text-shadow:0 1px 0 #fff;opacity:.2;filter:alpha(opacity=20)}.close:hover,.close:focus{color:#000;text-decoration:none;cursor:pointer;opacity:.4;filter:alpha(opacity=40)}button.close{padding:0;cursor:pointer;background:transparent;border:0;-webkit-appearance:none}.btn{display:inline-block;*display:inline;padding:4px 12px;margin-bottom:0;*margin-left:.3em;font-size:14px;line-height:20px;color:#333;text-align:center;text-shadow:0 1px 1px rgba(255,255,255,0.75);vertical-align:middle;cursor:pointer;background-color:#f5f5f5;*background-color:#e6e6e6;background-image:-moz-linear-gradient(top,#fff,#e6e6e6);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fff),to(#e6e6e6));background-image:-webkit-linear-gradient(top,#fff,#e6e6e6);background-image:-o-linear-gradient(top,#fff,#e6e6e6);background-image:linear-gradient(to bottom,#fff,#e6e6e6);background-repeat:repeat-x;border:1px solid #ccc;*border:0;border-color:#e6e6e6 #e6e6e6 #bfbfbf;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);border-bottom-color:#b3b3b3;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff',endColorstr='#ffe6e6e6',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);*zoom:1;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05)}.btn:hover,.btn:focus,.btn:active,.btn.active,.btn.disabled,.btn[disabled]{color:#333;background-color:#e6e6e6;*background-color:#d9d9d9}.btn:active,.btn.active{background-color:#ccc \9}.btn:first-child{*margin-left:0}.btn:hover,.btn:focus{color:#333;text-decoration:none;background-position:0 -15px;-webkit-transition:background-position .1s linear;-moz-transition:background-position .1s linear;-o-transition:background-position .1s linear;transition:background-position .1s linear}.btn:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn.active,.btn:active{background-image:none;outline:0;-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05)}.btn.disabled,.btn[disabled]{cursor:default;background-image:none;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.btn-large{padding:11px 19px;font-size:17.5px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.btn-large [class^="icon-"],.btn-large [class*=" icon-"]{margin-top:4px}.btn-small{padding:2px 10px;font-size:11.9px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.btn-small [class^="icon-"],.btn-small [class*=" icon-"]{margin-top:0}.btn-mini [class^="icon-"],.btn-mini [class*=" icon-"]{margin-top:-1px}.btn-mini{padding:0 6px;font-size:10.5px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.btn-block{display:block;width:100%;padding-right:0;padding-left:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.btn-block+.btn-block{margin-top:5px}input[type="submit"].btn-block,input[type="reset"].btn-block,input[type="button"].btn-block{width:100%}.btn-primary.active,.btn-warning.active,.btn-danger.active,.btn-success.active,.btn-info.active,.btn-inverse.active{color:rgba(255,255,255,0.75)}.btn-primary{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#006dcc;*background-color:#04c;background-image:-moz-linear-gradient(top,#08c,#04c);background-image:-webkit-gradient(linear,0 0,0 100%,from(#08c),to(#04c));background-image:-webkit-linear-gradient(top,#08c,#04c);background-image:-o-linear-gradient(top,#08c,#04c);background-image:linear-gradient(to bottom,#08c,#04c);background-repeat:repeat-x;border-color:#04c #04c #002a80;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc',endColorstr='#ff0044cc',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-primary:hover,.btn-primary:focus,.btn-primary:active,.btn-primary.active,.btn-primary.disabled,.btn-primary[disabled]{color:#fff;background-color:#04c;*background-color:#003bb3}.btn-primary:active,.btn-primary.active{background-color:#039 \9}.btn-warning{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#faa732;*background-color:#f89406;background-image:-moz-linear-gradient(top,#fbb450,#f89406);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fbb450),to(#f89406));background-image:-webkit-linear-gradient(top,#fbb450,#f89406);background-image:-o-linear-gradient(top,#fbb450,#f89406);background-image:linear-gradient(to bottom,#fbb450,#f89406);background-repeat:repeat-x;border-color:#f89406 #f89406 #ad6704;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbb450',endColorstr='#fff89406',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-warning:hover,.btn-warning:focus,.btn-warning:active,.btn-warning.active,.btn-warning.disabled,.btn-warning[disabled]{color:#fff;background-color:#f89406;*background-color:#df8505}.btn-warning:active,.btn-warning.active{background-color:#c67605 \9}.btn-danger{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#da4f49;*background-color:#bd362f;background-image:-moz-linear-gradient(top,#ee5f5b,#bd362f);background-image:-webkit-gradient(linear,0 0,0 100%,from(#ee5f5b),to(#bd362f));background-image:-webkit-linear-gradient(top,#ee5f5b,#bd362f);background-image:-o-linear-gradient(top,#ee5f5b,#bd362f);background-image:linear-gradient(to bottom,#ee5f5b,#bd362f);background-repeat:repeat-x;border-color:#bd362f #bd362f #802420;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b',endColorstr='#ffbd362f',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-danger:hover,.btn-danger:focus,.btn-danger:active,.btn-danger.active,.btn-danger.disabled,.btn-danger[disabled]{color:#fff;background-color:#bd362f;*background-color:#a9302a}.btn-danger:active,.btn-danger.active{background-color:#942a25 \9}.btn-success{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#5bb75b;*background-color:#51a351;background-image:-moz-linear-gradient(top,#62c462,#51a351);background-image:-webkit-gradient(linear,0 0,0 100%,from(#62c462),to(#51a351));background-image:-webkit-linear-gradient(top,#62c462,#51a351);background-image:-o-linear-gradient(top,#62c462,#51a351);background-image:linear-gradient(to bottom,#62c462,#51a351);background-repeat:repeat-x;border-color:#51a351 #51a351 #387038;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462',endColorstr='#ff51a351',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-success:hover,.btn-success:focus,.btn-success:active,.btn-success.active,.btn-success.disabled,.btn-success[disabled]{color:#fff;background-color:#51a351;*background-color:#499249}.btn-success:active,.btn-success.active{background-color:#408140 \9}.btn-info{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#49afcd;*background-color:#2f96b4;background-image:-moz-linear-gradient(top,#5bc0de,#2f96b4);background-image:-webkit-gradient(linear,0 0,0 100%,from(#5bc0de),to(#2f96b4));background-image:-webkit-linear-gradient(top,#5bc0de,#2f96b4);background-image:-o-linear-gradient(top,#5bc0de,#2f96b4);background-image:linear-gradient(to bottom,#5bc0de,#2f96b4);background-repeat:repeat-x;border-color:#2f96b4 #2f96b4 #1f6377;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de',endColorstr='#ff2f96b4',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-info:hover,.btn-info:focus,.btn-info:active,.btn-info.active,.btn-info.disabled,.btn-info[disabled]{color:#fff;background-color:#2f96b4;*background-color:#2a85a0}.btn-info:active,.btn-info.active{background-color:#24748c \9}.btn-inverse{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#363636;*background-color:#222;background-image:-moz-linear-gradient(top,#444,#222);background-image:-webkit-gradient(linear,0 0,0 100%,from(#444),to(#222));background-image:-webkit-linear-gradient(top,#444,#222);background-image:-o-linear-gradient(top,#444,#222);background-image:linear-gradient(to bottom,#444,#222);background-repeat:repeat-x;border-color:#222 #222 #000;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff444444',endColorstr='#ff222222',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-inverse:hover,.btn-inverse:focus,.btn-inverse:active,.btn-inverse.active,.btn-inverse.disabled,.btn-inverse[disabled]{color:#fff;background-color:#222;*background-color:#151515}.btn-inverse:active,.btn-inverse.active{background-color:#080808 \9}button.btn,input[type="submit"].btn{*padding-top:3px;*padding-bottom:3px}button.btn::-moz-focus-inner,input[type="submit"].btn::-moz-focus-inner{padding:0;border:0}button.btn.btn-large,input[type="submit"].btn.btn-large{*padding-top:7px;*padding-bottom:7px}button.btn.btn-small,input[type="submit"].btn.btn-small{*padding-top:3px;*padding-bottom:3px}button.btn.btn-mini,input[type="submit"].btn.btn-mini{*padding-top:1px;*padding-bottom:1px}.btn-link,.btn-link:active,.btn-link[disabled]{background-color:transparent;background-image:none;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.btn-link{color:#08c;cursor:pointer;border-color:transparent;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-link:hover,.btn-link:focus{color:#005580;text-decoration:underline;background-color:transparent}.btn-link[disabled]:hover,.btn-link[disabled]:focus{color:#333;text-decoration:none}.btn-group{position:relative;display:inline-block;*display:inline;*margin-left:.3em;font-size:0;white-space:nowrap;vertical-align:middle;*zoom:1}.btn-group:first-child{*margin-left:0}.btn-group+.btn-group{margin-left:5px}.btn-toolbar{margin-top:10px;margin-bottom:10px;font-size:0}.btn-toolbar>.btn+.btn,.btn-toolbar>.btn-group+.btn,.btn-toolbar>.btn+.btn-group{margin-left:5px}.btn-group>.btn{position:relative;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-group>.btn+.btn{margin-left:-1px}.btn-group>.btn,.btn-group>.dropdown-menu,.btn-group>.popover{font-size:14px}.btn-group>.btn-mini{font-size:10.5px}.btn-group>.btn-small{font-size:11.9px}.btn-group>.btn-large{font-size:17.5px}.btn-group>.btn:first-child{margin-left:0;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-bottomleft:4px;-moz-border-radius-topleft:4px}.btn-group>.btn:last-child,.btn-group>.dropdown-toggle{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-topright:4px;-moz-border-radius-bottomright:4px}.btn-group>.btn.large:first-child{margin-left:0;-webkit-border-bottom-left-radius:6px;border-bottom-left-radius:6px;-webkit-border-top-left-radius:6px;border-top-left-radius:6px;-moz-border-radius-bottomleft:6px;-moz-border-radius-topleft:6px}.btn-group>.btn.large:last-child,.btn-group>.large.dropdown-toggle{-webkit-border-top-right-radius:6px;border-top-right-radius:6px;-webkit-border-bottom-right-radius:6px;border-bottom-right-radius:6px;-moz-border-radius-topright:6px;-moz-border-radius-bottomright:6px}.btn-group>.btn:hover,.btn-group>.btn:focus,.btn-group>.btn:active,.btn-group>.btn.active{z-index:2}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{*padding-top:5px;padding-right:8px;*padding-bottom:5px;padding-left:8px;-webkit-box-shadow:inset 1px 0 0 rgba(255,255,255,0.125),inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 1px 0 0 rgba(255,255,255,0.125),inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 1px 0 0 rgba(255,255,255,0.125),inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05)}.btn-group>.btn-mini+.dropdown-toggle{*padding-top:2px;padding-right:5px;*padding-bottom:2px;padding-left:5px}.btn-group>.btn-small+.dropdown-toggle{*padding-top:5px;*padding-bottom:4px}.btn-group>.btn-large+.dropdown-toggle{*padding-top:7px;padding-right:12px;*padding-bottom:7px;padding-left:12px}.btn-group.open .dropdown-toggle{background-image:none;-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05)}.btn-group.open .btn.dropdown-toggle{background-color:#e6e6e6}.btn-group.open .btn-primary.dropdown-toggle{background-color:#04c}.btn-group.open .btn-warning.dropdown-toggle{background-color:#f89406}.btn-group.open .btn-danger.dropdown-toggle{background-color:#bd362f}.btn-group.open .btn-success.dropdown-toggle{background-color:#51a351}.btn-group.open .btn-info.dropdown-toggle{background-color:#2f96b4}.btn-group.open .btn-inverse.dropdown-toggle{background-color:#222}.btn .caret{margin-top:8px;margin-left:0}.btn-large .caret{margin-top:6px}.btn-large .caret{border-top-width:5px;border-right-width:5px;border-left-width:5px}.btn-mini .caret,.btn-small .caret{margin-top:8px}.dropup .btn-large .caret{border-bottom-width:5px}.btn-primary .caret,.btn-warning .caret,.btn-danger .caret,.btn-info .caret,.btn-success .caret,.btn-inverse .caret{border-top-color:#fff;border-bottom-color:#fff}.btn-group-vertical{display:inline-block;*display:inline;*zoom:1}.btn-group-vertical>.btn{display:block;float:none;max-width:100%;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-group-vertical>.btn+.btn{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:first-child{-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0}.btn-group-vertical>.btn:last-child{-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px}.btn-group-vertical>.btn-large:first-child{-webkit-border-radius:6px 6px 0 0;-moz-border-radius:6px 6px 0 0;border-radius:6px 6px 0 0}.btn-group-vertical>.btn-large:last-child{-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px}.alert{padding:8px 35px 8px 14px;margin-bottom:20px;text-shadow:0 1px 0 rgba(255,255,255,0.5);background-color:#fcf8e3;border:1px solid #fbeed5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.alert,.alert h4{color:#c09853}.alert h4{margin:0}.alert .close{position:relative;top:-2px;right:-21px;line-height:20px}.alert-success{color:#468847;background-color:#dff0d8;border-color:#d6e9c6}.alert-success h4{color:#468847}.alert-danger,.alert-error{color:#b94a48;background-color:#f2dede;border-color:#eed3d7}.alert-danger h4,.alert-error h4{color:#b94a48}.alert-info{color:#3a87ad;background-color:#d9edf7;border-color:#bce8f1}.alert-info h4{color:#3a87ad}.alert-block{padding-top:14px;padding-bottom:14px}.alert-block>p,.alert-block>ul{margin-bottom:0}.alert-block p+p{margin-top:5px}.nav{margin-bottom:20px;margin-left:0;list-style:none}.nav>li>a{display:block}.nav>li>a:hover,.nav>li>a:focus{text-decoration:none;background-color:#eee}.nav>li>a>img{max-width:none}.nav>.pull-right{float:right}.nav-header{display:block;padding:3px 15px;font-size:11px;font-weight:bold;line-height:20px;color:#999;text-shadow:0 1px 0 rgba(255,255,255,0.5);text-transform:uppercase}.nav li+.nav-header{margin-top:9px}.nav-list{padding-right:15px;padding-left:15px;margin-bottom:0}.nav-list>li>a,.nav-list .nav-header{margin-right:-15px;margin-left:-15px;text-shadow:0 1px 0 rgba(255,255,255,0.5)}.nav-list>li>a{padding:3px 15px}.nav-list>.active>a,.nav-list>.active>a:hover,.nav-list>.active>a:focus{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.2);background-color:#08c}.nav-list [class^="icon-"],.nav-list [class*=" icon-"]{margin-right:2px}.nav-list .divider{*width:100%;height:1px;margin:9px 1px;*margin:-5px 0 5px;overflow:hidden;background-color:#e5e5e5;border-bottom:1px solid #fff}.nav-tabs,.nav-pills{*zoom:1}.nav-tabs:before,.nav-pills:before,.nav-tabs:after,.nav-pills:after{display:table;line-height:0;content:""}.nav-tabs:after,.nav-pills:after{clear:both}.nav-tabs>li,.nav-pills>li{float:left}.nav-tabs>li>a,.nav-pills>li>a{padding-right:12px;padding-left:12px;margin-right:2px;line-height:14px}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{margin-bottom:-1px}.nav-tabs>li>a{padding-top:8px;padding-bottom:8px;line-height:20px;border:1px solid transparent;-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover,.nav-tabs>li>a:focus{border-color:#eee #eee #ddd}.nav-tabs>.active>a,.nav-tabs>.active>a:hover,.nav-tabs>.active>a:focus{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-pills>li>a{padding-top:8px;padding-bottom:8px;margin-top:2px;margin-bottom:2px;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.nav-pills>.active>a,.nav-pills>.active>a:hover,.nav-pills>.active>a:focus{color:#fff;background-color:#08c}.nav-stacked>li{float:none}.nav-stacked>li>a{margin-right:0}.nav-tabs.nav-stacked{border-bottom:0}.nav-tabs.nav-stacked>li>a{border:1px solid #ddd;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.nav-tabs.nav-stacked>li:first-child>a{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topright:4px;-moz-border-radius-topleft:4px}.nav-tabs.nav-stacked>li:last-child>a{-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-moz-border-radius-bottomright:4px;-moz-border-radius-bottomleft:4px}.nav-tabs.nav-stacked>li>a:hover,.nav-tabs.nav-stacked>li>a:focus{z-index:2;border-color:#ddd}.nav-pills.nav-stacked>li>a{margin-bottom:3px}.nav-pills.nav-stacked>li:last-child>a{margin-bottom:1px}.nav-tabs .dropdown-menu{-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px}.nav-pills .dropdown-menu{-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.nav .dropdown-toggle .caret{margin-top:6px;border-top-color:#08c;border-bottom-color:#08c}.nav .dropdown-toggle:hover .caret,.nav .dropdown-toggle:focus .caret{border-top-color:#005580;border-bottom-color:#005580}.nav-tabs .dropdown-toggle .caret{margin-top:8px}.nav .active .dropdown-toggle .caret{border-top-color:#fff;border-bottom-color:#fff}.nav-tabs .active .dropdown-toggle .caret{border-top-color:#555;border-bottom-color:#555}.nav>.dropdown.active>a:hover,.nav>.dropdown.active>a:focus{cursor:pointer}.nav-tabs .open .dropdown-toggle,.nav-pills .open .dropdown-toggle,.nav>li.dropdown.open.active>a:hover,.nav>li.dropdown.open.active>a:focus{color:#fff;background-color:#999;border-color:#999}.nav li.dropdown.open .caret,.nav li.dropdown.open.active .caret,.nav li.dropdown.open a:hover .caret,.nav li.dropdown.open a:focus .caret{border-top-color:#fff;border-bottom-color:#fff;opacity:1;filter:alpha(opacity=100)}.tabs-stacked .open>a:hover,.tabs-stacked .open>a:focus{border-color:#999}.tabbable{*zoom:1}.tabbable:before,.tabbable:after{display:table;line-height:0;content:""}.tabbable:after{clear:both}.tab-content{overflow:auto}.tabs-below>.nav-tabs,.tabs-right>.nav-tabs,.tabs-left>.nav-tabs{border-bottom:0}.tab-content>.tab-pane,.pill-content>.pill-pane{display:none}.tab-content>.active,.pill-content>.active{display:block}.tabs-below>.nav-tabs{border-top:1px solid #ddd}.tabs-below>.nav-tabs>li{margin-top:-1px;margin-bottom:0}.tabs-below>.nav-tabs>li>a{-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px}.tabs-below>.nav-tabs>li>a:hover,.tabs-below>.nav-tabs>li>a:focus{border-top-color:#ddd;border-bottom-color:transparent}.tabs-below>.nav-tabs>.active>a,.tabs-below>.nav-tabs>.active>a:hover,.tabs-below>.nav-tabs>.active>a:focus{border-color:transparent #ddd #ddd #ddd}.tabs-left>.nav-tabs>li,.tabs-right>.nav-tabs>li{float:none}.tabs-left>.nav-tabs>li>a,.tabs-right>.nav-tabs>li>a{min-width:74px;margin-right:0;margin-bottom:3px}.tabs-left>.nav-tabs{float:left;margin-right:19px;border-right:1px solid #ddd}.tabs-left>.nav-tabs>li>a{margin-right:-1px;-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.tabs-left>.nav-tabs>li>a:hover,.tabs-left>.nav-tabs>li>a:focus{border-color:#eee #ddd #eee #eee}.tabs-left>.nav-tabs .active>a,.tabs-left>.nav-tabs .active>a:hover,.tabs-left>.nav-tabs .active>a:focus{border-color:#ddd transparent #ddd #ddd;*border-right-color:#fff}.tabs-right>.nav-tabs{float:right;margin-left:19px;border-left:1px solid #ddd}.tabs-right>.nav-tabs>li>a{margin-left:-1px;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.tabs-right>.nav-tabs>li>a:hover,.tabs-right>.nav-tabs>li>a:focus{border-color:#eee #eee #eee #ddd}.tabs-right>.nav-tabs .active>a,.tabs-right>.nav-tabs .active>a:hover,.tabs-right>.nav-tabs .active>a:focus{border-color:#ddd #ddd #ddd transparent;*border-left-color:#fff}.nav>.disabled>a{color:#999}.nav>.disabled>a:hover,.nav>.disabled>a:focus{text-decoration:none;cursor:default;background-color:transparent}.navbar{*position:relative;*z-index:2;margin-bottom:20px;overflow:visible}.navbar-inner{min-height:40px;padding-right:20px;padding-left:20px;background-color:#fafafa;background-image:-moz-linear-gradient(top,#fff,#f2f2f2);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fff),to(#f2f2f2));background-image:-webkit-linear-gradient(top,#fff,#f2f2f2);background-image:-o-linear-gradient(top,#fff,#f2f2f2);background-image:linear-gradient(to bottom,#fff,#f2f2f2);background-repeat:repeat-x;border:1px solid #d4d4d4;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff',endColorstr='#fff2f2f2',GradientType=0);*zoom:1;-webkit-box-shadow:0 1px 4px rgba(0,0,0,0.065);-moz-box-shadow:0 1px 4px rgba(0,0,0,0.065);box-shadow:0 1px 4px rgba(0,0,0,0.065)}.navbar-inner:before,.navbar-inner:after{display:table;line-height:0;content:""}.navbar-inner:after{clear:both}.navbar .container{width:auto}.nav-collapse.collapse{height:auto;overflow:visible}.navbar .brand{display:block;float:left;padding:10px 20px 10px;margin-left:-20px;font-size:20px;font-weight:200;color:#777;text-shadow:0 1px 0 #fff}.navbar .brand:hover,.navbar .brand:focus{text-decoration:none}.navbar-text{margin-bottom:0;line-height:40px;color:#777}.navbar-link{color:#777}.navbar-link:hover,.navbar-link:focus{color:#333}.navbar .divider-vertical{height:40px;margin:0 9px;border-right:1px solid #fff;border-left:1px solid #f2f2f2}.navbar .btn,.navbar .btn-group{margin-top:5px}.navbar .btn-group .btn,.navbar .input-prepend .btn,.navbar .input-append .btn,.navbar .input-prepend .btn-group,.navbar .input-append .btn-group{margin-top:0}.navbar-form{margin-bottom:0;*zoom:1}.navbar-form:before,.navbar-form:after{display:table;line-height:0;content:""}.navbar-form:after{clear:both}.navbar-form input,.navbar-form select,.navbar-form .radio,.navbar-form .checkbox{margin-top:5px}.navbar-form input,.navbar-form select,.navbar-form .btn{display:inline-block;margin-bottom:0}.navbar-form input[type="image"],.navbar-form input[type="checkbox"],.navbar-form input[type="radio"]{margin-top:3px}.navbar-form .input-append,.navbar-form .input-prepend{margin-top:5px;white-space:nowrap}.navbar-form .input-append input,.navbar-form .input-prepend input{margin-top:0}.navbar-search{position:relative;float:left;margin-top:5px;margin-bottom:0}.navbar-search .search-query{padding:4px 14px;margin-bottom:0;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:13px;font-weight:normal;line-height:1;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px}.navbar-static-top{position:static;margin-bottom:0}.navbar-static-top .navbar-inner{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;z-index:1030;margin-bottom:0}.navbar-fixed-top .navbar-inner,.navbar-static-top .navbar-inner{border-width:0 0 1px}.navbar-fixed-bottom .navbar-inner{border-width:1px 0 0}.navbar-fixed-top .navbar-inner,.navbar-fixed-bottom .navbar-inner{padding-right:0;padding-left:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:940px}.navbar-fixed-top{top:0}.navbar-fixed-top .navbar-inner,.navbar-static-top .navbar-inner{-webkit-box-shadow:0 1px 10px rgba(0,0,0,0.1);-moz-box-shadow:0 1px 10px rgba(0,0,0,0.1);box-shadow:0 1px 10px rgba(0,0,0,0.1)}.navbar-fixed-bottom{bottom:0}.navbar-fixed-bottom .navbar-inner{-webkit-box-shadow:0 -1px 10px rgba(0,0,0,0.1);-moz-box-shadow:0 -1px 10px rgba(0,0,0,0.1);box-shadow:0 -1px 10px rgba(0,0,0,0.1)}.navbar .nav{position:relative;left:0;display:block;float:left;margin:0 10px 0 0}.navbar .nav.pull-right{float:right;margin-right:0}.navbar .nav>li{float:left}.navbar .nav>li>a{float:none;padding:10px 15px 10px;color:#777;text-decoration:none;text-shadow:0 1px 0 #fff}.navbar .nav .dropdown-toggle .caret{margin-top:8px}.navbar .nav>li>a:focus,.navbar .nav>li>a:hover{color:#333;text-decoration:none;background-color:transparent}.navbar .nav>.active>a,.navbar .nav>.active>a:hover,.navbar .nav>.active>a:focus{color:#555;text-decoration:none;background-color:#e5e5e5;-webkit-box-shadow:inset 0 3px 8px rgba(0,0,0,0.125);-moz-box-shadow:inset 0 3px 8px rgba(0,0,0,0.125);box-shadow:inset 0 3px 8px rgba(0,0,0,0.125)}.navbar .btn-navbar{display:none;float:right;padding:7px 10px;margin-right:5px;margin-left:5px;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#ededed;*background-color:#e5e5e5;background-image:-moz-linear-gradient(top,#f2f2f2,#e5e5e5);background-image:-webkit-gradient(linear,0 0,0 100%,from(#f2f2f2),to(#e5e5e5));background-image:-webkit-linear-gradient(top,#f2f2f2,#e5e5e5);background-image:-o-linear-gradient(top,#f2f2f2,#e5e5e5);background-image:linear-gradient(to bottom,#f2f2f2,#e5e5e5);background-repeat:repeat-x;border-color:#e5e5e5 #e5e5e5 #bfbfbf;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2f2f2',endColorstr='#ffe5e5e5',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.075);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.075);box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.075)}.navbar .btn-navbar:hover,.navbar .btn-navbar:focus,.navbar .btn-navbar:active,.navbar .btn-navbar.active,.navbar .btn-navbar.disabled,.navbar .btn-navbar[disabled]{color:#fff;background-color:#e5e5e5;*background-color:#d9d9d9}.navbar .btn-navbar:active,.navbar .btn-navbar.active{background-color:#ccc \9}.navbar .btn-navbar .icon-bar{display:block;width:18px;height:2px;background-color:#f5f5f5;-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px;-webkit-box-shadow:0 1px 0 rgba(0,0,0,0.25);-moz-box-shadow:0 1px 0 rgba(0,0,0,0.25);box-shadow:0 1px 0 rgba(0,0,0,0.25)}.btn-navbar .icon-bar+.icon-bar{margin-top:3px}.navbar .nav>li>.dropdown-menu:before{position:absolute;top:-7px;left:9px;display:inline-block;border-right:7px solid transparent;border-bottom:7px solid #ccc;border-left:7px solid transparent;border-bottom-color:rgba(0,0,0,0.2);content:''}.navbar .nav>li>.dropdown-menu:after{position:absolute;top:-6px;left:10px;display:inline-block;border-right:6px solid transparent;border-bottom:6px solid #fff;border-left:6px solid transparent;content:''}.navbar-fixed-bottom .nav>li>.dropdown-menu:before{top:auto;bottom:-7px;border-top:7px solid #ccc;border-bottom:0;border-top-color:rgba(0,0,0,0.2)}.navbar-fixed-bottom .nav>li>.dropdown-menu:after{top:auto;bottom:-6px;border-top:6px solid #fff;border-bottom:0}.navbar .nav li.dropdown>a:hover .caret,.navbar .nav li.dropdown>a:focus .caret{border-top-color:#333;border-bottom-color:#333}.navbar .nav li.dropdown.open>.dropdown-toggle,.navbar .nav li.dropdown.active>.dropdown-toggle,.navbar .nav li.dropdown.open.active>.dropdown-toggle{color:#555;background-color:#e5e5e5}.navbar .nav li.dropdown>.dropdown-toggle .caret{border-top-color:#777;border-bottom-color:#777}.navbar .nav li.dropdown.open>.dropdown-toggle .caret,.navbar .nav li.dropdown.active>.dropdown-toggle .caret,.navbar .nav li.dropdown.open.active>.dropdown-toggle .caret{border-top-color:#555;border-bottom-color:#555}.navbar .pull-right>li>.dropdown-menu,.navbar .nav>li>.dropdown-menu.pull-right{right:0;left:auto}.navbar .pull-right>li>.dropdown-menu:before,.navbar .nav>li>.dropdown-menu.pull-right:before{right:12px;left:auto}.navbar .pull-right>li>.dropdown-menu:after,.navbar .nav>li>.dropdown-menu.pull-right:after{right:13px;left:auto}.navbar .pull-right>li>.dropdown-menu .dropdown-menu,.navbar .nav>li>.dropdown-menu.pull-right .dropdown-menu{right:100%;left:auto;margin-right:-1px;margin-left:0;-webkit-border-radius:6px 0 6px 6px;-moz-border-radius:6px 0 6px 6px;border-radius:6px 0 6px 6px}.navbar-inverse .navbar-inner{background-color:#1b1b1b;background-image:-moz-linear-gradient(top,#222,#111);background-image:-webkit-gradient(linear,0 0,0 100%,from(#222),to(#111));background-image:-webkit-linear-gradient(top,#222,#111);background-image:-o-linear-gradient(top,#222,#111);background-image:linear-gradient(to bottom,#222,#111);background-repeat:repeat-x;border-color:#252525;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff222222',endColorstr='#ff111111',GradientType=0)}.navbar-inverse .brand,.navbar-inverse .nav>li>a{color:#999;text-shadow:0 -1px 0 rgba(0,0,0,0.25)}.navbar-inverse .brand:hover,.navbar-inverse .nav>li>a:hover,.navbar-inverse .brand:focus,.navbar-inverse .nav>li>a:focus{color:#fff}.navbar-inverse .brand{color:#999}.navbar-inverse .navbar-text{color:#999}.navbar-inverse .nav>li>a:focus,.navbar-inverse .nav>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .nav .active>a,.navbar-inverse .nav .active>a:hover,.navbar-inverse .nav .active>a:focus{color:#fff;background-color:#111}.navbar-inverse .navbar-link{color:#999}.navbar-inverse .navbar-link:hover,.navbar-inverse .navbar-link:focus{color:#fff}.navbar-inverse .divider-vertical{border-right-color:#222;border-left-color:#111}.navbar-inverse .nav li.dropdown.open>.dropdown-toggle,.navbar-inverse .nav li.dropdown.active>.dropdown-toggle,.navbar-inverse .nav li.dropdown.open.active>.dropdown-toggle{color:#fff;background-color:#111}.navbar-inverse .nav li.dropdown>a:hover .caret,.navbar-inverse .nav li.dropdown>a:focus .caret{border-top-color:#fff;border-bottom-color:#fff}.navbar-inverse .nav li.dropdown>.dropdown-toggle .caret{border-top-color:#999;border-bottom-color:#999}.navbar-inverse .nav li.dropdown.open>.dropdown-toggle .caret,.navbar-inverse .nav li.dropdown.active>.dropdown-toggle .caret,.navbar-inverse .nav li.dropdown.open.active>.dropdown-toggle .caret{border-top-color:#fff;border-bottom-color:#fff}.navbar-inverse .navbar-search .search-query{color:#fff;background-color:#515151;border-color:#111;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1),0 1px 0 rgba(255,255,255,0.15);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1),0 1px 0 rgba(255,255,255,0.15);box-shadow:inset 0 1px 2px rgba(0,0,0,0.1),0 1px 0 rgba(255,255,255,0.15);-webkit-transition:none;-moz-transition:none;-o-transition:none;transition:none}.navbar-inverse .navbar-search .search-query:-moz-placeholder{color:#ccc}.navbar-inverse .navbar-search .search-query:-ms-input-placeholder{color:#ccc}.navbar-inverse .navbar-search .search-query::-webkit-input-placeholder{color:#ccc}.navbar-inverse .navbar-search .search-query:focus,.navbar-inverse .navbar-search .search-query.focused{padding:5px 15px;color:#333;text-shadow:0 1px 0 #fff;background-color:#fff;border:0;outline:0;-webkit-box-shadow:0 0 3px rgba(0,0,0,0.15);-moz-box-shadow:0 0 3px rgba(0,0,0,0.15);box-shadow:0 0 3px rgba(0,0,0,0.15)}.navbar-inverse .btn-navbar{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#0e0e0e;*background-color:#040404;background-image:-moz-linear-gradient(top,#151515,#040404);background-image:-webkit-gradient(linear,0 0,0 100%,from(#151515),to(#040404));background-image:-webkit-linear-gradient(top,#151515,#040404);background-image:-o-linear-gradient(top,#151515,#040404);background-image:linear-gradient(to bottom,#151515,#040404);background-repeat:repeat-x;border-color:#040404 #040404 #000;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff151515',endColorstr='#ff040404',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.navbar-inverse .btn-navbar:hover,.navbar-inverse .btn-navbar:focus,.navbar-inverse .btn-navbar:active,.navbar-inverse .btn-navbar.active,.navbar-inverse .btn-navbar.disabled,.navbar-inverse .btn-navbar[disabled]{color:#fff;background-color:#040404;*background-color:#000}.navbar-inverse .btn-navbar:active,.navbar-inverse .btn-navbar.active{background-color:#000 \9}.breadcrumb{padding:8px 15px;margin:0 0 20px;list-style:none;background-color:#f5f5f5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.breadcrumb>li{display:inline-block;*display:inline;text-shadow:0 1px 0 #fff;*zoom:1}.breadcrumb>li>.divider{padding:0 5px;color:#ccc}.breadcrumb>.active{color:#999}.pagination{margin:20px 0}.pagination ul{display:inline-block;*display:inline;margin-bottom:0;margin-left:0;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;*zoom:1;-webkit-box-shadow:0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:0 1px 2px rgba(0,0,0,0.05);box-shadow:0 1px 2px rgba(0,0,0,0.05)}.pagination ul>li{display:inline}.pagination ul>li>a,.pagination ul>li>span{float:left;padding:4px 12px;line-height:20px;text-decoration:none;background-color:#fff;border:1px solid #ddd;border-left-width:0}.pagination ul>li>a:hover,.pagination ul>li>a:focus,.pagination ul>.active>a,.pagination ul>.active>span{background-color:#f5f5f5}.pagination ul>.active>a,.pagination ul>.active>span{color:#999;cursor:default}.pagination ul>.disabled>span,.pagination ul>.disabled>a,.pagination ul>.disabled>a:hover,.pagination ul>.disabled>a:focus{color:#999;cursor:default;background-color:transparent}.pagination ul>li:first-child>a,.pagination ul>li:first-child>span{border-left-width:1px;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-bottomleft:4px;-moz-border-radius-topleft:4px}.pagination ul>li:last-child>a,.pagination ul>li:last-child>span{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-topright:4px;-moz-border-radius-bottomright:4px}.pagination-centered{text-align:center}.pagination-right{text-align:right}.pagination-large ul>li>a,.pagination-large ul>li>span{padding:11px 19px;font-size:17.5px}.pagination-large ul>li:first-child>a,.pagination-large ul>li:first-child>span{-webkit-border-bottom-left-radius:6px;border-bottom-left-radius:6px;-webkit-border-top-left-radius:6px;border-top-left-radius:6px;-moz-border-radius-bottomleft:6px;-moz-border-radius-topleft:6px}.pagination-large ul>li:last-child>a,.pagination-large ul>li:last-child>span{-webkit-border-top-right-radius:6px;border-top-right-radius:6px;-webkit-border-bottom-right-radius:6px;border-bottom-right-radius:6px;-moz-border-radius-topright:6px;-moz-border-radius-bottomright:6px}.pagination-mini ul>li:first-child>a,.pagination-small ul>li:first-child>a,.pagination-mini ul>li:first-child>span,.pagination-small ul>li:first-child>span{-webkit-border-bottom-left-radius:3px;border-bottom-left-radius:3px;-webkit-border-top-left-radius:3px;border-top-left-radius:3px;-moz-border-radius-bottomleft:3px;-moz-border-radius-topleft:3px}.pagination-mini ul>li:last-child>a,.pagination-small ul>li:last-child>a,.pagination-mini ul>li:last-child>span,.pagination-small ul>li:last-child>span{-webkit-border-top-right-radius:3px;border-top-right-radius:3px;-webkit-border-bottom-right-radius:3px;border-bottom-right-radius:3px;-moz-border-radius-topright:3px;-moz-border-radius-bottomright:3px}.pagination-small ul>li>a,.pagination-small ul>li>span{padding:2px 10px;font-size:11.9px}.pagination-mini ul>li>a,.pagination-mini ul>li>span{padding:0 6px;font-size:10.5px}.pager{margin:20px 0;text-align:center;list-style:none;*zoom:1}.pager:before,.pager:after{display:table;line-height:0;content:""}.pager:after{clear:both}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px}.pager li>a:hover,.pager li>a:focus{text-decoration:none;background-color:#f5f5f5}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:hover,.pager .disabled>a:focus,.pager .disabled>span{color:#999;cursor:default;background-color:#fff}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop,.modal-backdrop.fade.in{opacity:.8;filter:alpha(opacity=80)}.modal{position:fixed;top:10%;left:50%;z-index:1050;width:560px;margin-left:-280px;background-color:#fff;border:1px solid #999;border:1px solid rgba(0,0,0,0.3);*border:1px solid #999;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;outline:0;-webkit-box-shadow:0 3px 7px rgba(0,0,0,0.3);-moz-box-shadow:0 3px 7px rgba(0,0,0,0.3);box-shadow:0 3px 7px rgba(0,0,0,0.3);-webkit-background-clip:padding-box;-moz-background-clip:padding-box;background-clip:padding-box}.modal.fade{top:-25%;-webkit-transition:opacity .3s linear,top .3s ease-out;-moz-transition:opacity .3s linear,top .3s ease-out;-o-transition:opacity .3s linear,top .3s ease-out;transition:opacity .3s linear,top .3s ease-out}.modal.fade.in{top:10%}.modal-header{padding:9px 15px;border-bottom:1px solid #eee}.modal-header .close{margin-top:2px}.modal-header h3{margin:0;line-height:30px}.modal-body{position:relative;max-height:400px;padding:15px;overflow-y:auto}.modal-form{margin-bottom:0}.modal-footer{padding:14px 15px 15px;margin-bottom:0;text-align:right;background-color:#f5f5f5;border-top:1px solid #ddd;-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px;*zoom:1;-webkit-box-shadow:inset 0 1px 0 #fff;-moz-box-shadow:inset 0 1px 0 #fff;box-shadow:inset 0 1px 0 #fff}.modal-footer:before,.modal-footer:after{display:table;line-height:0;content:""}.modal-footer:after{clear:both}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.tooltip{position:absolute;z-index:1030;display:block;font-size:11px;line-height:1.4;opacity:0;filter:alpha(opacity=0);visibility:visible}.tooltip.in{opacity:.8;filter:alpha(opacity=80)}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip-inner{max-width:200px;padding:8px;color:#fff;text-align:center;text-decoration:none;background-color:#000;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-top-color:#000;border-width:5px 5px 0}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-right-color:#000;border-width:5px 5px 5px 0}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-left-color:#000;border-width:5px 0 5px 5px}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-bottom-color:#000;border-width:0 5px 5px}.popover{position:absolute;top:0;left:0;z-index:1010;display:none;max-width:276px;padding:1px;text-align:left;white-space:normal;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);-moz-box-shadow:0 5px 10px rgba(0,0,0,0.2);box-shadow:0 5px 10px rgba(0,0,0,0.2);-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{padding:8px 14px;margin:0;font-size:14px;font-weight:normal;line-height:18px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;-webkit-border-radius:5px 5px 0 0;-moz-border-radius:5px 5px 0 0;border-radius:5px 5px 0 0}.popover-title:empty{display:none}.popover-content{padding:9px 14px}.popover .arrow,.popover .arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover .arrow{border-width:11px}.popover .arrow:after{border-width:10px;content:""}.popover.top .arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,0.25);border-bottom-width:0}.popover.top .arrow:after{bottom:1px;margin-left:-10px;border-top-color:#fff;border-bottom-width:0}.popover.right .arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,0.25);border-left-width:0}.popover.right .arrow:after{bottom:-10px;left:1px;border-right-color:#fff;border-left-width:0}.popover.bottom .arrow{top:-11px;left:50%;margin-left:-11px;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,0.25);border-top-width:0}.popover.bottom .arrow:after{top:1px;margin-left:-10px;border-bottom-color:#fff;border-top-width:0}.popover.left .arrow{top:50%;right:-11px;margin-top:-11px;border-left-color:#999;border-left-color:rgba(0,0,0,0.25);border-right-width:0}.popover.left .arrow:after{right:1px;bottom:-10px;border-left-color:#fff;border-right-width:0}.thumbnails{margin-left:-20px;list-style:none;*zoom:1}.thumbnails:before,.thumbnails:after{display:table;line-height:0;content:""}.thumbnails:after{clear:both}.row-fluid .thumbnails{margin-left:0}.thumbnails>li{float:left;margin-bottom:20px;margin-left:20px}.thumbnail{display:block;padding:4px;line-height:20px;border:1px solid #ddd;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:0 1px 3px rgba(0,0,0,0.055);-moz-box-shadow:0 1px 3px rgba(0,0,0,0.055);box-shadow:0 1px 3px rgba(0,0,0,0.055);-webkit-transition:all .2s ease-in-out;-moz-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}a.thumbnail:hover,a.thumbnail:focus{border-color:#08c;-webkit-box-shadow:0 1px 4px rgba(0,105,214,0.25);-moz-box-shadow:0 1px 4px rgba(0,105,214,0.25);box-shadow:0 1px 4px rgba(0,105,214,0.25)}.thumbnail>img{display:block;max-width:100%;margin-right:auto;margin-left:auto}.thumbnail .caption{padding:9px;color:#555}.media,.media-body{overflow:hidden;*overflow:visible;zoom:1}.media,.media .media{margin-top:15px}.media:first-child{margin-top:0}.media-object{display:block}.media-heading{margin:0 0 5px}.media>.pull-left{margin-right:10px}.media>.pull-right{margin-left:10px}.media-list{margin-left:0;list-style:none}.label,.badge{display:inline-block;padding:2px 4px;font-size:11.844px;font-weight:bold;line-height:14px;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);white-space:nowrap;vertical-align:baseline;background-color:#999}.label{-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.badge{padding-right:9px;padding-left:9px;-webkit-border-radius:9px;-moz-border-radius:9px;border-radius:9px}.label:empty,.badge:empty{display:none}a.label:hover,a.label:focus,a.badge:hover,a.badge:focus{color:#fff;text-decoration:none;cursor:pointer}.label-important,.badge-important{background-color:#b94a48}.label-important[href],.badge-important[href]{background-color:#953b39}.label-warning,.badge-warning{background-color:#f89406}.label-warning[href],.badge-warning[href]{background-color:#c67605}.label-success,.badge-success{background-color:#468847}.label-success[href],.badge-success[href]{background-color:#356635}.label-info,.badge-info{background-color:#3a87ad}.label-info[href],.badge-info[href]{background-color:#2d6987}.label-inverse,.badge-inverse{background-color:#333}.label-inverse[href],.badge-inverse[href]{background-color:#1a1a1a}.btn .label,.btn .badge{position:relative;top:-1px}.btn-mini .label,.btn-mini .badge{top:0}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-moz-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-ms-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:0 0}to{background-position:40px 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f7f7f7;background-image:-moz-linear-gradient(top,#f5f5f5,#f9f9f9);background-image:-webkit-gradient(linear,0 0,0 100%,from(#f5f5f5),to(#f9f9f9));background-image:-webkit-linear-gradient(top,#f5f5f5,#f9f9f9);background-image:-o-linear-gradient(top,#f5f5f5,#f9f9f9);background-image:linear-gradient(to bottom,#f5f5f5,#f9f9f9);background-repeat:repeat-x;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5',endColorstr='#fff9f9f9',GradientType=0);-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);box-shadow:inset 0 1px 2px rgba(0,0,0,0.1)}.progress .bar{float:left;width:0;height:100%;font-size:12px;color:#fff;text-align:center;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#0e90d2;background-image:-moz-linear-gradient(top,#149bdf,#0480be);background-image:-webkit-gradient(linear,0 0,0 100%,from(#149bdf),to(#0480be));background-image:-webkit-linear-gradient(top,#149bdf,#0480be);background-image:-o-linear-gradient(top,#149bdf,#0480be);background-image:linear-gradient(to bottom,#149bdf,#0480be);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff149bdf',endColorstr='#ff0480be',GradientType=0);-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);-moz-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-transition:width .6s ease;-moz-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress .bar+.bar{-webkit-box-shadow:inset 1px 0 0 rgba(0,0,0,0.15),inset 0 -1px 0 rgba(0,0,0,0.15);-moz-box-shadow:inset 1px 0 0 rgba(0,0,0,0.15),inset 0 -1px 0 rgba(0,0,0,0.15);box-shadow:inset 1px 0 0 rgba(0,0,0,0.15),inset 0 -1px 0 rgba(0,0,0,0.15)}.progress-striped .bar{background-color:#149bdf;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);-webkit-background-size:40px 40px;-moz-background-size:40px 40px;-o-background-size:40px 40px;background-size:40px 40px}.progress.active .bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-moz-animation:progress-bar-stripes 2s linear infinite;-ms-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-danger .bar,.progress .bar-danger{background-color:#dd514c;background-image:-moz-linear-gradient(top,#ee5f5b,#c43c35);background-image:-webkit-gradient(linear,0 0,0 100%,from(#ee5f5b),to(#c43c35));background-image:-webkit-linear-gradient(top,#ee5f5b,#c43c35);background-image:-o-linear-gradient(top,#ee5f5b,#c43c35);background-image:linear-gradient(to bottom,#ee5f5b,#c43c35);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b',endColorstr='#ffc43c35',GradientType=0)}.progress-danger.progress-striped .bar,.progress-striped .bar-danger{background-color:#ee5f5b;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-success .bar,.progress .bar-success{background-color:#5eb95e;background-image:-moz-linear-gradient(top,#62c462,#57a957);background-image:-webkit-gradient(linear,0 0,0 100%,from(#62c462),to(#57a957));background-image:-webkit-linear-gradient(top,#62c462,#57a957);background-image:-o-linear-gradient(top,#62c462,#57a957);background-image:linear-gradient(to bottom,#62c462,#57a957);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462',endColorstr='#ff57a957',GradientType=0)}.progress-success.progress-striped .bar,.progress-striped .bar-success{background-color:#62c462;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-info .bar,.progress .bar-info{background-color:#4bb1cf;background-image:-moz-linear-gradient(top,#5bc0de,#339bb9);background-image:-webkit-gradient(linear,0 0,0 100%,from(#5bc0de),to(#339bb9));background-image:-webkit-linear-gradient(top,#5bc0de,#339bb9);background-image:-o-linear-gradient(top,#5bc0de,#339bb9);background-image:linear-gradient(to bottom,#5bc0de,#339bb9);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de',endColorstr='#ff339bb9',GradientType=0)}.progress-info.progress-striped .bar,.progress-striped .bar-info{background-color:#5bc0de;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-warning .bar,.progress .bar-warning{background-color:#faa732;background-image:-moz-linear-gradient(top,#fbb450,#f89406);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fbb450),to(#f89406));background-image:-webkit-linear-gradient(top,#fbb450,#f89406);background-image:-o-linear-gradient(top,#fbb450,#f89406);background-image:linear-gradient(to bottom,#fbb450,#f89406);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbb450',endColorstr='#fff89406',GradientType=0)}.progress-warning.progress-striped .bar,.progress-striped .bar-warning{background-color:#fbb450;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.accordion{margin-bottom:20px}.accordion-group{margin-bottom:2px;border:1px solid #e5e5e5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.accordion-heading{border-bottom:0}.accordion-heading .accordion-toggle{display:block;padding:8px 15px}.accordion-toggle{cursor:pointer}.accordion-inner{padding:9px 15px;border-top:1px solid #e5e5e5}.carousel{position:relative;margin-bottom:20px;line-height:1}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;-moz-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>img,.carousel-inner>.item>a>img{display:block;line-height:1}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:40%;left:15px;width:40px;height:40px;margin-top:-20px;font-size:60px;font-weight:100;line-height:30px;color:#fff;text-align:center;background:#222;border:3px solid #fff;-webkit-border-radius:23px;-moz-border-radius:23px;border-radius:23px;opacity:.5;filter:alpha(opacity=50)}.carousel-control.right{right:15px;left:auto}.carousel-control:hover,.carousel-control:focus{color:#fff;text-decoration:none;opacity:.9;filter:alpha(opacity=90)}.carousel-indicators{position:absolute;top:15px;right:15px;z-index:5;margin:0;list-style:none}.carousel-indicators li{display:block;float:left;width:10px;height:10px;margin-left:5px;text-indent:-999px;background-color:#ccc;background-color:rgba(255,255,255,0.25);border-radius:5px}.carousel-indicators .active{background-color:#fff}.carousel-caption{position:absolute;right:0;bottom:0;left:0;padding:15px;background:#333;background:rgba(0,0,0,0.75)}.carousel-caption h4,.carousel-caption p{line-height:20px;color:#fff}.carousel-caption h4{margin:0 0 5px}.carousel-caption p{margin-bottom:0}.hero-unit{padding:60px;margin-bottom:30px;font-size:18px;font-weight:200;line-height:30px;color:inherit;background-color:#eee;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.hero-unit h1{margin-bottom:0;font-size:60px;line-height:1;letter-spacing:-1px;color:inherit}.hero-unit li{line-height:30px}.pull-right{float:right}.pull-left{float:left}.hide{display:none}.show{display:block}.invisible{visibility:hidden}.affix{position:fixed} diff --git a/docs/_static/bootstrap-2.3.2/img/glyphicons-halflings-white.png b/docs/_static/bootstrap-2.3.2/img/glyphicons-halflings-white.png new file mode 100644 index 0000000000000000000000000000000000000000..3bf6484a29d8da269f9bc874b25493a45fae3bae GIT binary patch literal 8777 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 B7G?kd literal 0 HcmV?d00001 diff --git a/docs/_static/bootstrap-2.3.2/img/glyphicons-halflings.png b/docs/_static/bootstrap-2.3.2/img/glyphicons-halflings.png new file mode 100644 index 0000000000000000000000000000000000000000..a9969993201f9cee63cf9f49217646347297b643 GIT binary patch literal 12799 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 literal 0 HcmV?d00001 diff --git a/docs/_static/bootstrap-2.3.2/js/bootstrap.js b/docs/_static/bootstrap-2.3.2/js/bootstrap.js new file mode 100644 index 0000000..638bb18 --- /dev/null +++ b/docs/_static/bootstrap-2.3.2/js/bootstrap.js @@ -0,0 +1,2287 @@ +/* =================================================== + * bootstrap-transition.js v2.3.2 + * http://twitter.github.com/bootstrap/javascript.html#transitions + * =================================================== + * Copyright 2012 Twitter, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ========================================================== */ + + +!function ($) { + + "use strict"; // jshint ;_; + + + /* CSS TRANSITION SUPPORT (http://www.modernizr.com/) + * ======================================================= */ + + $(function () { + + $.support.transition = (function () { + + var transitionEnd = (function () { + + var el = document.createElement('bootstrap') + , transEndEventNames = { + 'WebkitTransition' : 'webkitTransitionEnd' + , 'MozTransition' : 'transitionend' + , 'OTransition' : 'oTransitionEnd otransitionend' + , 'transition' : 'transitionend' + } + , name + + for (name in transEndEventNames){ + if (el.style[name] !== undefined) { + return transEndEventNames[name] + } + } + + }()) + + return transitionEnd && { + end: transitionEnd + } + + })() + + }) + +}(window.$jqTheme || window.jQuery); +/* ========================================================== + * bootstrap-alert.js v2.3.2 + * http://twitter.github.com/bootstrap/javascript.html#alerts + * ========================================================== + * Copyright 2012 Twitter, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ========================================================== */ + + +!function ($) { + + "use strict"; // jshint ;_; + + + /* ALERT CLASS DEFINITION + * ====================== */ + + var dismiss = '[data-dismiss="alert"]' + , Alert = function (el) { + $(el).on('click', dismiss, this.close) + } + + Alert.prototype.close = function (e) { + var $this = $(this) + , selector = $this.attr('data-target') + , $parent + + if (!selector) { + selector = $this.attr('href') + selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7 + } + + $parent = $(selector) + + e && e.preventDefault() + + $parent.length || ($parent = $this.hasClass('alert') ? $this : $this.parent()) + + $parent.trigger(e = $.Event('close')) + + if (e.isDefaultPrevented()) return + + $parent.removeClass('in') + + function removeElement() { + $parent + .trigger('closed') + .remove() + } + + $.support.transition && $parent.hasClass('fade') ? + $parent.on($.support.transition.end, removeElement) : + removeElement() + } + + + /* ALERT PLUGIN DEFINITION + * ======================= */ + + var old = $.fn.alert + + $.fn.alert = function (option) { + return this.each(function () { + var $this = $(this) + , data = $this.data('alert') + if (!data) $this.data('alert', (data = new Alert(this))) + if (typeof option == 'string') data[option].call($this) + }) + } + + $.fn.alert.Constructor = Alert + + + /* ALERT NO CONFLICT + * ================= */ + + $.fn.alert.noConflict = function () { + $.fn.alert = old + return this + } + + + /* ALERT DATA-API + * ============== */ + + $(document).on('click.alert.data-api', dismiss, Alert.prototype.close) + +}(window.$jqTheme || window.jQuery); +/* ============================================================ + * bootstrap-button.js v2.3.2 + * http://twitter.github.com/bootstrap/javascript.html#buttons + * ============================================================ + * Copyright 2012 Twitter, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============================================================ */ + + +!function ($) { + + "use strict"; // jshint ;_; + + + /* BUTTON PUBLIC CLASS DEFINITION + * ============================== */ + + var Button = function (element, options) { + this.$element = $(element) + this.options = $.extend({}, $.fn.button.defaults, options) + } + + Button.prototype.setState = function (state) { + var d = 'disabled' + , $el = this.$element + , data = $el.data() + , val = $el.is('input') ? 'val' : 'html' + + state = state + 'Text' + data.resetText || $el.data('resetText', $el[val]()) + + $el[val](data[state] || this.options[state]) + + // push to event loop to allow forms to submit + setTimeout(function () { + state == 'loadingText' ? + $el.addClass(d).attr(d, d) : + $el.removeClass(d).removeAttr(d) + }, 0) + } + + Button.prototype.toggle = function () { + var $parent = this.$element.closest('[data-toggle="buttons-radio"]') + + $parent && $parent + .find('.active') + .removeClass('active') + + this.$element.toggleClass('active') + } + + + /* BUTTON PLUGIN DEFINITION + * ======================== */ + + var old = $.fn.button + + $.fn.button = function (option) { + return this.each(function () { + var $this = $(this) + , data = $this.data('button') + , options = typeof option == 'object' && option + if (!data) $this.data('button', (data = new Button(this, options))) + if (option == 'toggle') data.toggle() + else if (option) data.setState(option) + }) + } + + $.fn.button.defaults = { + loadingText: 'loading...' + } + + $.fn.button.Constructor = Button + + + /* BUTTON NO CONFLICT + * ================== */ + + $.fn.button.noConflict = function () { + $.fn.button = old + return this + } + + + /* BUTTON DATA-API + * =============== */ + + $(document).on('click.button.data-api', '[data-toggle^=button]', function (e) { + var $btn = $(e.target) + if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn') + $btn.button('toggle') + }) + +}(window.$jqTheme || window.jQuery); +/* ========================================================== + * bootstrap-carousel.js v2.3.2 + * http://twitter.github.com/bootstrap/javascript.html#carousel + * ========================================================== + * Copyright 2012 Twitter, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ========================================================== */ + + +!function ($) { + + "use strict"; // jshint ;_; + + + /* CAROUSEL CLASS DEFINITION + * ========================= */ + + var Carousel = function (element, options) { + this.$element = $(element) + this.$indicators = this.$element.find('.carousel-indicators') + this.options = options + this.options.pause == 'hover' && this.$element + .on('mouseenter', $.proxy(this.pause, this)) + .on('mouseleave', $.proxy(this.cycle, this)) + } + + Carousel.prototype = { + + cycle: function (e) { + if (!e) this.paused = false + if (this.interval) clearInterval(this.interval); + this.options.interval + && !this.paused + && (this.interval = setInterval($.proxy(this.next, this), this.options.interval)) + return this + } + + , getActiveIndex: function () { + this.$active = this.$element.find('.item.active') + this.$items = this.$active.parent().children() + return this.$items.index(this.$active) + } + + , to: function (pos) { + var activeIndex = this.getActiveIndex() + , that = this + + if (pos > (this.$items.length - 1) || pos < 0) return + + if (this.sliding) { + return this.$element.one('slid', function () { + that.to(pos) + }) + } + + if (activeIndex == pos) { + return this.pause().cycle() + } + + return this.slide(pos > activeIndex ? 'next' : 'prev', $(this.$items[pos])) + } + + , pause: function (e) { + if (!e) this.paused = true + if (this.$element.find('.next, .prev').length && $.support.transition.end) { + this.$element.trigger($.support.transition.end) + this.cycle(true) + } + clearInterval(this.interval) + this.interval = null + return this + } + + , next: function () { + if (this.sliding) return + return this.slide('next') + } + + , prev: function () { + if (this.sliding) return + return this.slide('prev') + } + + , slide: function (type, next) { + var $active = this.$element.find('.item.active') + , $next = next || $active[type]() + , isCycling = this.interval + , direction = type == 'next' ? 'left' : 'right' + , fallback = type == 'next' ? 'first' : 'last' + , that = this + , e + + this.sliding = true + + isCycling && this.pause() + + $next = $next.length ? $next : this.$element.find('.item')[fallback]() + + e = $.Event('slide', { + relatedTarget: $next[0] + , direction: direction + }) + + if ($next.hasClass('active')) return + + if (this.$indicators.length) { + this.$indicators.find('.active').removeClass('active') + this.$element.one('slid', function () { + var $nextIndicator = $(that.$indicators.children()[that.getActiveIndex()]) + $nextIndicator && $nextIndicator.addClass('active') + }) + } + + if ($.support.transition && this.$element.hasClass('slide')) { + this.$element.trigger(e) + if (e.isDefaultPrevented()) return + $next.addClass(type) + $next[0].offsetWidth // force reflow + $active.addClass(direction) + $next.addClass(direction) + this.$element.one($.support.transition.end, function () { + $next.removeClass([type, direction].join(' ')).addClass('active') + $active.removeClass(['active', direction].join(' ')) + that.sliding = false + setTimeout(function () { that.$element.trigger('slid') }, 0) + }) + } else { + this.$element.trigger(e) + if (e.isDefaultPrevented()) return + $active.removeClass('active') + $next.addClass('active') + this.sliding = false + this.$element.trigger('slid') + } + + isCycling && this.cycle() + + return this + } + + } + + + /* CAROUSEL PLUGIN DEFINITION + * ========================== */ + + var old = $.fn.carousel + + $.fn.carousel = function (option) { + return this.each(function () { + var $this = $(this) + , data = $this.data('carousel') + , options = $.extend({}, $.fn.carousel.defaults, typeof option == 'object' && option) + , action = typeof option == 'string' ? option : options.slide + if (!data) $this.data('carousel', (data = new Carousel(this, options))) + if (typeof option == 'number') data.to(option) + else if (action) data[action]() + else if (options.interval) data.pause().cycle() + }) + } + + $.fn.carousel.defaults = { + interval: 5000 + , pause: 'hover' + } + + $.fn.carousel.Constructor = Carousel + + + /* CAROUSEL NO CONFLICT + * ==================== */ + + $.fn.carousel.noConflict = function () { + $.fn.carousel = old + return this + } + + /* CAROUSEL DATA-API + * ================= */ + + $(document).on('click.carousel.data-api', '[data-slide], [data-slide-to]', function (e) { + var $this = $(this), href + , $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7 + , options = $.extend({}, $target.data(), $this.data()) + , slideIndex + + $target.carousel(options) + + if (slideIndex = $this.attr('data-slide-to')) { + $target.data('carousel').pause().to(slideIndex).cycle() + } + + e.preventDefault() + }) + +}(window.$jqTheme || window.jQuery); +/* ============================================================= + * bootstrap-collapse.js v2.3.2 + * http://twitter.github.com/bootstrap/javascript.html#collapse + * ============================================================= + * Copyright 2012 Twitter, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============================================================ */ + + +!function ($) { + + "use strict"; // jshint ;_; + + + /* COLLAPSE PUBLIC CLASS DEFINITION + * ================================ */ + + var Collapse = function (element, options) { + this.$element = $(element) + this.options = $.extend({}, $.fn.collapse.defaults, options) + + if (this.options.parent) { + this.$parent = $(this.options.parent) + } + + this.options.toggle && this.toggle() + } + + Collapse.prototype = { + + constructor: Collapse + + , dimension: function () { + var hasWidth = this.$element.hasClass('width') + return hasWidth ? 'width' : 'height' + } + + , show: function () { + var dimension + , scroll + , actives + , hasData + + if (this.transitioning || this.$element.hasClass('in')) return + + dimension = this.dimension() + scroll = $.camelCase(['scroll', dimension].join('-')) + actives = this.$parent && this.$parent.find('> .accordion-group > .in') + + if (actives && actives.length) { + hasData = actives.data('collapse') + if (hasData && hasData.transitioning) return + actives.collapse('hide') + hasData || actives.data('collapse', null) + } + + this.$element[dimension](0) + this.transition('addClass', $.Event('show'), 'shown') + $.support.transition && this.$element[dimension](this.$element[0][scroll]) + } + + , hide: function () { + var dimension + if (this.transitioning || !this.$element.hasClass('in')) return + dimension = this.dimension() + this.reset(this.$element[dimension]()) + this.transition('removeClass', $.Event('hide'), 'hidden') + this.$element[dimension](0) + } + + , reset: function (size) { + var dimension = this.dimension() + + this.$element + .removeClass('collapse') + [dimension](size || 'auto') + [0].offsetWidth + + this.$element[size !== null ? 'addClass' : 'removeClass']('collapse') + + return this + } + + , transition: function (method, startEvent, completeEvent) { + var that = this + , complete = function () { + if (startEvent.type == 'show') that.reset() + that.transitioning = 0 + that.$element.trigger(completeEvent) + } + + this.$element.trigger(startEvent) + + if (startEvent.isDefaultPrevented()) return + + this.transitioning = 1 + + this.$element[method]('in') + + $.support.transition && this.$element.hasClass('collapse') ? + this.$element.one($.support.transition.end, complete) : + complete() + } + + , toggle: function () { + this[this.$element.hasClass('in') ? 'hide' : 'show']() + } + + } + + + /* COLLAPSE PLUGIN DEFINITION + * ========================== */ + + var old = $.fn.collapse + + $.fn.collapse = function (option) { + return this.each(function () { + var $this = $(this) + , data = $this.data('collapse') + , options = $.extend({}, $.fn.collapse.defaults, $this.data(), typeof option == 'object' && option) + if (!data) $this.data('collapse', (data = new Collapse(this, options))) + if (typeof option == 'string') data[option]() + }) + } + + $.fn.collapse.defaults = { + toggle: true + } + + $.fn.collapse.Constructor = Collapse + + + /* COLLAPSE NO CONFLICT + * ==================== */ + + $.fn.collapse.noConflict = function () { + $.fn.collapse = old + return this + } + + + /* COLLAPSE DATA-API + * ================= */ + + $(document).on('click.collapse.data-api', '[data-toggle=collapse]', function (e) { + var $this = $(this), href + , target = $this.attr('data-target') + || e.preventDefault() + || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') //strip for ie7 + , option = $(target).data('collapse') ? 'toggle' : $this.data() + $this[$(target).hasClass('in') ? 'addClass' : 'removeClass']('collapsed') + $(target).collapse(option) + }) + +}(window.$jqTheme || window.jQuery); +/* ============================================================ + * bootstrap-dropdown.js v2.3.2 + * http://twitter.github.com/bootstrap/javascript.html#dropdowns + * ============================================================ + * Copyright 2012 Twitter, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============================================================ */ + + +!function ($) { + + "use strict"; // jshint ;_; + + + /* DROPDOWN CLASS DEFINITION + * ========================= */ + + var toggle = '[data-toggle=dropdown]' + , Dropdown = function (element) { + var $el = $(element).on('click.dropdown.data-api', this.toggle) + $('html').on('click.dropdown.data-api', function () { + $el.parent().removeClass('open') + }) + } + + Dropdown.prototype = { + + constructor: Dropdown + + , toggle: function (e) { + var $this = $(this) + , $parent + , isActive + + if ($this.is('.disabled, :disabled')) return + + $parent = getParent($this) + + isActive = $parent.hasClass('open') + + clearMenus() + + if (!isActive) { + if ('ontouchstart' in document.documentElement) { + // if mobile we we use a backdrop because click events don't delegate + $('