From 8afdba4cfa4cdcdf9b9f1a4f08e9cc1f1759a400 Mon Sep 17 00:00:00 2001 From: chriswmackey Date: Fri, 20 Dec 2024 04:53:38 +0000 Subject: [PATCH] deploy: update docs --- .nojekyll | 1 + README.md | 1 + docs/.buildinfo | 4 + docs/.doctrees/cli/index.doctree | Bin 0 -> 2993 bytes docs/.doctrees/cli/main.doctree | Bin 0 -> 11731 bytes docs/.doctrees/environment.pickle | Bin 0 -> 165603 bytes docs/.doctrees/index.doctree | Bin 0 -> 7417 bytes .../ladybug_geometry_polyskel.cli.doctree | Bin 0 -> 9692 bytes .../ladybug_geometry_polyskel.doctree | Bin 0 -> 4389 bytes .../ladybug_geometry_polyskel.offset.doctree | Bin 0 -> 18299 bytes ...adybug_geometry_polyskel.polygraph.doctree | Bin 0 -> 98377 bytes ...ladybug_geometry_polyskel.polyskel.doctree | Bin 0 -> 27743 bytes ...adybug_geometry_polyskel.polysplit.doctree | Bin 0 -> 36856 bytes docs/.doctrees/modules.doctree | Bin 0 -> 2880 bytes docs/.nojekyll | 0 docs/README.md | 1 + docs/_modules/index.html | 232 + .../ladybug_geometry_polyskel/cli.html | 313 + .../ladybug_geometry_polyskel/offset.html | 421 + .../ladybug_geometry_polyskel/polygraph.html | 1031 +++ .../ladybug_geometry_polyskel/polyskel.html | 1092 +++ .../ladybug_geometry_polyskel/polysplit.html | 565 ++ docs/_sources/cli/index.rst.txt | 10 + docs/_sources/cli/main.rst.txt | 7 + docs/_sources/index.rst.txt | 36 + .../ladybug_geometry_polyskel.cli.rst.txt | 10 + .../ladybug_geometry_polyskel.offset.rst.txt | 7 + ...adybug_geometry_polyskel.polygraph.rst.txt | 7 + ...ladybug_geometry_polyskel.polyskel.rst.txt | 7 + ...adybug_geometry_polyskel.polysplit.rst.txt | 7 + .../ladybug_geometry_polyskel.rst.txt | 29 + 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 | 264 + docs/cli/main.html | 331 + docs/genindex.html | 567 ++ docs/index.html | 313 + docs/ladybug_geometry_polyskel.cli.html | 296 + docs/ladybug_geometry_polyskel.html | 355 + docs/ladybug_geometry_polyskel.offset.html | 334 + docs/ladybug_geometry_polyskel.polygraph.html | 732 ++ docs/ladybug_geometry_polyskel.polyskel.html | 379 + docs/ladybug_geometry_polyskel.polysplit.html | 401 + docs/modules.html | 277 + docs/objects.inv | Bin 0 -> 1018 bytes docs/py-modindex.html | 272 + docs/search.html | 254 + docs/searchindex.js | 1 + 122 files changed, 31677 insertions(+) create mode 100644 .nojekyll create mode 100644 README.md 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/environment.pickle create mode 100644 docs/.doctrees/index.doctree create mode 100644 docs/.doctrees/ladybug_geometry_polyskel.cli.doctree create mode 100644 docs/.doctrees/ladybug_geometry_polyskel.doctree create mode 100644 docs/.doctrees/ladybug_geometry_polyskel.offset.doctree create mode 100644 docs/.doctrees/ladybug_geometry_polyskel.polygraph.doctree create mode 100644 docs/.doctrees/ladybug_geometry_polyskel.polyskel.doctree create mode 100644 docs/.doctrees/ladybug_geometry_polyskel.polysplit.doctree create mode 100644 docs/.doctrees/modules.doctree create mode 100644 docs/.nojekyll create mode 100644 docs/README.md create mode 100644 docs/_modules/index.html create mode 100644 docs/_modules/ladybug_geometry_polyskel/cli.html create mode 100644 docs/_modules/ladybug_geometry_polyskel/offset.html create mode 100644 docs/_modules/ladybug_geometry_polyskel/polygraph.html create mode 100644 docs/_modules/ladybug_geometry_polyskel/polyskel.html create mode 100644 docs/_modules/ladybug_geometry_polyskel/polysplit.html create mode 100644 docs/_sources/cli/index.rst.txt create mode 100644 docs/_sources/cli/main.rst.txt create mode 100644 docs/_sources/index.rst.txt create mode 100644 docs/_sources/ladybug_geometry_polyskel.cli.rst.txt create mode 100644 docs/_sources/ladybug_geometry_polyskel.offset.rst.txt create mode 100644 docs/_sources/ladybug_geometry_polyskel.polygraph.rst.txt create mode 100644 docs/_sources/ladybug_geometry_polyskel.polyskel.rst.txt create mode 100644 docs/_sources/ladybug_geometry_polyskel.polysplit.rst.txt create mode 100644 docs/_sources/ladybug_geometry_polyskel.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/genindex.html create mode 100644 docs/index.html create mode 100644 docs/ladybug_geometry_polyskel.cli.html create mode 100644 docs/ladybug_geometry_polyskel.html create mode 100644 docs/ladybug_geometry_polyskel.offset.html create mode 100644 docs/ladybug_geometry_polyskel.polygraph.html create mode 100644 docs/ladybug_geometry_polyskel.polyskel.html create mode 100644 docs/ladybug_geometry_polyskel.polysplit.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..8b13789 --- /dev/null +++ b/.nojekyll @@ -0,0 +1 @@ + diff --git a/README.md b/README.md new file mode 100644 index 0000000..ebfb366 --- /dev/null +++ b/README.md @@ -0,0 +1 @@ +# documentation diff --git a/docs/.buildinfo b/docs/.buildinfo new file mode 100644 index 0000000..a0a8cb0 --- /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: 4429d1af62d54114701342f885bd1879 +tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/docs/.doctrees/cli/index.doctree b/docs/.doctrees/cli/index.doctree new file mode 100644 index 0000000000000000000000000000000000000000..74373923c2ad6019af5bee3c2d5869fb41e53804 GIT binary patch literal 2993 zcmaJ@ON$&g5MJ+kUb{Q{@`HfA4kkFZiD$=$96}Buu&3Z;AR&ZYOrz=6wB%7s9X-4= zhd^?0@Pcku&bj4x=2Lf1&+LFRFwiQMs!CsdRjNNafB$>1Q~mt0DH)fG3zB70Wz+=U z&s6FPDsA`>p8pws56}ESlPjZ~PHFHv&`22rTQ1B+bG~P2YPpi_an@m7 z)_WbEv4QVcZUx=g@_U!xe;495c5nYo7tw7kd>3l(-IBnU4eZnpk~TQD=etcz6MtK9 zNyEfViQgyIYCd%qcZsp@@yx_Hd#NDCK#1>-Bt`wz&s@1)Oi4P|bQX1-?^%+^t-y}i z19r$BvORY0e;qSb(6M$>Qa!#>dOj8;TTWd*$|-iNUXDs7mS#@H|LouzW}FH><}#y; z3vF<{N3V9>lpWNVuR%Lm34H%j6$O#FPleb04MBqy0)1HrI$@6@9PCqIz#aqL&+vbO z|5N;*<9_Um>RzK-oxOnjF5C~0T~(CI$!sG_bpqKAKvAjHbTfm^-p3rV2Y%3A6lp*v zHLt**z!eZE2$$inK>Q(>sc;#caZ&BFABpc5WRcO*vheB_Qb@{*Sx9&;)HGcCF5_7S zB3}DpbGjAur7NaX(=5E&@%t6;jFMsr-F@(R9Y=)XlATu&^nl>E+qn7T=GLPtP0Et$ zK(?X$2In@Q1oX6pzCyIl8(F2{hHN7x`)jJLQnF!a4|u_MlS3lR?aZktV4Ia@j#ChU0P2RTKZ5vz2-A|t43ONtVU1Fe)rsG!Rt z_*>)P59$yS_?<&xzgaphuo@zTNv!Xc-|I6UdW-ud_r5l^?{V?`0@F!W!lrF-1 ze`LVgGC^s?&S+rpK`o(zR+8k3Tb8VP4E!|*nx-@Hhnkj3+eFZ}6mahPeMUsP?D$i< z;6Tw5>&!~2<2xBeYk|9?E21S(godW1fMkG_r8HhC#>XWvOQ=j$2Cd)+&dx?(jSR>4 z!<(B4)mrI1;db48i7d<3eMfP;!!5)lm^SCXn4V(QnT(omPFWKl#mozO+83{5sqRuoBX z@|GK3^Yu8%xFJ&!FVaNWTh$3_?huzTsEn%UV0751C94ML@5e7VF;rKDNoBN_A>Rk+ zV8~OwL~A^a#Rl5Q94r*P;5Phl^3)%dv`kPUXoE7X06UD5DM9S9F8n9V+R}VI9z$#{ z%B5vWUMQWTobE-*%WV9abG;A~*Y6eX0!M&I}6AY_rWmDye(F=b@PwLdXSX~`mCJZA!bkoUGwk@ttD zAgHq697@^%s5{lVUM51Nq<&lcdCCalLE`IT1IiVII6ZeIT*SGidNi6IfENZ5E@$9C z(-h8PmoRR+rN)cMU7<)_iE%cW2T%sDQHJteA_7LKg^znFwB`xL6DSf)V6o{|QJ*$5 z6u2s8bwj)MdsM!SGmh`qtpv3TCSri#s12J~qH~JYg!$$aL4jEoa~aw>Uewsi{n-s^ zJ@r5gYqNIIjr|k@2IRdctiPWz%@ljXa_0w8YL_L#jFW}FW^b+?dmO(NhNPU0oF8sx zuCg^uIr1Naf&E$%3v{Jd2fZn&^>7trx|k}_lA%()yCrP32RAGZR$i+^XE*Gl(P|rq zihJ9(njOpxXdfvCA#enbOR9tb%(w$ykKSb?{{R%;g`ZFg7*bJG7%L63Ups8O$PMv9 bE3OiF(9A6$OdfN$pT$Pk^o017yXnP$HkhA5 literal 0 HcmV?d00001 diff --git a/docs/.doctrees/cli/main.doctree b/docs/.doctrees/cli/main.doctree new file mode 100644 index 0000000000000000000000000000000000000000..133ed30bcad8c517154048d02ce3a735713d29ba GIT binary patch literal 11731 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 literal 0 HcmV?d00001 diff --git a/docs/.doctrees/index.doctree b/docs/.doctrees/index.doctree new file mode 100644 index 0000000000000000000000000000000000000000..76930480bbfb9aed99c7c61edb2186f2810f6471 GIT binary patch literal 7417 zcmcIp%a0sK8DH;Xc4yz-#Fk-g(Z{|R`N#dY_91$h z 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 literal 0 HcmV?d00001 diff --git a/docs/.doctrees/ladybug_geometry_polyskel.cli.doctree b/docs/.doctrees/ladybug_geometry_polyskel.cli.doctree new file mode 100644 index 0000000000000000000000000000000000000000..6970a48fae44a20d3da1e007189e137a9731c08d GIT binary patch literal 9692 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 literal 0 HcmV?d00001 diff --git a/docs/.doctrees/ladybug_geometry_polyskel.polygraph.doctree b/docs/.doctrees/ladybug_geometry_polyskel.polygraph.doctree new file mode 100644 index 0000000000000000000000000000000000000000..c4e1740371bfb1a3e7845eed6e3b34d12fc76336 GIT binary patch literal 98377 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 literal 0 HcmV?d00001 diff --git a/docs/.doctrees/modules.doctree b/docs/.doctrees/modules.doctree new file mode 100644 index 0000000000000000000000000000000000000000..3c45f09ebb494a9cf1e9d7710a855418ff0b8472 GIT binary patch literal 2880 zcmaJ@TWcIQ6n1Ry&E8#Kl9ZOjEuo}IXzVSeh0>=&A5HyGiXjg{Xh+(WSdBE5H1Y03 zpnXV)L2pt2Z$HhG`c-5I-)Cjuj6wu z2puoI;u~Ax3q{##TF%Lwo1A;QB85>ax8N$KLpZbh2VbUOKBf9D){%A#inx3fM`1wP zM8r<$Ht}DCT_rV-7v+?OJ?g!c)6ygFl;@6QF6GqA6m>#sg5i<`xiW(&(_ zNv8}wPv>bXiUaXT48>!yBTmBQL?ES!Ew$!$a%Jpd(j?d}RhMVMum5RGF z>yX@+=iB8JmFZ_DFHEV~MnUUZi!H=tGH>~2v75cGkgIrt+J24SQ~aLc_X591q1X69 z4NyiatIRJxRr&XkhN0A%DjA1gQfwxpUMNhEeLf4G*^BnW-Sy_b3p z-XFC@o>`+k2dYB%lByCdZ6`t3l)fl^ybuQ$VKCeL#j6;OXE39U=Np?J!YB=X^Wt398ytrCTd?LWgk-F1QPes=oPsgwAA ze0!5{YmFs>YNh~JzyP^rK8Az3@*7qM~^ZS*F9_0h+-H}0GahbaL7 z&k58=A)y#Xit2eu=N#o`SZ{;E;lAaWv5bK4fDPQFxp5J?nb9-kh;m4_MuX^vF)h6z zH=?jDfwd7U^MbT^L{%$+1Qe~NDj7VeBo!M{>u*Gb<0Ug>nI|+I@?~KhCz~fLh-99; zkxtflJs?avI#nr=Cd%HLC*a%=$v7~hA{~s58a1+>apAM{1t*T%ikMs{YYhF~$B;sw z>gD;paFoaf*yuS>sAMjE{O#~r7#F-Cpa>?N&Z>e9lVnN}d*Vg-TzFr&pC=QD-C42n z!ss(&=b+QWq*(<3P2zcu_IR|T5BcfS?|wi%$99(8F`pzi=D%5+2Xkq{>w?=e$^ESI zfoU)iK38xy@N^0au{6v3;RJxpNz2SO0pf~;kn3>hR@&1g5ppgRegN;TG70xXms7Cp z&k~e&DAfIGT`!3;8Lh96aFPj%c+mKoY^ZWoLY!Wd1ze;@M|CeWGXR$eBvQ|Sfo3Qi zrzzpe=^ZthC+sRiYbK`0z#;-NxNsQgyFvtla}OU6GiWUc=d&!aSStEi8f2M(~R zX7xb34m(`GNso%quSW^E3nWU-B)H*;r*_UUn(&}FLQp`K$D;}39G7Mq<>C02w0>ql z3~RG?(M|IdFBHgoNmzf2SK`uzK@#{?fe7D5@#@-%C-{FUhAxaYdsUqtWfC1v?qRW( zBucLJ>M%DYwH|^;Z}X{9ZTlj8^L-xbpC>t!4)g0St@` zj~$=_*GXoSLSc~u?u*{9jr=2$e;0oT`0)+|jqq}F=y&a~og25r`>nWY*?#jF0Yv7h RTYD^xwq^>X%e$PO{R + + + + + + Overview: module code — ladybug-geometry-polyskel documentation + + + + + + + + + + + + + + + + + + + + + + +
+
+

+ Back to top + +

+

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

+
+
+ + \ No newline at end of file diff --git a/docs/_modules/ladybug_geometry_polyskel/cli.html b/docs/_modules/ladybug_geometry_polyskel/cli.html new file mode 100644 index 0000000..05138c9 --- /dev/null +++ b/docs/_modules/ladybug_geometry_polyskel/cli.html @@ -0,0 +1,313 @@ + + + + + + + ladybug_geometry_polyskel.cli — ladybug-geometry-polyskel documentation + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ +

Source code for ladybug_geometry_polyskel.cli

+"""ladybug-geometry-polyskel commands."""
+import click
+import sys
+import logging
+import json
+
+from ladybug_geometry.geometry3d import Face3D
+from ladybug_geometry_polyskel.polysplit import perimeter_core_subfaces as \
+    lgp_perimeter_core_subfaces
+
+_logger = logging.getLogger(__name__)
+
+
+# command group for all geometry extension commands.
+@click.group(help='ladybug geometry polyskel commands.')
+@click.version_option()
+def main():
+    pass
+
+
+@main.command('perimeter-core-subfaces')
+@click.argument('face3d-file', type=click.Path(
+    exists=True, file_okay=True, dir_okay=False, resolve_path=True))
+@click.argument('perimeter-offset', type=float)
+@click.option(
+    '--tolerance', '-t', help='The maximum difference between x, y, and z '
+    'values at which vertices are considered equivalent.',
+    type=float, default=1e-5)
+@click.option(
+    '--output-file', help='Optional file to output the he string of the visualization '
+    'file contents. By default, it will be printed out to stdout',
+    type=click.File('w'), default='-', show_default=True)
+def perimeter_core_subfaces_cli(face3d_file, perimeter_offset, tolerance, output_file):
+    """Compute perimeter and core Face3Ds using the straight skeleton of input Face3Ds.
+
+    \b
+    Args:
+        face3d_file: Full path to a JSON file containing an array of Face3D
+            objects for which core/perimeter Face3Ds will be computed.
+        perimeter_offset: Distance to offset perimeter sub-faces.
+    """
+    try:
+        perimeter_core_subfaces(face3d_file, perimeter_offset, tolerance, output_file)
+    except Exception as e:
+        _logger.exception('Failed to compute core/perimeter Face3Ds.\n{}'.format(e))
+        sys.exit(1)
+    else:
+        sys.exit(0)
+
+
+
+[docs] +def perimeter_core_subfaces( + face3d_file, perimeter_offset, tolerance=1e-5, output_file=None +): + """Compute perimeter and core Face3Ds using the straight skeleton of input Face3Ds. + + Args: + face3d_file: Full path to a JSON file containing an array of Face3D + objects for which core/perimeter Face3Ds will be computed. + perimeter_offset: Distance to offset perimeter sub-faces. + tolerance: The maximum difference between x, y, and z values at which + vertices are considered equivalent. + output_file: Optional file to output the string of the visualization + file contents. If None, the string will simply be returned from + this method. + """ + # load the Face3D objects + with open(face3d_file) as inf: + data = json.load(inf) + face_3ds = [Face3D.from_dict(geo) for geo in data] + + # compute core/perimeter Face3Ds + core_per_geos = [] + for geo_obj in face_3ds: + perimeter_sub_faces, core_sub_faces = \ + lgp_perimeter_core_subfaces(geo_obj, perimeter_offset, tolerance) + core_per_geos.extend([f.to_dict() for f in perimeter_sub_faces]) + core_per_geos.extend([f.to_dict() for f in core_sub_faces]) + + # write the resulting geometries into the output + if output_file is None: + return json.dumps(core_per_geos) + else: + output_file.write(json.dumps(core_per_geos))
+ +
+ +
+ +
+
+
+
+

+ Back to top + +

+

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

+
+
+ + \ No newline at end of file diff --git a/docs/_modules/ladybug_geometry_polyskel/offset.html b/docs/_modules/ladybug_geometry_polyskel/offset.html new file mode 100644 index 0000000..e5a53d7 --- /dev/null +++ b/docs/_modules/ladybug_geometry_polyskel/offset.html @@ -0,0 +1,421 @@ + + + + + + + ladybug_geometry_polyskel.offset — ladybug-geometry-polyskel documentation + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ +

Source code for ladybug_geometry_polyskel.offset

+# coding=utf-8
+"""Functions for offsetting a polygon using the straight skeleton."""
+from __future__ import division
+import math
+
+from ladybug_geometry.geometry2d import Point2D, Ray2D, Polygon2D
+
+from .polygraph import skeleton_as_directed_graph
+from .polysplit import perimeter_core_subpolygons, _split_perimeter_subpolygons, \
+    _exterior_cycles_as_polygons
+
+
+
+[docs] +def offset_polygon(polygon, distance, tolerance=1e-5): + """Offset a Polygon2D by a given distance inwards or outwards. + + Assuming that the input is not self-intersecting, the resulting shapes + should have all self-intersections resolved through the straight skeleton. + However, if the distance is large enough, the result may be an empty list. + + Args: + polygon: A Polygon2D to be offset inwards or outwards by a given distance. + distance: The distance inwards that the polygon will be offset. + Positive values will always be offset inwards while negative ones + will be offset outwards. + tolerance: Tolerance for point equivalence. (Default: 1e-5). + """ + # determine the methods to use based on the offset direction + if -tolerance <= distance <= tolerance: + return [polygon] + elif distance < 0: # we are offsetting outwards + offset_poly = polygon.offset(distance, check_intersection=False) + if not offset_poly.is_self_intersecting: + return [offset_poly] + bound_rect = _bound_rect_for_ext_skeleton(polygon, distance) + dg = skeleton_as_directed_graph(bound_rect, [polygon], tolerance) + root_key = dg.hole_root_keys[0] + _, _perimeter_sub_dg = _split_perimeter_subpolygons( + dg, abs(distance), root_key, tolerance, None) + offset_polygons = _exterior_cycles_as_polygons(_perimeter_sub_dg, tolerance) + else: # we are offsetting inwards + _, offset_polygons = perimeter_core_subpolygons( + polygon, distance, tolerance=tolerance, flat_core=True) + return offset_polygons
+ + + +
+[docs] +def offset_perimeter_polygons(polygon, distance, tolerance=1e-5): + """Get a list of Polygon2Ds along the perimeter of an input polygon. + + These can be used to split the input polygons into core/perimeter shapes. + Assuming that the input is not self-intersecting, the resulting shapes + should have all self-intersections resolved through the straight skeleton. + + Args: + polygon: A Polygon2D to be offset inwards or outwards by a given distance. + distance: The distance inwards that the polygon will be offset. + Positive values will always be offset inwards while negative ones + will be offset outwards. + tolerance: Tolerance for point equivalence. (Default: 1e-5). + """ + # determine the methods to use based on the offset direction + if -tolerance <= distance <= tolerance: + return [] + elif distance < 0: # we are offsetting outwards + offset_poly = polygon.offset(distance, check_intersection=False) + if not offset_poly.is_self_intersecting: + perimeter_polygons = [] + for i, (in_pt, out_pt) in enumerate(zip(polygon, offset_poly)): + pts = (polygon[i - 1], offset_poly[i - 1], out_pt, in_pt) + perimeter_polygons.append(Polygon2D(pts)) + return perimeter_polygons + bound_rect = _bound_rect_for_ext_skeleton(polygon, distance) + dg = skeleton_as_directed_graph(bound_rect, [polygon], tolerance) + root_key = dg.hole_root_keys[0] + perimeter_polygons, _ = _split_perimeter_subpolygons( + dg, abs(distance), root_key, tolerance, None) + else: # we are offsetting inwards + dg = skeleton_as_directed_graph(polygon, None, tolerance) + root_key = dg.outer_root_key + perimeter_polygons, _ = _split_perimeter_subpolygons( + dg, distance, root_key, tolerance, None) + return perimeter_polygons
+ + + +
+[docs] +def offset_skeleton(polygon, distance, tolerance=1e-5): + """Get a list of LineSegment2D for the straight used to offset a polygon. + + Args: + polygon: A Polygon2D to be offset inwards or outwards by a given distance. + distance: The distance inwards that the polygon will be offset. + Positive values will always be offset inwards while negative ones + will be offset outwards. + tolerance: Tolerance for point equivalence. (Default: 1e-5). + """ + if -tolerance <= distance <= tolerance: + return [] + elif distance < 0: # we are offsetting outwards + bound_rect = _bound_rect_for_ext_skeleton(polygon, distance) + dg = skeleton_as_directed_graph(bound_rect, [polygon], tolerance) + else: # we are offsetting inwards + dg = skeleton_as_directed_graph(polygon, None, tolerance) + return dg.connection_segments
+ + + +def _bound_rect_for_ext_skeleton(polygon, distance): + """Get a bounding rectangle to be used for offsetting a polygon outwards. + + Args: + polygon: A Polygon2D that is being offset outwards for which a bounding + rectangle is needed. + distance: The distance outwards that the polygon will be offset. This + value should always be negative. + + Returns: + A Polygon2D for the bounding rectangle around the shape. + """ + # determine how far from the polygon the bounding rectangle will be drawn + min_pt, max_pt = polygon.min, polygon.max + poly_dim = min((max_pt.x - min_pt.x, max_pt.y - min_pt.y)) + offset_factor = 50 if abs(distance) < poly_dim / 10 else 10 + offset = abs(distance) * offset_factor + + # create a starting bounding rectangle from the min, max, and distance + min_pt = Point2D(min_pt.x - offset, min_pt.y - offset) + max_pt = Point2D(max_pt.x + offset, max_pt.y + offset) + min_x_max_y, max_x_min_y = Point2D(min_pt.x, max_pt.y), Point2D(max_pt.x, min_pt.y) + rect_pts = (min_pt, max_x_min_y, max_pt, min_x_max_y) + rect_poly = Polygon2D(rect_pts) + + # find a corner point to be used as the base for the rectangle + pts_dists, pts_info = [], [] + for corner_i, conrner_pt in enumerate(rect_poly): + for pt_i, pt in enumerate(polygon.vertices): + pts_dists.append(conrner_pt.distance_to_point(pt)) + pts_info.append((pt_i, corner_i)) + sort_info = [inf for _, inf in sorted(zip(pts_dists, pts_info), + key=lambda pair: pair[0])] + poly_pt_i, corner_pt_i = sort_info[0] + + # shoot a ray from the polygon point to the rectangle + poly_pt = polygon.vertices[poly_pt_i] + v1 = polygon.vertices[poly_pt_i - 1] - poly_pt + end_i = poly_pt_i + 1 if poly_pt_i != len(polygon) - 1 else 0 + v2 = polygon.vertices[end_i] - poly_pt + if not polygon.is_clockwise: + ang = v1.angle_clockwise(v2) / 2 + if ang == 0: + ang = math.pi / 2 + m_vec = v1.rotate(-ang).normalize() + m_dist = -distance / math.sin(ang) + else: + ang = v1.angle_counterclockwise(v2) / 2 + if ang == 0: + ang = math.pi / 2 + m_vec = v1.rotate(ang).normalize() + m_dist = distance / math.sin(ang) + m_vec = m_vec * m_dist + corner_ray = Ray2D(poly_pt, m_vec) + ray_int = rect_poly.intersect_line_ray(corner_ray) + + # if the ray intersection is too far from the corner, just use the start rectangle + corner_pt = rect_pts[corner_pt_i] + safe_distance = abs(distance) * (offset_factor - 3) + if len(ray_int) == 0 or ray_int[0].distance_to_point(corner_pt) > safe_distance: + return rect_poly + + # otherwise, adjust the bounding rectangle to give us a nicer skeleton + bpt = ray_int[0] + base, height = max_pt.x - min_pt.x, max_pt.y - min_pt.y + if corner_pt_i == 0: # lower left corner + rect_pts = ( + bpt, Point2D(bpt.x + base, bpt.y), Point2D(bpt.x + base, bpt.y + height), + Point2D(bpt.x, bpt.y + height)) + elif corner_pt_i == 1: # lower right corner + rect_pts = ( + Point2D(bpt.x - base, bpt.y), bpt, Point2D(bpt.x, bpt.y + height), + Point2D(bpt.x - base, bpt.y + height)) + elif corner_pt_i == 2: # upper right corner + rect_pts = ( + Point2D(bpt.x - base, bpt.y - height), Point2D(bpt.x, bpt.y - height), + bpt, Point2D(bpt.x - base, bpt.y)) + else: # upper left corner + rect_pts = ( + Point2D(bpt.x, bpt.y - height), Point2D(bpt.x + base, bpt.y - height), + Point2D(bpt.x + base, bpt.y), bpt) + return Polygon2D(rect_pts) +
+ +
+ +
+
+
+
+

+ Back to top + +

+

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

+
+
+ + \ No newline at end of file diff --git a/docs/_modules/ladybug_geometry_polyskel/polygraph.html b/docs/_modules/ladybug_geometry_polyskel/polygraph.html new file mode 100644 index 0000000..7443bc3 --- /dev/null +++ b/docs/_modules/ladybug_geometry_polyskel/polygraph.html @@ -0,0 +1,1031 @@ + + + + + + + ladybug_geometry_polyskel.polygraph — ladybug-geometry-polyskel documentation + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ +

Source code for ladybug_geometry_polyskel.polygraph

+# coding=utf-8
+"""Implementation of a Directed Graph data structure."""
+from __future__ import division
+import math
+
+from ladybug_geometry.geometry2d import LineSegment2D, Polygon2D
+from ladybug_geometry.intersection2d import intersect_line2d_infinite
+
+from .polyskel import skeleton_as_edge_list, _intersect_skeleton_segments, \
+    _remove_segments_outside_boundary
+
+
+def _vector2hash(vector, tol):
+    """Hashes spatial coordinates for use in dictionary.
+
+    Args:
+        vector: A Vector2D object.
+        tol: floating point precision tolerance.
+
+    Returns:
+        Hash of vector as a string of rounded coordinates.
+    """
+    # get the relative tolerance using a log function
+    try:
+        rtol = int(math.log10(tol)) * -1
+    except ValueError:
+        rtol = 0  # the tol is equal to 1 (out of range for log)
+    # account for the fact that the tolerance may not be base 10
+    base = int(tol * 10 ** (rtol + 1))
+    if base == 10 or base == 0:  # tolerance is base 10 (eg. 0.001)
+        base = 1
+    else:  # tolerance is not base 10 (eg. 0.003)
+        rtol += 1
+    # avoid cases of signed zeros messing with the hash
+    z_tol = tol / 2
+    x_val = 0.0 if abs(vector.x) < z_tol else vector.x
+    y_val = 0.0 if abs(vector.y) < z_tol else vector.y
+    # convert the coordinate values to a hash
+    return str((
+        base * round(x_val / base, rtol),
+        base * round(y_val / base, rtol)
+    ))
+
+
+class _Node(object):
+    """Private class to handle nodes in PolygonDirectedGraph.
+
+    Args:
+        val: A Point2D object.
+        key: Hash of Point2D object.
+        order: integer counting order of the Node (based on dg propagation)
+        adj_lst: list of keys adjacent to this node.
+        exterior: Node boundary condition. None if not set by user, else True
+            or False according to user.
+
+    Properties:
+        * pt
+        * key
+        * adj_lst
+        * exterior
+        * adj_count
+    """
+    __slots__ = ('key', 'pt', '_order', 'adj_lst', 'exterior')
+
+    def __init__(self, key, val, order, adj_lst, exterior):
+        """Initialize _Node"""
+
+        self.key = key
+        self.pt = val
+        self._order = order
+        self.adj_lst = adj_lst
+        # Potentially change exterior to data (similar to networkX)
+        # and pass conditional function to get_exterior
+        # this resolves redundancy between unidirect and exterior
+        # node/edge properties.
+        self.exterior = exterior
+
+    @property
+    def adj_count(self):
+        """Number of adjacent nodes"""
+        return len(self.adj_lst)
+
+    def __hash__(self):
+        return hash(self.key)
+
+    def __eq__(self, other):
+        return isinstance(other, _Node) and \
+            self.key == other.key
+
+    def __ne__(self, other):
+        return not self.__eq__(other)
+
+    def __repr__(self):
+        return '{}: {}'.format(self._order, self.key)
+
+
+
+[docs] +class PolygonDirectedGraph(object): + """A directed graph data structure for point relationships. + + The PolygonDirectedGraph effectively represents the network of a straight + skeleton and assists with finding the shortest pathways through it. It also + helps differentiate interior from exterior parts of the graph. Typically, + interior pathways are bi-directional in the graph while exterior pathways + are uni-directional. + + Args: + tolerance: Tolerance for point equivalence. (Default: 1e-5). This is used + for hashing points within the network. + + Properties: + * node_count: Integer for the number of nodes in graph. + * nodes: An iterable of nodes in graph. + * ordered_nodes: An iterable of nodes in graph in order they were added. + * connection_segments: List of LineSegment2D for the node connections + * outer_root_node: A node for the outer root key + * hole_root_nodes: A list of nodes for the hole root keys + * is_intersect_topology: A boolean for whether the graph self-intersects + """ + + def __init__(self, tol): + """Initialize a PolygonDirectedGraph.""" + self._directed_graph = {} + self._tol = tol + self.outer_root_key = None # will be set during skeleton creation + self.hole_root_keys = [] # will be set during skeleton creation + self.is_intersect_topology = None # will be set during skeleton creation + +
+[docs] + @classmethod + def from_polygon(cls, polygon, tol): + """Generate a directed graph from a polygon. + + Args: + polygon: A Polygon2D object. + """ + return cls.from_point_array(polygon.vertices, tol, loop=True)
+ + +
+[docs] + @classmethod + def from_point_array(cls, point_array, tol, loop=True): + """Generate a directed graph from a 1-dimensional array of points. + + Args: + point_array: Array of Point2D objects. + loop: Optional parameter to connect 1d array + tol: Tolerance for point equivalence. + """ + dg = cls(tol) + for i in range(len(point_array) - 1): + dg.add_node(point_array[i], [point_array[i + 1]], exterior=None) + if loop: + dg.add_node(point_array[-1], [point_array[0]], exterior=None) + return dg
+ + + @property + def node_count(self): + return len(self.nodes) + + @property + def nodes(self): + """Get an iterable of pt nodes""" + return self._directed_graph.values() + + @property + def ordered_nodes(self): + """Get an iterable of pt nodes in order of addition""" + nodes = list(self.nodes) + nodes.sort(key=lambda v: v._order) + return nodes + + @property + def outer_root_node(self): + """Get the node of the outer boundary root.""" + return self.node(self.outer_root_key) + + @property + def hole_root_nodes(self): + """Get a list of nodes for the roots of the holes.""" + return [self.node(hole_key) for hole_key in self.hole_root_keys] + + @property + def connection_segments(self): + """Get a list of LineSegment2D for the node connections in the graph.""" + traversed = set() + connections = [] + for node in self.nodes: + for conn_node in node.adj_lst: + if (conn_node.key, node.key) not in traversed: + conn_seg = LineSegment2D.from_end_points(node.pt, conn_node.pt) + connections.append(conn_seg) + traversed.add((node.key, conn_node.key)) + return connections + +
+[docs] + def node(self, key): + """Retrieves the node based on passed value. + + Args: + val: The key for a node in the directed graph. + + Returns: + The node for the passed key. + """ + try: + return self._directed_graph[key] + except KeyError: + return None # broken connection
+ + +
+[docs] + def add_adj(self, node, adj_val_lst): + """Adds nodes to node.adj_lst. + + This method will ensure no repetitions will occur in adj_lst. + + Args: + node: _Node to add adjacencies to. + adj_val_lst: List of Point2D objects to add as adjacent nodes. + """ + adj_keys = {n.key: None for n in node.adj_lst} + adj_keys[node.key] = None + for adj_val in adj_val_lst: + adj_key = _vector2hash(adj_val, self._tol) + if adj_key in adj_keys: + continue + + self._add_node(adj_key, adj_val, exterior=None) + adj_keys[adj_key] = None + node.adj_lst.append(self.node(adj_key))
+ + +
+[docs] + def remove_adj(self, node, adj_key_lst): + """Removes nodes in node.adj_lst. + + Args: + node: _Node to remove adjacencies to. + adj_val_lst: List of adjacency keys to remove as adjacent nodes. + """ + node.adj_lst = [n for n in node.adj_lst if n.key not in set(adj_key_lst)]
+ + +
+[docs] + def add_node(self, val, adj_lst, exterior=None): + """Add a node into the PolygonDirectedGraph. + + This method consumes a Point2D, computes its key value, and adds it in the + graph if it doesn't exist. If it does exist it appends adj_lst to existing pt. + + Args: + val: A Point2D object. + adj_lst: A list of Point2D objects adjacent to the node. + exterior: Optional boolean for exterior attribute. + + Returns: + The hashed key from the existing or new node. + """ + key = _vector2hash(val, self._tol) # get key + self._add_node(key, val, exterior) # get node if it exists + node = self._directed_graph[key] + self.add_adj(node, adj_lst) # add the adj_lst to dg + # if the exterior boolean was passed, change the node attribute + if exterior is not None: + node.exterior = exterior + return node.key
+ + + def _add_node(self, key, val, exterior=None): + """Helper function for add_node. If key doesn't exist, add to dg.""" + if key not in self._directed_graph: + self._directed_graph[key] = _Node(key, val, self.node_count, [], exterior) + return self._directed_graph[key] + +
+[docs] + def insert_node(self, base_node, new_val, next_node, exterior=None): + """Insert node in the middle of an edge defined by node and next_node. + + Args: + base_node: _Node object to the left. + new_val: A Point2D object for the new node in the middle. + next_node: _Node object to the right. + exterior: Optional boolean for exterior attribute. + + Returns: + key of new_val node. + """ + # add new_val as a node, with next_node as an adjacency + new_key = self.add_node(new_val, [next_node.pt], exterior=exterior) + # update parent by adding new adjacency, and removing old adjacency + self.add_adj(base_node, [self.node(new_key).pt]) + + # catch the edge case where the new point is coincident to parent or next_point. + # this occurs when intersection passes through a corner. + if (new_key == next_node.key) or (new_key == base_node.key): + return new_key + self.remove_adj(base_node, [next_node.key]) + return new_key
+ + +
+[docs] + def node_exists(self, key): + """Check if a node is in the graph. True if node in directed graph else False.""" + return key in self._directed_graph
+ + +
+[docs] + def pt_exists(self, pt): + """True if a point (as Point2D) in directed graph exists as node else False. + """ + return self.node_exists(_vector2hash(pt, self._tol))
+ + +
+[docs] + def polygon_exists(self, polygon): + """Check if polygon is in the directed graph. + + Args: + polygons: A Polygon2D object. + dg: A PolygonDirectedGraph. + + Return: + True if exists, else False. + """ + vertices_loop = list(polygon.vertices) + vertices_loop = vertices_loop + [vertices_loop[0]] + + for i in range(len(vertices_loop) - 1): + pt1 = vertices_loop[i] + pt2 = vertices_loop[i + 1] + + if not self.pt_exists(pt1): + return False + + node1 = self.node(_vector2hash(pt1, self._tol)) + node2 = self.node(_vector2hash(pt2, self._tol)) + if node2.key in [n.key for n in node1.adj_lst]: + return False + + return True
+ + +
+[docs] + def adj_matrix(self): + """Gets an adjacency matrix of the directed graph where: + + * 1 = adjacency from row node to col node. + * 0 = no adjacency. + + Returns: + N x N square matrix where N is number of nodes. + """ + nodes = self.ordered_nodes + # initialize a mtx with no adjacencies + amtx = [[0 for i in range(self.node_count)] + for j in range(self.node_count)] + + for i in range(self.node_count): + adj_indices = [adj._order for adj in nodes[i].adj_lst] + for adj_idx in adj_indices: + amtx[i][adj_idx] = 1 + + return amtx
+ + +
+[docs] + def adj_matrix_labels(self): + """Returns a dictionary where label key corresponds to index in adj_matrix + and value is node key""" + return {i: node.key for i, node in enumerate(self.ordered_nodes)}
+ + +
+[docs] + def intersect_graph_with_segment(self, segment): + """Update graph with intersection of partial segment crossing through polygon. + + Args: + segment: LineSegment2D to intersect with the graph. The LineSegment2D + does not need to be contained within polygon and will be intersected + infinitely. + """ + # loop through all nodes in the graph and find intersection points + int_key_lst = [] + for node in self.ordered_nodes: + # convert graph edge to trimming segment + next_node = node.adj_lst[0] + trim_seg = LineSegment2D.from_end_points(node.pt, next_node.pt) + int_pt = intersect_line2d_infinite(trim_seg, segment) + + # add intersection point as new node in graph + if int_pt: + int_key = self.insert_node(node, int_pt, next_node, exterior=False) + int_key_lst.append(int_key) + + # add intersection edges between the newly-found nodes + if len(int_key_lst) == 2: + # typical case with convex cases + # make edge between intersection nodes + n1, n2 = self.node(int_key_lst[0]), self.node(int_key_lst[1]) + self.add_node(n1.pt, [n2.pt], exterior=False) + self.add_node(n2.pt, [n1.pt], exterior=False) + + elif len(int_key_lst) > 2: + # edge case with concave geometry creates multiple intersections + # sort distance and add adjacency + n = self.node(int_key_lst[0]) + distances = [(0, 0.0)] + + for i, k in enumerate(int_key_lst[1:]): + distance = LineSegment2D.from_end_points(n.pt, self.node(k).pt).length + distances.append((i + 1, distance)) + + distances = sorted(distances, key=lambda t: t[1]) + + for i in range(len(distances) - 1): + k1, k2 = distances[i][0], distances[i + 1][0] + n1, n2 = self.node(int_key_lst[k1]), self.node(int_key_lst[k2]) + # add bi-direction so the min cycle works + self.add_node(n1.pt, [n2.pt], exterior=False) + self.add_node(n2.pt, [n1.pt], exterior=False)
+ + +
+[docs] + def min_cycle(self, base_node, goal_node, ccw_only=False): + """Identify the shortest interior cycle between two exterior nodes. + + Args: + base_node: The first exterior node of the edge. + goal_node: The end exterior node of the cycle that, together with + the base_node, constitutes an exterior edge. + ccw_only: A boolean to note whether the search should be limited + to the counter-clockwise direction only. (Default: False). + + Returns: + A list of nodes that form a polygon if the cycle exists, else None. + """ + # set up a queue for exploring the graph + explored = [] + queue = [[base_node]] + orig_dir = base_node.pt - goal_node.pt # yields a vector + # loop to traverse the graph with the help of the queue + while queue: + path = queue.pop(0) + node = path[-1] + # make sure that the current node has not been visited + if node not in explored: + prev_dir = node.pt - path[-2].pt if len(path) > 1 else orig_dir + # iterate over the neighbors to determine relevant nodes + rel_neighbors, rel_angles = [], [] + for neighbor in node.adj_lst: + if neighbor == goal_node: # the shortest path was found! + path.append(goal_node) + return path + elif neighbor.exterior: + continue # don't traverse the graph exterior + edge_dir = neighbor.pt - node.pt + cw_angle = prev_dir.angle_clockwise(edge_dir * -1) + if not (1e-5 < cw_angle < (2 * math.pi) - 1e-5): + continue # prevent back-tracking along the search + rel_neighbors.append(neighbor) + rel_angles.append(cw_angle) + # sort the neighbors by clockwise angle + if len(rel_neighbors) > 1: + rel_neighbors = [n for _, n in sorted(zip(rel_angles, rel_neighbors), + key=lambda pair: pair[0])] + # add the relevant neighbors to the path and the queue + if ccw_only: + new_path = list(path) + new_path.append(rel_neighbors[0]) + queue.append(new_path) + else: # add all neighbors to the search + for neighbor in rel_neighbors: + new_path = list(path) + new_path.append(neighbor) + queue.append(new_path) + explored.append(node) + # if we reached the end of the queue, then no path was found + return None
+ + +
+[docs] + def exterior_cycle(self, cycle_root): + """Computes exterior boundary from a given node. + + This method assumes that exterior edges are naked (unidirectional) and + interior edges are bidirectional. + + Args: + cycle_root: Starting _Node in exterior cycle. + + Returns: + List of nodes on exterior if a cycle exists, else None. + """ + # Get the first exterior edge + curr_node = cycle_root + next_node = PolygonDirectedGraph.next_exterior_node(curr_node) + if not next_node: + return None + + # loop through the cycle until we get it all or run out of points + max_iter = self.node_count + 1 # maximum length a cycle can be + ext_cycle = [curr_node] + iter_count = 0 + while next_node.key != cycle_root.key: + ext_cycle.append(next_node) + next_node = PolygonDirectedGraph.next_exterior_node(next_node) + if not next_node: + return None # we have hit a dead end in the cycle + iter_count += 1 + if iter_count > max_iter: + break # we have gotten stuck in a loop + + return ext_cycle
+ + +
+[docs] + def exterior_cycles(self): + """Get a list of lists where each sub-list is an exterior cycle of Nodes.""" + exterior_poly_lst = [] # list to store cycles + explored_nodes = set() # set to note explored exterior nodes + max_iter = self.node_count + 1 # maximum length a cycle can be + + # loop through all of the nodes of the graph and find cycles + for root_node in self.ordered_nodes: + # make a note that the current node has been explored + explored_nodes.add(root_node.key) # mark the node as explored + # get next exterior adjacent node and check that it's valid + next_node = self.next_exterior_node(root_node) # mark the node as explored + is_valid = (next_node is not None) and (next_node.key not in explored_nodes) + if not is_valid: + continue + # make a note that the next node has been explored + explored_nodes.add(next_node.key) + + # traverse the loop of points until we get back to start or hit a dead end + exterior_poly = [root_node] + prev_node = root_node + iter_count = 0 + while next_node.key != root_node.key: + exterior_poly.append(next_node) + explored_nodes.add(next_node.key) # mark the node as explored + follow_node = self.next_exterior_node_no_backtrack( + next_node, prev_node, explored_nodes) + prev_node = next_node # set as the previous node for the next step + next_node = follow_node + if next_node is None: + break # we have hit a dead end in the cycle + iter_count += 1 + if iter_count > max_iter: + print('Extraction of core polygons hit an endless loop.') + break # we have gotten stuck in a loop + exterior_poly_lst.append(exterior_poly) + + # return all of the exterior loops that were found + return exterior_poly_lst
+ + +
+[docs] + @staticmethod + def next_exterior_node_no_backtrack(node, previous_node, explored_nodes): + """Get the next exterior node adjacent to the input node. + + This method is similar to the next_exterior_node method but it includes + extra checks to handle intersections with 3 or more segments in the + graph exterior cycles. In these cases a set of previously explored_nodes + is used to ensure that no back-tracking happens over the search of the + network, which can lead to infinite looping through the graph. Furthermore, + the previous_node is used to select the pathway with the smallest angle + difference with the previous direction. This leads the result towards + minimal polygons with fewer self-intersecting loops. + + Args: + node: A _Node object for which the next node will be returned. + previous_node: A _Node object for the node that came before + the current one in the loop. This will be used in the event that + multiple exterior nodes are found connecting to the input node. + In this case, the exterior node with the smallest angle difference + with the previous direction will be returned. This leads the + result towards minimal polygons and away from self-intersecting + exterior loops like a bowtie. + + Returns: + Next node that defines exterior edge, or None if all adjacencies are + bidirectional. + """ + # loop through the all adjacent nodes and determine if they are exterior + next_nodes = [] + for _next_node in node.adj_lst: + if _next_node.exterior: # user has labeled it as exterior; we're done! + return _next_node + elif _next_node.exterior is None: # don't know if it's interior or exterior + # if user-assigned attribute isn't defined, check bi-directionality + if not PolygonDirectedGraph.is_edge_bidirect(node, _next_node): + next_nodes.append(_next_node) + + # evaluate whether there is one obvious choice for the next node + if len(next_nodes) <= 1: + return next_nodes[0] if len(next_nodes) == 1 else None + next_nodes = [nn for nn in next_nodes if nn.key not in explored_nodes] + if len(next_nodes) <= 1: + return next_nodes[0] if len(next_nodes) == 1 else None + + # if we have multiple exterior nodes, use the previous node to find the best one + prev_dir = previous_node.pt - node.pt # yields a vector + next_angles = [] + for next_node in next_nodes: + edge_dir = next_node.pt - node.pt # yields a vector + next_angles.append(prev_dir.angle(edge_dir * -1)) + sorted_nodes = [n for _, n in sorted(zip(next_angles, next_nodes), + key=lambda pair: pair[0])] + return sorted_nodes[0] # return the node making the smallest angle
+ + +
+[docs] + @staticmethod + def next_exterior_node(node): + """Get the next exterior node adjacent to consumed node. + + If there are adjacent nodes that are labeled as exterior, with True or + False defining the _Node.exterior property, the first of such nodes in + the adjacency list will be returned as the next one. Otherwise, the + bi-directionality will be used to determine whether the next node is + exterior. + + Args: + node: A _Node object for which the next node will be returned. + + Returns: + Next node that defines exterior edge, or None if all adjacencies are + bidirectional. + """ + # loop through the adjacency and find an exterior node + for _next_node in node.adj_lst: + if _next_node.exterior: # user has labeled it as exterior; we're done! + return _next_node + elif _next_node.exterior is None: # don't know if it's interior or exterior + # if user-assigned attribute isn't defined, check bi-directionality + if not PolygonDirectedGraph.is_edge_bidirect(node, _next_node): + return _next_node + return None
+ + +
+[docs] + @staticmethod + def is_edge_bidirect(node1, node2): + """Are two nodes bidirectional. + + Args: + node1: _Node object + node2: _Node object + + Returns: + True if node1 and node2 are in each other's adjacency list, + else False. + """ + return node1.key in (n.key for n in node2.adj_lst) and \ + node2.key in (n.key for n in node1.adj_lst)
+ + + def __repr__(self): + """Represent PolygonDirectedGraph.""" + s = '' + for n in self.ordered_nodes: + s += '{}, [{}]\n'.format( + n.pt.to_array(), + ', '.join([str(_n.pt.to_array()) for _n in n.adj_lst])) + return s
+ + + +
+[docs] +def skeleton_as_directed_graph(boundary, holes=None, tolerance=1e-5): + """Compute the straight skeleton of a shape as a PolygonDirectedGraph. + + Args: + boundary: A ladybug-geometry Polygon2D for the boundary around the shape + for which the straight skeleton will be computed. + holes: An optional list of ladybug-geometry Polygon2D for the holes within + the shape for which a straight skeleton will be computed. If None, + it will be assumed that no holes exist in the shape. (Default: None). + tolerance: Tolerance for point equivalence. (Default: 1e-5). + + Returns: + A PolygonDirectedGraph object that represents the network and boundary + of the straight skeleton. All interior connections in the graph are + assumed to be bi-directional. The edges (including the boundary + and holes) are uni-directional with the outer boundary being counterclockwise + and the holes being clockwise. In other words, the fill of the shape is + always to the left of each exterior edge. The nodes at the boundary + and the holes have the exterior property set to True. + """ + # get the segments representing the straight skeleton + skeleton = skeleton_as_edge_list(boundary, holes, tolerance) + skeleton, is_intersect_topology = _intersect_skeleton_segments(skeleton, tolerance) + skeleton = _remove_segments_outside_boundary(skeleton, boundary, tolerance) + + # ensure the boundary and holes are oriented correctly for the graph + if boundary.is_clockwise: + boundary = boundary.reverse() + loops = [boundary.vertices] + if holes is not None: + for hole in holes: + if hole.is_clockwise: + loops.append(hole.vertices) + else: + loops.append(hole.reverse().vertices) + + # make the directed graph and add the nodes for the boundary + holes + dg_tol = 2 * tolerance # use 2 times the tolerance to ensure hashing works + dg = PolygonDirectedGraph(tol=dg_tol) + for loop_count, vertices in enumerate(loops): + for j in range(len(vertices) - 1): + curr_v = vertices[j] + next_v = vertices[j + 1] + k = dg.add_node(curr_v, [next_v], exterior=True) + if j == 0: + if loop_count == 0: + dg.outer_root_key = k + else: + dg.hole_root_keys.append(k) + dg.add_node(vertices[-1], [vertices[0]], exterior=True) # close loop + + # add the straight skelton to the graph + for seg in skeleton: + # add a bidirectional edge to represent skeleton edges + dg.add_node(seg.p2, [seg.p1]) + dg.add_node(seg.p1, [seg.p2], exterior=False) + + # set the property to track whether the graph is self-intersecting + dg.is_intersect_topology = is_intersect_topology + return dg
+ + + +
+[docs] +def skeleton_as_cycle_polygons(boundary, holes=None, tolerance=1e-5): + """Compute the straight skeleton of a shape as a list of cycle polygons. + + Args: + boundary: A ladybug-geometry Polygon2D for the boundary around the shape + for which the straight skeleton will be computed. + holes: An optional list of ladybug-geometry Polygon2D for the holes within + the shape for which a straight skeleton will be computed. If None, + it will be assumed that no holes exist in the shape. (Default: None). + tolerance: Tolerance for point equivalence. (Default: 1e-5). + + Returns: + A list of Polygon2D that represent the straight skeleton of the input shape. + There will be one Polygon2D for each edge of the shape (including both + the boundary and the holes). Together, the Polygon2Ds will fill the + entire input shape. There may be some overlap in between the output + polygons if the straight skeleton did not have the correct topology. + """ + # get the straight skeleton as a PolygonDirectedGraph + dg = skeleton_as_directed_graph(boundary, holes, tolerance) + + # function to add cycles to the list of polygons to be returned + cycle_polys = [] + + def _add_cycle_polygon(min_cycle): + """Add a cycle of Nodes to the list of polygons.""" + if min_cycle is not None: + cycle_poly = Polygon2D([node.pt for node in min_cycle]) + cycle_polys.append(cycle_poly) + + # convert the edge cycles to Polygon2D + exter_cycle = dg.exterior_cycle(dg.outer_root_node) + for i, base_node in enumerate(exter_cycle[:-1]): + next_node = exter_cycle[i + 1] + _add_cycle_polygon(dg.min_cycle(next_node, base_node)) + _add_cycle_polygon(dg.min_cycle(exter_cycle[0], exter_cycle[-1])) + if holes is not None: + for hole_root in dg.hole_root_nodes: + exter_cycle = dg.exterior_cycle(hole_root) + for i, base_node in enumerate(exter_cycle[:-1]): + next_node = exter_cycle[i + 1] + _add_cycle_polygon(dg.min_cycle(next_node, base_node)) + _add_cycle_polygon(dg.min_cycle(exter_cycle[0], exter_cycle[-1])) + return cycle_polys
+ +
+ +
+ +
+
+
+
+

+ Back to top + +

+

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

+
+
+ + \ No newline at end of file diff --git a/docs/_modules/ladybug_geometry_polyskel/polyskel.html b/docs/_modules/ladybug_geometry_polyskel/polyskel.html new file mode 100644 index 0000000..526062f --- /dev/null +++ b/docs/_modules/ladybug_geometry_polyskel/polyskel.html @@ -0,0 +1,1092 @@ + + + + + + + ladybug_geometry_polyskel.polyskel — ladybug-geometry-polyskel documentation + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ +

Source code for ladybug_geometry_polyskel.polyskel

+# coding=utf-8
+"""Implementation of the straight skeleton algorithm by Felkel and Obdrzalek[1].
+
+The functions and classes here here are derived directly from the polyskel python
+library by Armin Scipiades (@Bottfy), which is available at:
+https://github.com/Botffy/polyskel
+
+[1] Felkel, Petr and Stepan Obdrzalek. 1998. "Straight Skeleton Implementation." In
+Proceedings of Spring Conference on Computer Graphics, Budmerice, Slovakia. 210 - 218.
+"""
+from __future__ import division
+
+import heapq
+from itertools import tee, islice, cycle, chain
+from collections import namedtuple
+import operator
+
+# Geometry classes
+from ladybug_geometry.geometry2d import Point2D, Ray2D, LineSegment2D, Polygon2D
+from ladybug_geometry.intersection2d import intersect_line_segment2d, \
+    intersect_line2d
+
+# Polygon sorting classes
+_OriginalEdge = namedtuple('_OriginalEdge', 'edge bisector_left, bisector_right')
+Subtree = namedtuple('Subtree', 'source, height, sinks')
+_SplitEventSubClass = namedtuple(
+    '_SplitEvent', 'distance, intersection_point, vertex, opposite_edge')
+_EdgeEventSubClass = namedtuple(
+    '_EdgeEvent', 'distance intersection_point vertex_a vertex_b')
+
+
+def _window(lst):
+    """Window operator for lists.
+
+    Consumes a list of items, and returns a zipped list of the previous,
+    current and next items in the list, accessible by the same index.
+
+    Args:
+        lst: list
+
+    Returns:
+        Zipped list of previous, current and next items in list.
+    """
+    prevs, items, nexts = tee(lst, 3)
+    prevs = islice(cycle(prevs), len(lst) - 1, None)
+    nexts = islice(cycle(nexts), 1, None)
+    return zip(prevs, items, nexts)
+
+
+def _cross(a, b):
+    """Get the determinant between two Vector2Ds and/or Point2Ds."""
+    return a.x * b.y - b.x * a.y
+
+
+def _approximately_equals(a, b):
+    """Determine whether two Point2Ds or Vector2Ds are equal within a relative tolerance.
+    """
+    return a == b or (abs(a - b) <= max(abs(a), abs(b)) * 0.001)
+
+
+def _normalize_contour(contour, tol):
+    """Consumes list of x,y coordinate tuples and returns list of Point2Ds.
+
+    Args:
+        contour: list of x,y tuples from contour.
+        tol: Number for point equivalence tolerance.
+
+    Return:
+         list of Point2Ds of contour.
+    """
+    contour = [Point2D(float(x), float(y)) for (x, y) in contour]
+    normed_contour = []
+    for prev, point, next in _window(contour):
+        normed_prev = (point - prev).normalize()
+        normed_next = (next - point).normalize()
+
+        if not point.is_equivalent(next, tol) or \
+                normed_prev.is_equivalent(normed_next, tol):
+            normed_contour.append(point)
+
+    return normed_contour
+
+
+class _SplitEvent(_SplitEventSubClass):
+    """A SplitEvent is a reflex vertex that splits an Edge Event.
+
+    They therefore split the entire polygon and create new adjacencies between
+    the split edge and each of the two edges incident to the reflex
+    vertex (Felkel and Obdrzalek 1998, 1).
+    """
+    __slots__ = ()
+
+    def __lt__(self, other):
+        return self.distance < other.distance
+
+    def __str__(self):
+        return "{} Split event @ {} from {} to {}".format(
+            self.distance, self.intersection_point, self.vertex, self.opposite_edge)
+
+
+class _EdgeEvent(_EdgeEventSubClass):
+    """An EdgeEvent is an edge extended from a perimeter edge, that shrinks to zero.
+
+    This will make its neighboring edges adjacent (Felkel and Obdrzalek 1998, 2).
+    """
+    __slots__ = ()
+
+    def __lt__(self, other):
+        return self.distance < other.distance
+
+    def __str__(self):
+        return "{} Edge event @ {} between {} and {}".format(
+            self.distance, self.intersection_point, self.vertex_a, self.vertex_b)
+
+
+class _LAVertex:
+
+    def __init__(self, point, edge_left, edge_right, direction_vectors=None, tol=1e-5):
+        """A vertex in a double connected circular list of active vertices."""
+        self.tol = tol
+        self.point = point
+        self.edge_left = edge_left
+        self.edge_right = edge_right
+        self.prev = None
+        self.next = None
+        self.lav = None
+        # TODO this might be handled better. Maybe membership in lav implies validity?
+        self._valid = True
+
+        creator_vectors = (edge_left.v.normalize() * -1, edge_right.v.normalize())
+        if direction_vectors is None:
+            direction_vectors = creator_vectors
+
+        self._is_reflex = (_cross(*direction_vectors)) < 0
+        self._bisector = Ray2D(
+            self.point, operator.add(*creator_vectors) * (-1 if self.is_reflex else 1))
+
+    @property
+    def bisector(self):
+        return self._bisector
+
+    @property
+    def is_reflex(self):
+        return self._is_reflex
+
+    @property
+    def original_edges(self):
+        return self.lav._slav._original_edges
+
+    def next_event(self):
+        events = []
+        if self.is_reflex:
+            # A reflex vertex may generate a split event.
+            # Split events happen when a vertex hits an opposite edge,
+            # thereby splitting the polygon in two.
+            for edge in self.original_edges:
+                if edge.edge == self.edge_left or edge.edge == self.edge_right:
+                    continue
+
+                # A potential b is at the intersection between our own bisector and
+                # the bisector of the angle between the tested edge and any one of our
+                # own edges.
+                # We choose 'less parallel' edge (to exclude a potentially parallel edge)
+
+                # Make normalized copies of vectors
+                norm_edge_left_v = self.edge_left.v.normalize()
+                norm_edge_right_v = self.edge_right.v.normalize()
+                norm_edge_v = edge.edge.v.normalize()
+
+                # Compute dot
+                leftdot = abs(norm_edge_left_v.dot(norm_edge_v))
+                rightdot = abs(norm_edge_right_v.dot(norm_edge_v))
+                selfedge = self.edge_left if leftdot < rightdot else self.edge_right
+
+                # Make copies of edges and compute intersection
+                self_copy = LineSegment2D(selfedge.p, selfedge.v)
+                edge_copy = LineSegment2D(edge.edge.p, edge.edge.v)
+                i = intersect_line_segment2d(edge_copy, self_copy)
+
+                if i is not None and not _approximately_equals(i, self.point):
+                    # locate candidate b
+                    linvec = (self.point - i).normalize()
+                    edvec = edge.edge.v.normalize()
+                    if linvec.dot(edvec) < 0:
+                        edvec = -edvec
+
+                    bisecvec = edvec + linvec
+                    if abs(bisecvec) == 0:
+                        continue
+                    bisector = LineSegment2D(i, bisecvec)
+                    b = intersect_line2d(self.bisector, bisector)
+
+                    if b is None:
+                        continue
+
+                    # Check eligibility of b.
+                    # A valid b should lie within the area limited by the edge
+                    # and the bisectors of its two vertices.
+                    _left_bisector_norm = edge.bisector_left.v.normalize()
+                    _left_b_norm = (b - edge.bisector_left.p).normalize()
+                    xleft = _left_bisector_norm.determinant(_left_b_norm) > -self.tol
+
+                    _right_bisector_norm = edge.bisector_right.v.normalize()
+                    _right_b_norm = (b - edge.bisector_right.p).normalize()
+                    xright = _right_bisector_norm.determinant(_right_b_norm) < self.tol
+
+                    _edge_edge_norm = edge.edge.v.normalize()
+                    _b_to_edge_norm = (b - edge.edge.p).normalize()
+                    xedge = _edge_edge_norm.determinant(_b_to_edge_norm) < self.tol
+
+                    if not (xleft and xright and xedge):
+                        continue  # discarded candidate
+                    # found valid candidate
+                    _d2b = LineSegment2D(edge.edge.p, edge.edge.v).distance_to_point(b)
+                    _new_split_event = _SplitEvent(_d2b, b, self, edge.edge)
+                    events.append(_new_split_event)
+
+        i_prev = self.bisector.intersect_line_ray(self.prev.bisector)
+        i_next = self.bisector.intersect_line_ray(self.next.bisector)
+
+        if i_prev is not None:
+            left_seg = LineSegment2D(self.edge_left.p, self.edge_left.v)
+            dist_to_i_prev = left_seg.distance_to_point(i_prev)
+            events.append(_EdgeEvent(dist_to_i_prev, i_prev, self.prev, self))
+        if i_next is not None:
+            right_seg = LineSegment2D(self.edge_right.p, self.edge_right.v)
+            dist_to_i_next = right_seg.distance_to_point(i_next)
+            events.append(_EdgeEvent(dist_to_i_next, i_next, self, self.next))
+
+        if not events:
+            return None
+
+        ev = min(events, key=lambda event:
+                 self.point.distance_to_point(event.intersection_point))
+        return ev
+
+    def invalidate(self):
+        if self.lav is not None:
+            self.lav.invalidate(self)
+        else:
+            self._valid = False
+
+    @property
+    def is_valid(self):
+        return self._valid
+
+    def __str__(self):
+        return "Vertex ({:.2f};{:.2f})".format(self.point.x, self.point.y)
+
+    def __repr__(self):
+        return 'Vertex ({}) ({:.2f};{:.2f}), bisector {}, edges {} {}'.format(
+            'reflex' if self.is_reflex else 'convex',
+            self.point.x, self.point.y, self.bisector,
+            self.edge_left, self.edge_right)
+
+
+class _SLAV:
+
+    def __init__(self, polygon, tol=1e-5):
+        """ A set of circular lists of active vertices.
+
+        It stores a loop of vertices for the polygon created during the straight
+        skeleton computation (Felkel and Obdrzalek 1998).
+        """
+        self.tol = tol
+        contours = [_normalize_contour(polygon, tol)]
+        self._lavs = [_LAV.from_polygon(contour, self) for contour in contours]
+
+        # store original polygon edges for calculating split events
+        self._original_edges = [
+            _OriginalEdge(
+                LineSegment2D(vertex.prev.point, vertex.point),
+                vertex.prev.bisector, vertex.bisector
+            ) for vertex in chain.from_iterable(self._lavs)
+        ]
+
+    def __iter__(self):
+        for lav in self._lavs:
+            yield lav
+
+    def __len__(self):
+        return len(self._lavs)
+
+    def empty(self):
+        return len(self._lavs) == 0
+
+    def handle_edge_event(self, event):
+        """Resolves adjacency of new edge event.
+
+        This function resolves the edge event with previous edges, LAV, and then stores
+        edge information in a Subtree.
+
+        Args:
+            event: EdgeEvent
+
+        Returns:
+            Subtree namedTuple
+        """
+        sinks = []
+        events = []
+
+        lav = event.vertex_a.lav
+        # triangle; one sink point
+        if event.vertex_a.prev == event.vertex_b.next:
+            self._lavs.remove(lav)
+            for vertex in list(lav):
+                sinks.append(vertex.point)
+                vertex.invalidate()
+        else:
+            new_vertex = lav.unify(event.vertex_a, event.vertex_b,
+                                   event.intersection_point)
+            if lav.head in (event.vertex_a, event.vertex_b):
+                lav.head = new_vertex
+            sinks.extend((event.vertex_a.point, event.vertex_b.point))
+            next_event = new_vertex.next_event()
+            if next_event is not None:
+                events.append(next_event)
+
+        return (Subtree(event.intersection_point, event.distance, sinks), events)
+
+    def handle_split_event(self, event):
+        """Consumes a split event.
+
+        This function resolves the adjacency of new split event with previous edges, LAV,
+        and then stores edge information in a Subtree.
+
+        Args:
+            event: EdgeEvent
+
+        Returns:
+            Subtree namedTuple
+        """
+        lav = event.vertex.lav
+        sinks = [event.vertex.point]
+        vertices = []
+        x = None  # right vertex
+        y = None  # left vertex
+        norm = event.opposite_edge.v.normalize()
+        for v in chain.from_iterable(self._lavs):
+            if norm == v.edge_left.v.normalize() and \
+                    event.opposite_edge.p == v.edge_left.p:
+                x = v
+                y = x.prev
+            elif norm == v.edge_right.v.normalize() and \
+                    event.opposite_edge.p == v.edge_right.p:
+                y = v
+                x = y.next
+
+            if x:
+                xleft = y.bisector.v.normalize().determinant(
+                    (event.intersection_point - y.point).normalize()) >= -self.tol
+
+                xright = x.bisector.v.normalize().determinant(
+                    (event.intersection_point - x.point).normalize()) <= self.tol
+
+                if xleft and xright:
+                    break
+                else:
+                    x = None
+                    y = None
+
+        if x is None:
+            return (None, [])
+
+        v1 = _LAVertex(event.intersection_point, event.vertex.edge_left,
+                       event.opposite_edge, tol=self.tol)
+        v2 = _LAVertex(event.intersection_point, event.opposite_edge,
+                       event.vertex.edge_right, tol=self.tol)
+
+        v1.prev = event.vertex.prev
+        v1.next = x
+        event.vertex.prev.next = v1
+        x.prev = v1
+
+        v2.prev = y
+        v2.next = event.vertex.next
+        event.vertex.next.prev = v2
+        y.next = v2
+
+        new_lavs = None
+        self._lavs.remove(lav)
+        if lav != x.lav:
+            # the split event actually merges two lavs
+            self._lavs.remove(x.lav)
+            new_lavs = [_LAV.from_chain(v1, self)]
+        else:
+            new_lavs = [_LAV.from_chain(v1, self), _LAV.from_chain(v2, self)]
+
+        for lv in new_lavs:
+            if len(lv) > 2:
+                self._lavs.append(lv)
+                vertices.append(lv.head)
+            else:
+                sinks.append(lv.head.next.point)
+                for v in list(lv):
+                    v.invalidate()
+
+        events = []
+        for vertex in vertices:
+            next_event = vertex.next_event()
+            if next_event is not None:
+                events.append(next_event)
+
+        event.vertex.invalidate()
+        return (Subtree(event.intersection_point, event.distance, sinks), events)
+
+
+class _LAV:
+
+    def __init__(self, slav):
+        """A single circular list of active vertices.
+
+        Stored in a SLAV (Felkel and Obdrzalek 1998, 2).
+        """
+        self.head = None
+        self._slav = slav
+        self._len = 0
+        self.tol = slav.tol
+
+    @classmethod
+    def from_polygon(cls, polygon, slav):
+        """Construct a LAV from a list of point coordinates representing a polygon.
+
+        Args:
+            polygon: list of points (tuple of x,y coordinates).
+            slav: SLAV (a set of circular lists of active vertices).
+
+        Returns:
+            LAV (single circular list of active vertices).
+        """
+        lav = cls(slav)
+        for prev, point, next in _window(polygon):
+            lav._len += 1
+            vertex = _LAVertex(
+                point,
+                LineSegment2D.from_end_points(prev, point),
+                LineSegment2D.from_end_points(point, next),
+                tol=slav.tol
+            )
+            vertex.lav = lav
+            if lav.head is None:
+                lav.head = vertex
+                vertex.prev = vertex.next = vertex
+            else:
+                vertex.next = lav.head
+                vertex.prev = lav.head.prev
+                vertex.prev.next = vertex
+                lav.head.prev = vertex
+        return lav
+
+    @classmethod
+    def from_chain(cls, head, slav):
+        """Creates new LAV from consumed _LAVertex, and reference _SLAV.
+
+        Args:
+            head: Head _LAVertex that creates new _LAV loop.
+            slav: Reference SLAV (a set of circular lists of active vertices).
+
+        Returns:
+            LAV (a single circular list of active vertices).
+        """
+        lav = cls(slav)
+        lav.head = head
+        for vertex in lav:
+            lav._len += 1
+            vertex.lav = lav
+        return lav
+
+    def invalidate(self, vertex):
+        """Sets vertex validity to False, and handles head relationship.
+
+        Args:
+            vertex: _LAVertex to be invalidated.
+        """
+        assert vertex.lav is self, 'Tried to invalidate a vertex that is not mine'
+        vertex._valid = False
+        if self.head == vertex:
+            self.head = self.head.next
+        vertex.lav = None
+
+    def unify(self, vertex_a, vertex_b, point):
+        """Generate new _LAVertex from input Point2D and resolve adjacency to old edges.
+
+        Args:
+            vertex_a: _LAVertex
+            vertex_b: _LAVertex
+            point: Intersection point from angle bisectors from vertex_a and
+                vertex_b as a Point2D.
+
+        Returns:
+            _LAVertex of intersection point.
+        """
+        replacement = _LAVertex(
+            point, vertex_a.edge_left, vertex_b.edge_right,
+            (vertex_b.bisector.v.normalize(), vertex_a.bisector.v.normalize()),
+            tol=vertex_a.tol
+        )
+        replacement.lav = self
+
+        if self.head in [vertex_a, vertex_b]:
+            self.head = replacement
+
+        vertex_a.prev.next = replacement
+        vertex_b.next.prev = replacement
+        replacement.prev = vertex_a.prev
+        replacement.next = vertex_b.next
+
+        vertex_a.invalidate()
+        vertex_b.invalidate()
+
+        self._len -= 1
+        return replacement
+
+    def __str__(self):
+        return "LAV {}".format(id(self))
+
+    def __repr__(self):
+        return "{} = {}".format(str(self), [vertex for vertex in self])
+
+    def __len__(self):
+        return self._len
+
+    def __iter__(self):
+        cur = self.head
+        while True:
+            yield cur
+            cur = cur.next
+            if cur == self.head:
+                return
+
+    def _show(self):
+        cur = self.head
+        while True:
+            print(cur.__repr__())
+            cur = cur.next
+            if cur == self.head:
+                break
+
+
+class _EventQueue:
+
+    def __init__(self):
+        """A priority queue that stores vertices of the polygon."""
+        self.__data = []
+
+    def put(self, item):
+        if item is not None:
+            heapq.heappush(self.__data, item)
+
+    def put_all(self, iterable):
+        for item in iterable:
+            heapq.heappush(self.__data, item)
+
+    def get(self):
+        return heapq.heappop(self.__data)
+
+    def empty(self):
+        return len(self.__data) == 0
+
+    def peek(self):
+        return self.__data[0]
+
+    def show(self):
+        for item in self.__data:
+            print(item)
+
+
+def _merge_sources(skeleton):
+    """Merge the sources of a straight skeleton.
+
+    In highly symmetrical shapes with reflex vertices, multiple sources may share
+    the same  location. This function merges those sources.
+    """
+    sources = {}
+    to_remove = []
+    for i, p in enumerate(skeleton):
+        source = tuple(i for i in p.source)
+        if source in sources:
+            source_index = sources[source]
+            # source exists, merge sinks
+            for sink in p.sinks:
+                if sink not in skeleton[source_index].sinks:
+                    skeleton[source_index].sinks.append(sink)
+            to_remove.append(i)
+        else:
+            sources[source] = i
+    for i in reversed(to_remove):
+        skeleton.pop(i)
+
+
+def _clean_sinks(skeleton, tol=1e-5):
+    """Remove cases where the source and sink point are the same.
+
+    This can occur as an unintended effect of merging sources.
+    """
+    clean_subtrees = []
+    for s_tree in skeleton:
+        source, clean_sinks, is_invalid = s_tree.source, [], False
+        for sink in s_tree.sinks:
+            if source.is_equivalent(sink, tol):
+                is_invalid = True
+            else:
+                clean_sinks.append(sink)
+        if is_invalid:  # create a new Subtree
+            clean_subtrees.append(Subtree(source, s_tree.height, clean_sinks))
+        else:
+            clean_subtrees.append(s_tree)
+    return clean_subtrees
+
+
+def _skeletonize(polygon, tol=1e-5):
+    """Compute the straight skeleton of a Polygon.
+
+    Args:
+        polygon: A list of 2D vertices in clockwise order (when viewed from
+            above the XY plane). For example, a square can be represented with
+            the following: [[0,1], [1,1], [0,0], [1,0]]
+        tol: Tolerance for point equivalence. (Default: 1e-5).
+
+    Returns:
+        The straight skeleton as a list of "subtrees", which are in the form of
+        (source, height, sinks). Source is the highest points, height is its
+        height, and sinks are the point connected to the source.
+    """
+    slav = _SLAV(polygon, tol=tol)
+    output = []
+    prioque = _EventQueue()
+
+    for lav in slav:
+        for vertex in lav:
+            v = vertex.next_event()
+            prioque.put(v)
+
+    # While the priority queue or SLAV is not empty, compute the intersection of
+    # bisectors at edge. The 'handle_edge_event' method computes the next event
+    # from the new intersection via the next_event method. Thus, this while loop
+    # iteratively adds new events without recursion.
+    while not (prioque.empty() or slav.empty()):
+        i = prioque.get()  # vertex a, b is self or next vertex
+        # Handle edge or split events.
+        # arc: subtree(event.intersection_point, event.distance, sinks)
+        # events: updated events with new vertex
+        if isinstance(i, _EdgeEvent):
+            if not i.vertex_a.is_valid or not i.vertex_b.is_valid:
+                continue
+            (arc, events) = slav.handle_edge_event(i)
+        elif isinstance(i, _SplitEvent):
+            if not i.vertex.is_valid:
+                continue
+            (arc, events) = slav.handle_split_event(i)
+        prioque.put_all(events)
+
+        # As we traverse priorque, output list of "subtrees", which are in the form
+        # of (source, height, sinks) where source is the highest points, height is
+        # its distance to an edge, and sinks are the point connected to the source.
+        if arc is not None:
+            output.append(arc)
+    # merge the sources and clean the result
+    _merge_sources(output)
+    output = _clean_sinks(output, tol=1e-5)
+    return output
+
+
+def _intersect_skeleton_segments(skeleton, tolerance=1e-5):
+    """Intersect all of the LineSegment2D of the skeleton and split them.
+
+    Args:
+        skeleton: A list of ladybug-geometry LineSegment2D for the segments
+            of the straight skeleton.
+        tolerance: The tolerance at which the intersection will be computed.
+
+    Returns:
+        A tuple with two items.
+
+        * split_skeleton -- A list of LineSegment2D objects for the skeleton
+            split through self-intersection.
+
+        * is_intersect_topology -- A boolean value for whether the topology of the
+            input skeleton is self-intersecting. This value is True whenever
+            there are segments that were split as part of this operation.
+    """
+    # extend skeleton segments a little to ensure intersections happen
+    under_tol = tolerance * 0.99
+    ext_skeleton = []
+    for seg in skeleton:
+        m_v = seg.v.normalize() * under_tol
+        ext_seg = LineSegment2D.from_end_points(seg.p1.move(-m_v), seg.p2.move(m_v))
+        ext_skeleton.append(ext_seg)
+
+    # compute all of the intersection points across the skeleton
+    intersect_pts = [[] for _ in skeleton]
+    for i, seg in enumerate(skeleton):
+        try:
+            for other_seg in ext_skeleton[:i] + ext_skeleton[i + 1:]:
+                int_pt = intersect_line_segment2d(seg, other_seg)
+                if int_pt is None or int_pt.is_equivalent(seg.p1, tolerance) or \
+                        int_pt.is_equivalent(seg.p2, tolerance):
+                    continue
+                # we have found an intersection point where segments should be split
+                intersect_pts[i].append(int_pt)
+        except IndexError:
+            pass  # we have reached the end of the list
+
+    # loop through the segments and split them at the intersection points
+    split_skeleton, is_intersect_topology = [], False
+    for seg, split_pts in zip(skeleton, intersect_pts):
+        if len(split_pts) == 0:
+            split_skeleton.append(seg)
+        elif len(split_pts) == 1:  # split the segment in two
+            is_intersect_topology = True
+            int_pt = split_pts[0]
+            split_skeleton.append(LineSegment2D.from_end_points(seg.p1, int_pt))
+            split_skeleton.append(LineSegment2D.from_end_points(int_pt, seg.p2))
+        else:  # sort the points along the segment to split it
+            is_intersect_topology = True
+            pt_dists = [seg.p1.distance_to_point(ipt) for ipt in split_pts]
+            sort_obj = sorted(zip(pt_dists, split_pts), key=lambda pair: pair[0])
+            sort_pts = [x for _, x in sort_obj]
+            sort_pts.append(seg.p2)
+            pr_pt = seg.p1
+            for s_pt in sort_pts:
+                if not pr_pt.is_equivalent(s_pt, tolerance):
+                    split_skeleton.append(LineSegment2D.from_end_points(pr_pt, s_pt))
+                pr_pt = s_pt
+
+    return split_skeleton, is_intersect_topology
+
+
+def _remove_segments_outside_boundary(skeleton, boundary, tolerance=1e-5):
+    """Remove LineSegment2D that are outside the boundary of the parent shape.
+
+    This can be used to clean up the result after intersection of segments
+    since the skeleton routines can sometimes fail to produce a result that
+    is completely within the parent shape.
+
+    Args:
+        skeleton: A list of ladybug-geometry LineSegment2D for the segments
+            of the straight skeleton.
+        boundary: A Polygon2D for the boundary of the shape. Segments that lie
+            outside of this boundary beyond the tolerance will be removed from
+            the result.
+        tolerance: The tolerance for distinguishing whether skeleton points lie
+            outside the boundary.
+
+    Returns:
+        A tuple with two items.
+
+        * clean_skeleton -- A list of LineSegment2D objects with segments removed
+            that outside of the boundary.
+    """
+    clean_skeleton = []
+    for seg in skeleton:
+        p1, p2 = seg.p1, seg.p2
+        if boundary.point_relationship(p2, tolerance) >= 0 and \
+                boundary.point_relationship(p1, tolerance) >= 0:
+            clean_skeleton.append(seg)
+    return clean_skeleton
+
+
+
+[docs] +def skeleton_as_subtree_list(boundary, holes=None, tolerance=1e-5): + """Get a straight skeleton as a list of Subtree source and sink points. + + Args: + boundary: A ladybug-geometry Polygon2D for the boundary around the shape + for which the straight skeleton will be computed. + holes: An optional list of ladybug-geometry Polygon2D for the holes within + the shape for which a straight skeleton will be computed. If None, + it will be assumed that no holes exist in the shape. (Default: None). + tolerance: Tolerance for point equivalence. (Default: 1e-5). + + Returns: + A list of Subtree objects that represent the straight skeleton. + """ + # merge the holes into the boundary if they are specified + if holes is not None and len(holes) != 0: + bound_pts = list(boundary.vertices) + hole_pts = [list(h.vertices) for h in holes] + boundary = Polygon2D.from_shape_with_holes(bound_pts, hole_pts) + + # pre-process the boundary to be sure it is in the right order + boundary = boundary.remove_duplicate_vertices(tolerance) + if not boundary.is_clockwise: + boundary = boundary.reverse() + + # skeletonize the objects + skel_tol = tolerance / 100 # use a finer tolerance for actual skeleton + subtree_list = _skeletonize(boundary.to_array(), skel_tol) + + # if holes were merged into the boundary, try to clean up the merge seams + if holes is not None and len(holes) != 0: + # gather the seams along which holes were merged + all_segs, seam_segs = boundary.segments, [] + for i, seg in enumerate(all_segs): + try: + for o_seg in all_segs[i + 1:]: + if seg.p1.is_equivalent(o_seg.p2, tolerance) and \ + seg.p2.is_equivalent(o_seg.p1, tolerance): + seam_segs.append(seg) + break + except IndexError: + pass # we have reached the end of the list + # replace the subtrees along the seam with the seam itself + for seam in seam_segs: + s_p1, s_p2 = seam.p1, seam.p2 + new_subtrees, connecting_pts, new_height = [], [], 0 + for sub_tree in subtree_list: + sink_pts = sub_tree.sinks + replace_sub = False + if len(sink_pts) == 2: + if s_p1.is_equivalent(sink_pts[0], tolerance) or \ + s_p1.is_equivalent(sink_pts[1], tolerance): + if s_p2.is_equivalent(sink_pts[0], tolerance) or \ + s_p2.is_equivalent(sink_pts[1], tolerance): + new_height = sub_tree.height + replace_sub = True + connecting_pts.append(sub_tree.source) + if not replace_sub: + new_subtrees.append(sub_tree) + subtree_list = new_subtrees + seam_sub = Subtree(seam.midpoint, new_height, connecting_pts + [s_p1, s_p2]) + subtree_list.append(seam_sub) + + return subtree_list
+ + + +
+[docs] +def skeleton_as_edge_list(boundary, holes=None, tolerance=1e-5, intersect=False): + """Get a straight skeleton as list of LineSegment2D. + + Args: + boundary: A ladybug-geometry Polygon2D for the boundary around the shape + for which the straight skeleton will be computed. + holes: An optional list of ladybug-geometry Polygon2D for the holes within + the shape for which a straight skeleton will be computed. If None, + it will be assumed that no holes exist in the shape. (Default: None). + tolerance: Tolerance for point equivalence. (Default: 1e-5). + intersect: A boolean to note whether the segments of the skeleton should + be intersected with one another before being returned. This can + help make the skeleton more usable in the event that its topology + is not correct. (Default: False). + + Returns: + A list of LineSegment2D that represent the straight skeleton. + """ + # get the Subtree representation of the straight skeleton + subtree_list = skeleton_as_subtree_list(boundary, holes, tolerance) + + # extract the LineSegment2D from the Subtree representation + skeleton = [] + for subtree in subtree_list: + source_pt = subtree.source + for sink_pt in subtree.sinks: + edge_seg = LineSegment2D.from_end_points( + Point2D(source_pt.x, source_pt.y), Point2D(sink_pt.x, sink_pt.y)) + skeleton.append(edge_seg) + + if intersect: # intersect skeleton segments to split them + skeleton, _ = _intersect_skeleton_segments(skeleton, tolerance) + skeleton = _remove_segments_outside_boundary(skeleton, boundary, tolerance) + return skeleton
+ +
+ +
+ +
+
+
+
+

+ Back to top + +

+

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

+
+
+ + \ No newline at end of file diff --git a/docs/_modules/ladybug_geometry_polyskel/polysplit.html b/docs/_modules/ladybug_geometry_polyskel/polysplit.html new file mode 100644 index 0000000..0bc017c --- /dev/null +++ b/docs/_modules/ladybug_geometry_polyskel/polysplit.html @@ -0,0 +1,565 @@ + + + + + + + ladybug_geometry_polyskel.polysplit — ladybug-geometry-polyskel documentation + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ +

Source code for ladybug_geometry_polyskel.polysplit

+# coding=utf-8
+"""Functions for splitting a polygon into sub-polygons based on skeleton topology."""
+from __future__ import division
+
+from ladybug_geometry.geometry2d import LineSegment2D, Polygon2D
+from ladybug_geometry.geometry3d import Vector3D, LineSegment3D, Face3D
+
+from .polygraph import PolygonDirectedGraph, skeleton_as_directed_graph
+
+
+
+[docs] +def perimeter_core_subfaces(face, distance, tolerance=1e-5): + """Compute perimeter and core Face3Ds using the straight skeleton of an input Face3D. + + Args: + face: A Face3D to split into perimeter and core sub-faces. + distance: Distance to offset perimeter sub-faces. + tolerance: Tolerance for point equivalence. (Default: 1e-5). + + Returns: + A tuple with two items. + + * perimeter_sub_faces -- A list of Face3Ds for perimeter sub-faces. + + * core_sub_faces -- A list of Face3D for core sub-faces. + """ + # get core and perimeter sub-polygons + perimeter, core = perimeter_core_subpolygons( + face.boundary_polygon2d, distance, face.hole_polygon2d, tolerance, False) + # convert the polygons into Face3Ds + return _polygons_to_face3d(face, perimeter, core)
+ + + +
+[docs] +def perimeter_core_subfaces_and_skeleton(face, distance, tolerance=1e-5): + """Compute perimeter and core Face3Ds using the straight skeleton of an input Face3D. + + Args: + face: A Face3D to split into perimeter and core sub-faces. + distance: Distance to offset perimeter sub-faces. + tolerance: Tolerance for point equivalence. (Default: 1e-5). + + Returns: + A tuple with two items. + + * skeleton -- A list of LineSegment3D for the segments of the straight + skeleton being used to generate core/perimeter polygons. + + * perimeter_sub_faces -- A list of Face3Ds for perimeter sub-faces. + + * core_sub_faces -- A list of Face3D for core sub-faces. + """ + # get core and perimeter sub-polygons + skeleton_2d, perimeter, core = perimeter_core_subpolygons_and_skeleton( + face.boundary_polygon2d, distance, face.hole_polygon2d, tolerance) + perimeter_sub_faces, core_sub_faces = _polygons_to_face3d(face, perimeter, core) + # convert the skeleton segments into LineSegment3Ds + skeleton = [] + for seg in skeleton_2d: + verts_3d = tuple(face.plane.xy_to_xyz(pt) for pt in seg.vertices) + skeleton.append(LineSegment3D.from_end_points(*verts_3d)) + return skeleton, perimeter_sub_faces, core_sub_faces
+ + + +
+[docs] +def perimeter_core_subpolygons( + polygon, distance, holes=None, tolerance=1e-5, flat_core=True): + """Compute perimeter and core sub-polygons using the polygon straight skeleton. + + Args: + polygon: A Polygon2D to split into perimeter and core sub-polygons. + distance: Distance to offset perimeter sub-polygons. + holes: A list of Polygon2D objects representing holes in the + polygon. (Default: None). + tolerance: Tolerance for point equivalence. (Default: 1e-5). + flat_core: A boolean to note whether the core_sub_polys should be returned + as a flat list or as a nested list of lists for boundaries and + holes within each geometry. + + Returns: + A tuple with two items. + + * perimeter_sub_polys -- A list of Polygon2Ds for perimeter sub-polygons. + + * core_sub_polys -- When flat_core is True, this will be a list of Polygon2D + where each Polygon2D represents a loop in the core geometry. When + flat_core is False, this will be a list of lists where each sub-list + contains Polygon2Ds and represents one core geometry. The sub-list + will have has at least one Polygon2D in it and, in the event that + a core geometry has holes, there will be multiple Polygon2Ds in the + sub-list. The first item in the list will be the outer boundary of + the geometry and successive items represent hole polygons. + """ + # initialize sub polygon lists + perimeter_sub_polys, core_sub_polys = [], [] + # compute the straight skeleton of the polygon as a directed graph + dg = skeleton_as_directed_graph(polygon, holes, tolerance) + # traverse the directed graph to get all of the perimeter polygons + _perimeter_sub_dg = None + root_keys = [dg.outer_root_key] + dg.hole_root_keys + for root_key in root_keys: + # compute the polygons on the perimeter of the polygon + _perimeter_sub_polys, _perimeter_sub_dg = _split_perimeter_subpolygons( + dg, distance, root_key, tolerance, _perimeter_sub_dg) + perimeter_sub_polys.extend(_perimeter_sub_polys) # collect perimeter sub-polys + # compute the polygons on the core of the polygon + core_sub_polys = _exterior_cycles_as_polygons(_perimeter_sub_dg, tolerance) + if not flat_core and len(core_sub_polys) != 0: # remake cores w/ holes + core_sub_polys = Polygon2D.group_boundaries_and_holes(core_sub_polys, tolerance) + return perimeter_sub_polys, core_sub_polys
+ + + +
+[docs] +def perimeter_core_subpolygons_and_skeleton( + polygon, distance, holes=None, tolerance=1e-5): + """Get perimeter and core sub-polygons with line segments for the straight skeleton. + + Args: + polygon: A Polygon2D to split into perimeter and core sub-polygons. + distance: Distance to offset perimeter sub-polygons. + holes: A list of Polygon2D objects representing holes in the + polygon. (Default: None). + tolerance: Tolerance for point equivalence. (Default: 1e-5). + + Returns: + A tuple with three items. + + * skeleton -- A list of LineSegment2D for the segments of the straight + skeleton being used to generate core/perimeter polygons. + + * perimeter_sub_polys -- A list of Polygon2Ds for perimeter sub-polygons. + + * core_sub_polys -- A list of lists where each sub-list contains Polygon2Ds + and represents one core geometry. The sub-list will have has at + least one Polygon2D and, in the event that a core geometry has holes, + there will be multiple Polygon2Ds in the sub-list. The first item in + the list will be the outer boundary of the geometry and successive + items represent hole polygons. + """ + # initialize sub polygon lists + perimeter_sub_polys, core_sub_polys = [], [] + # compute the straight skeleton of the polygon as a directed graph + dg = skeleton_as_directed_graph(polygon, holes, tolerance) + skeleton = dg.connection_segments + # traverse the directed graph to get all of the perimeter polygons + _perimeter_sub_dg = None + root_keys = [dg.outer_root_key] + dg.hole_root_keys + for root_key in root_keys: + # compute the polygons on the perimeter of the polygon + _perimeter_sub_polys, _perimeter_sub_dg = _split_perimeter_subpolygons( + dg, distance, root_key, tolerance, _perimeter_sub_dg) + perimeter_sub_polys.extend(_perimeter_sub_polys) # collect perimeter sub-polys + # compute the polygons on the core of the polygon + core_sub_polys = _exterior_cycles_as_polygons(_perimeter_sub_dg, tolerance) + if len(core_sub_polys) != 0: # remake cores w/ holes + core_sub_polys = Polygon2D.group_boundaries_and_holes(core_sub_polys, tolerance) + return skeleton, perimeter_sub_polys, core_sub_polys
+ + + +def _split_perimeter_subpolygons(dg, distance, root_key, tol, core_graph=None): + """Split polygons in the PolygonDirectedGraph into perimeter sub-polygons. + + Args: + dg: A PolygonDirectedGraph object that comes from the skeleton_as_directed_graph + function and contains separations for how a geometry will be split. + distance: The distance to offset the perimeter in model units. + root_key: A string key for a node in the input dg that identifies the + perimeter loop to be traversed. This will be used as the starting + point for graph traversal. + tol: A number representing the tolerance for point equivalence. + core_graph: An optional PolygonDirectedGraph that is being built to extract + the core of the shape after all perimeter sub-polygons are extracted. + This is used when the input dg contains holes and this method for + _split_perimeter_subpolygons must be run multiple times for the + boundary and each hole. (Default: None). + + Returns: + A tuple with two lists: + + * perimeter_subpolygons: A list of perimeter sub-polygons as Polygon2D objects. + + * core_graph: A PolygonDirectedGraph with just the perimeter sub-polygons. + The edges of this graph that are not bidirectional (exterior edges) + define the exterior of the polygon and it's core sub-polygons. + """ + # set up a list lto collect the perimeter polygons and the core graph + perimeter_subpolygons = [] + core_graph = PolygonDirectedGraph(tol=tol) if core_graph is None else core_graph + exter_cycle = dg.exterior_cycle(dg.node(root_key)) + + # cycle through exterior nodes and get split polygons using the distance + for i, base_node in enumerate(exter_cycle): + try: + next_node = exter_cycle[i + 1] + except IndexError: # the last edge of the polygon + next_node = exter_cycle[0] + # find the smallest polygon defined by the exterior node + min_ccw_poly_graph = dg.min_cycle(next_node, base_node) + + # proceed to extract the polygon and build up the core graph + if min_ccw_poly_graph is not None: + # everything is good, offset edge by distance and cut a perimeter polygon + split_poly_graph = _split_polygon_graph( + base_node, next_node, distance, min_ccw_poly_graph, tol) + # store the perimeter nodes in the core_graph + pts = [node.pt for node in split_poly_graph] + for i in range(len(pts) - 1): + core_graph.add_node(pts[i], [pts[i + 1]]) + # store perimeter points in list as polygon + perimeter_subpolygons.append(Polygon2D(pts)) + + else: # handle the case of unsuccessful minimum cycle polygon extraction + # if we are just missing a skeleton segment, there may still be hope + if len(next_node.adj_lst) == 1: # connect the node to the nearest interior + rel_nodes, node_dists = [], [] + for node in dg.nodes: + if not node.exterior: + rel_nodes.append(node) + node_dists.append(next_node.pt.distance_to_point(node.pt)) + near_nodes = [n for _, n in sorted(zip(node_dists, rel_nodes), + key=lambda pair: pair[0])] + dg.add_adj(next_node, [near_nodes[0].pt]) + dg.add_adj(near_nodes[0], [next_node.pt]) # add node di-directionally + min_ccw_poly_graph = dg.min_cycle(next_node, base_node) + + if min_ccw_poly_graph is not None: # connecting the node worked! + split_poly_graph = _split_polygon_graph( + base_node, next_node, distance, min_ccw_poly_graph, tol) + pts = [node.pt for node in split_poly_graph] + for i in range(len(pts) - 1): + core_graph.add_node(pts[i], [pts[i + 1]]) + perimeter_subpolygons.append(Polygon2D(pts)) + + else: # no hope of extracting a perimeter sub-polygon here + msg = 'Failed to compute sub-polygons between ' \ + 'Node {} and Node {}.'.format(base_node, next_node) + print(msg) + # close the core graph with the exterior segment and move on + core_graph.add_node(next_node.pt, [base_node.pt]) + + return perimeter_subpolygons, core_graph + + +def _split_polygon_graph(node1, node2, distance, poly_graph, tol): + """Split the PolygonDirectedGraph by an edge offset at a distance. + + Args: + node1: A node defining the edge to offset for splitting. If the graph + defines a counter-clockwise polygon, this node should represent + the left hand-most point. + node2: A node defining the edge to offset for splitting. If the graph + defines a counter-clockwise polygon, this node should represent + the right hand-most point. + distance: The distance to offset the splitting edge, in model units. + poly_graph: A list of Nodes representing a PolygonDirectedGraph for + a single polygon. + tol: Tolerance for point equivalence. + + Returns: + A list of nodes representing the split polygon adjacent to the exterior + edge defined by node1 and node2. + """ + # use the nodes to create a line segment + ext_seg = LineSegment2D.from_end_points(node1.pt, node2.pt) + # compute normal facing into the polygon + ext_arr = ext_seg.v.to_array() + ext_seg_v = Vector3D(ext_arr[0], ext_arr[1], 0) + normal = ext_seg_v.cross(Vector3D(0, 0, -1)).normalize() * distance + + # move the segment by normal to get offset segment + offset_seg = ext_seg.move(normal) + poly_graph = PolygonDirectedGraph.from_point_array( + [n.pt for n in poly_graph], tol=tol) + ordered_nodes = poly_graph.ordered_nodes + poly_graph.outer_root_key = ordered_nodes[0].key + root_node = ordered_nodes[0] + goal_node = ordered_nodes[-1] + + # update graph by intersecting offset segment with other edges + poly_graph.intersect_graph_with_segment(offset_seg) + + # get the minimum cycle through the graph connecting the nodes + # since we start at the exterior edge, this will include the perimeter offset + split_poly_nodes = poly_graph.min_cycle(root_node, goal_node, ccw_only=True) + + return split_poly_nodes + + +def _exterior_cycles_as_polygons(dg, tol): + """Convert and sort exterior cycles in a PolygonDirectedGraph to a list of polygons. + + Args: + dg: A PolygonDirectedGraph. + tol: The tolerance at which point equivalence is set. + + Returns: + A list of Polygon2D objects sorted by area. + """ + ext_cycles = dg.exterior_cycles() + ext_polygons = [] + for cycle in ext_cycles: + ext_poly = Polygon2D([node.pt for node in cycle]) + try: + ext_poly = ext_poly.remove_colinear_vertices(tol) + except AssertionError: # degenerate geometry to ignore + continue + if ext_poly.is_self_intersecting: + ext_polygons.extend(ext_poly.split_through_self_intersection(tol)) + else: + ext_polygons.append(ext_poly) + return ext_polygons + + +def _polygons_to_face3d(face, perimeter, core): + """Convert lists of perimeter and core Polygon2D into Face3D.""" + # convert the perimeter polygons into Face3Ds + perimeter_sub_faces = [] + for poly in perimeter: + verts_3d = tuple(face.plane.xy_to_xyz(pt) for pt in poly.vertices) + perimeter_sub_faces.append(Face3D(verts_3d, face.plane)) + # convert the core polygons into Face3Ds + core_sub_faces = [] + for poly_group in core: + all_verts_3d = [tuple(face.plane.xy_to_xyz(pt) for pt in poly.vertices) + for poly in poly_group] + if len(all_verts_3d) == 1: # no holes in the shape + core_sub_faces.append(Face3D(all_verts_3d[0], face.plane)) + else: + core_sub_faces.append(Face3D(all_verts_3d[0], face.plane, all_verts_3d[1:])) + return perimeter_sub_faces, core_sub_faces +
+ +
+ +
+
+
+
+

+ 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..41863ac --- /dev/null +++ b/docs/_sources/cli/index.rst.txt @@ -0,0 +1,10 @@ +CLI +=== + + +Commands +-------- +.. toctree:: + :maxdepth: 1 + + main diff --git a/docs/_sources/cli/main.rst.txt b/docs/_sources/cli/main.rst.txt new file mode 100644 index 0000000..c1e4065 --- /dev/null +++ b/docs/_sources/cli/main.rst.txt @@ -0,0 +1,7 @@ +main +==== + +.. click:: ladybug_geometry_polyskel.cli.__init__:main + :prog: ladybug-geometry-polyskel + :show-nested: + :commands: perimeter-core-subfaces diff --git a/docs/_sources/index.rst.txt b/docs/_sources/index.rst.txt new file mode 100644 index 0000000..14fa61d --- /dev/null +++ b/docs/_sources/index.rst.txt @@ -0,0 +1,36 @@ +Welcome to Ladybug Geometry Polyskel's documentation! +=================================== + +.. image:: http://www.ladybug.tools/assets/img/ladybug.png + +A library with straight skeleton methods using ladybug-geometry. + +Installation +============ + +``pip install -U ladybug-geometry-polyskel`` + +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/ladybug_geometry_polyskel.cli.rst.txt b/docs/_sources/ladybug_geometry_polyskel.cli.rst.txt new file mode 100644 index 0000000..b66c676 --- /dev/null +++ b/docs/_sources/ladybug_geometry_polyskel.cli.rst.txt @@ -0,0 +1,10 @@ +ladybug\_geometry\_polyskel.cli package +======================================= + +Module contents +--------------- + +.. automodule:: ladybug_geometry_polyskel.cli + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/_sources/ladybug_geometry_polyskel.offset.rst.txt b/docs/_sources/ladybug_geometry_polyskel.offset.rst.txt new file mode 100644 index 0000000..5298557 --- /dev/null +++ b/docs/_sources/ladybug_geometry_polyskel.offset.rst.txt @@ -0,0 +1,7 @@ +ladybug\_geometry\_polyskel.offset module +========================================= + +.. automodule:: ladybug_geometry_polyskel.offset + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/_sources/ladybug_geometry_polyskel.polygraph.rst.txt b/docs/_sources/ladybug_geometry_polyskel.polygraph.rst.txt new file mode 100644 index 0000000..fea903e --- /dev/null +++ b/docs/_sources/ladybug_geometry_polyskel.polygraph.rst.txt @@ -0,0 +1,7 @@ +ladybug\_geometry\_polyskel.polygraph module +============================================ + +.. automodule:: ladybug_geometry_polyskel.polygraph + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/_sources/ladybug_geometry_polyskel.polyskel.rst.txt b/docs/_sources/ladybug_geometry_polyskel.polyskel.rst.txt new file mode 100644 index 0000000..82bf8ec --- /dev/null +++ b/docs/_sources/ladybug_geometry_polyskel.polyskel.rst.txt @@ -0,0 +1,7 @@ +ladybug\_geometry\_polyskel.polyskel module +=========================================== + +.. automodule:: ladybug_geometry_polyskel.polyskel + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/_sources/ladybug_geometry_polyskel.polysplit.rst.txt b/docs/_sources/ladybug_geometry_polyskel.polysplit.rst.txt new file mode 100644 index 0000000..35a80c0 --- /dev/null +++ b/docs/_sources/ladybug_geometry_polyskel.polysplit.rst.txt @@ -0,0 +1,7 @@ +ladybug\_geometry\_polyskel.polysplit module +============================================ + +.. automodule:: ladybug_geometry_polyskel.polysplit + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/_sources/ladybug_geometry_polyskel.rst.txt b/docs/_sources/ladybug_geometry_polyskel.rst.txt new file mode 100644 index 0000000..118cb5e --- /dev/null +++ b/docs/_sources/ladybug_geometry_polyskel.rst.txt @@ -0,0 +1,29 @@ +ladybug\_geometry\_polyskel package +=================================== + +Subpackages +----------- + +.. toctree:: + :maxdepth: 4 + + ladybug_geometry_polyskel.cli + +Submodules +---------- + +.. toctree:: + :maxdepth: 4 + + ladybug_geometry_polyskel.offset + ladybug_geometry_polyskel.polygraph + ladybug_geometry_polyskel.polyskel + ladybug_geometry_polyskel.polysplit + +Module contents +--------------- + +.. automodule:: ladybug_geometry_polyskel + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/_sources/modules.rst.txt b/docs/_sources/modules.rst.txt new file mode 100644 index 0000000..5c9445c --- /dev/null +++ b/docs/_sources/modules.rst.txt @@ -0,0 +1,7 @@ +ladybug_geometry_polyskel +========================= + +.. toctree:: + :maxdepth: 4 + + ladybug_geometry_polyskel 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 + $('